算法之如何進行算法復雜度分析


一、什么是復雜度分析?
1.數據結構和算法解決是“如何讓計算機更快時間、更省空間的解決問題”。
2.因此需從執行時間和占用空間兩個維度來評估數據結構和算法的性能。
3.分別用時間復雜度和空間復雜度兩個概念來描述性能問題,二者統稱為復雜度。
4.復雜度描述的是算法執行時間(或占用空間)與數據規模的增長關系。

二、為什么要進行復雜度分析?
1.和性能測試相比,復雜度分析有不依賴執行環境、成本低、效率高、易操作、指導性強的特點。
2.掌握復雜度分析,將能編寫出性能更優的代碼,有利於降低系統開發和維護成本。

三、如何進行復雜度分析?

1.大O表示法
1)來源
算法的執行時間與每行代碼的執行次數成正比,用T(n) = O(f(n))表示,其中T(n)表示算法執行總時間,f(n)表示每行代碼執行總次數,而n往往表示數據的規模。
2)特點
以時間復雜度為例,由於時間復雜度描述的是算法執行時間與數據規模的增長變化趨勢,所以常量階、低階以及系數實際上對這種增長趨勢不產決定性影響,所以在做時間復雜度分析時忽略這些項。

2.復雜度分析法則
1)單段代碼看高頻:比如循環。
2)多段代碼取最大:比如一段代碼中有單循環和多重循環,那么取多重循環的復雜度。
3)嵌套代碼求乘積:比如遞歸、多重循環等
4)多個規模求加法:比如方法有兩個參數控制兩個循環的次數,那么這時就取二者復雜度相加。

四、常用的復雜度級別?
多項式階:隨着數據規模的增長,算法的執行時間和空間占用,按照多項式的比例增長。包括,
O(1)(常數階)、O(logn)(對數階)、O(n)(線性階)、O(nlogn)(線性對數階)、O(n^2)(平方階)、O(n^3)(立方階)
非多項式階:隨着數據規模的增長,算法的執行時間和空間占用暴增,這類算法性能極差。包括,
O(2^n)(指數階)、O(n!)(階乘階)

五、如何掌握好復雜度分析方法?
復雜度分析關鍵在於多練,所謂孰能生巧。

六、復雜度分析的4個概念
1.最壞情況時間復雜度:代碼在最理想情況下執行的時間復雜度。
2.最好情況時間復雜度:代碼在最壞情況下執行的時間復雜度。
3.平均時間復雜度:用代碼在所有情況下執行的次數的加權平均值表示。
4.均攤時間復雜度:在代碼執行的所有復雜度情況中絕大部分是低級別的復雜度,個別情況是高級別復雜度且發生具有時序關系時,可以將個別高級別復雜度均攤到低級別復雜度上。基本上均攤結果就等於低級別復雜度。

七、為什么要引入這4個概念?
1.同一段代碼在不同情況下時間復雜度會出現量級差異,為了更全面,更准確的描述代碼的時間復雜度,所以引入這4個概念。
2.代碼復雜度在不同情況下出現量級差別時才需要區別這四種復雜度。大多數情況下,是不需要區別分析它們的。

八、如何分析平均、均攤時間復雜度?
1.平均時間復雜度
代碼在不同情況下復雜度出現量級差別,則用代碼所有可能情況下執行次數的加權平均值表示。
2.均攤時間復雜度
兩個條件滿足時使用:1)代碼在絕大多數情況下是低級別復雜度,只有極少數情況是高級別復雜度;2)低級別和高級別復雜度出現具有時序規律。均攤結果一般都等於低級別復雜度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM