1. 程式人生 > >大話資料結構【2】—演算法

大話資料結構【2】—演算法

  經常聽他們吹牛逼,這個用了什麼什麼牛逼的演算法,起了一個牛哄哄的名字,反正挺嚇人人的,不知道為什麼,現在給新東西起名字是越來越“嚇人了”!

  其實演算法就是解決特定問題的求解步驟,在計算機中表現為指令的有限序列。沒有什麼嚇人的東西,只是它的思想很精妙,有些作者可能是為了讓你感受到他思想的無比美妙的思想,才起了一個“嚇人的名字吧”。

  演算法有時候可以理解成看待問題的角度,角度對了,事半功倍,角度不對事倍功半,也有可能是一事無成,竹籃打水。看待問題的角度不一樣,去做事情的方式就不一樣了,結果可能就是千差萬別了!!!

  最經典的就是高斯大神的求和演算法和計算機迴圈求和,高斯大神的方法無論到多少都是那麼固定的幾步,而計算機迴圈就不一樣數字小還是算的挺快的,數字一大就卡住了。。。這就是不同之間演算法的差距,所以可想而知,選擇一個好的演算法多麼重要!!!

  演算法具有五個基本特性,在計算機的領域來說,演算法是依附在計算機上面的,所以肯定會受到計算機特性的影響,計算機有輸入,輸出,運算等特性。那麼依附在計算機上面的演算法肯定也要有輸入輸出等特性。在計算機中,演算法是用程式來表現的,程式有迴圈,分支,選擇等結構,所以演算法肯定也會具有這些特性。既然是程式,一定是有確定結果的,要麼是這個要麼是哪個。一定會在一個時間點停下來輸出結果,一定是可行的,不然是不可能編製成程式的。總結一下:輸入,輸出,可行性,確定性,有窮性。

  演算法不是憑空產生的,是人做出來的,或者說是人想出來,設計出來的,既然是人設計出來的,一定有一些人的特性和計算機的特性,計算機特性,正確性,高效率,低儲存量。

  正確性:演算法是針對問題來設計的,一定要能夠正確反映問題的需求,能夠得到問題的正確答案。演算法是要編織成程式的,既然這樣,【1】演算法程式不能有語法的錯誤,【2】演算法要對合法的輸入資料能夠產生滿足要求的正確結果【3】對於非法資料能夠得到滿足規格的說明【4】對於刁難的,但是滿足要求的資料都有滿足要求的輸出結果。

  健壯性:對於輸入資料不合法時,要能夠做出相應的處理而不是產生異常或者莫名其妙的結果。

  可讀性:演算法設計出來是給大家用的,如果別人無法理解你的演算法,即使結果是對的,別人也不會用,應為他們不知道什麼情況下會出現壞的結果。

  高效率和儲存量低:人們都希望花費最少的錢和時間把事情做好!對於演算法,也是這樣的道理呀。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

  演算法效率的度量方法:

    事後統計法:不談。(做完的才看結果對不對?)

    事前分析估演算法:這種是科學的。(先思考能不能做,再去做!)

   演算法效率的度量,主要就是演算法執行的時間的度量估算,我們知道演算法是要編織成程式的,程式主要有三種結構,分支,迴圈,選擇,而演算法的執行時間主要就和這些程式結構有關。常用大O表示法來表示程式的時間複雜度。

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------

  演算法的空間複雜度:演算法執行時會佔用的儲存空間,空間時間的關係彷彿是槓桿原理中力和力臂的關係,一個越小另一個就越大。有時候為了提高演算法的時間效率,往往會用空間來換卻時間的節省。

   利用好演算法複雜度的分析工具,改經自己的程式碼,讓計算機輕鬆一點,這樣你就能更加勝人一籌!