《大話資料結構》讀後總結(五)

徐曙輝發表於2019-03-29

函式的漸近增長

假設兩個演算法的輸入規模都是n,演算法A要做2n+3次操作,你可以理解為先有一個n次的迴圈,執行完成後,再有一個n次迴圈,最後有三次賦值或運算,共2n+3次操作。演算法B要做3n+1次操作。

《大話資料結構》讀後總結(五)

當n=1時,演算法A效率不如演算法B(次數比演算法B要多一次)。而當n=2時,兩者效率相同;當n>2時,演算法A就開始優於演算法B了,隨著n的增加,演算法A比演算法B越來越好了(執行的次數比B要少)。於是我們可以得出結論,演算法A總體上要好過演算法B。

輸入規模n在沒有限制的情況下,只要超過一個數值N,這個函式就總是大於另一個函式,函式是漸近增長的。

函式的漸近增長:給定兩個函式f(n)和g(n),如果存在一個整數N,使得對於所有的n>N,f(n)總是比g(n)大,那麼,我們說f(n)的增長漸近快於g(n)。

《大話資料結構》讀後總結(五)

當n≤3的時候,演算法C要差於演算法D(因為演算法C次數比較多),但當n>3後,演算法C的優勢就越來越優於演算法D了,到後來更是遠遠勝過。

而當後面的常數去掉後,其實結果沒有發生改變。

去掉與n相乘的常數,這樣的結果也沒發生改變,演算法C′的次數隨著n的增長,還是遠小於演算法D′。也就是說,與最高次項相乘的常數並不重要。

《大話資料結構》讀後總結(五)

當n=1的時候,演算法E與演算法F結果相同,但當n>1後,演算法E的優勢就要開始優於演算法F,隨著n的增大,差異非常明顯。通過觀察發現,最高次項的指數大的,函式隨著n的增長,結果也會變得增長特別快。

《大話資料結構》讀後總結(五)

當n的值越來越大時,你會發現,3n+1已經沒法和2n2的結果相比較,最終幾乎可以忽略不計。也就是說,隨著n值變得非常大以後,演算法G其實已經很趨近於演算法I。於是我們可以得到這樣一個結論,判斷一個演算法的效率時,函式中的常數和其他次要項常常可以忽略,而更應該關注主項(最高階項)的階數。

如果對比這幾個演算法的關鍵執行次數函式的漸近增長性,可以分析出:某個演算法,隨著n的增大,它會越來越優於另一演算法,或者越來越差於另一演算法。這其實就是事前估算方法的理論依據,通過演算法時間複雜度來估算演算法時間效率。

歡迎掃描下方二維碼,持續關注:

image

網際網路工程師(id:phpstcn),我們一起學習,一起進步

相關文章