算法之如何进行算法复杂度分析
一、什么是復雜度分析?
1.數(shù)據(jù)結構和算法解決是“如何讓計算機更快時間、更省空間的解決問題”。
2.因此需從執(zhí)行時間和占用空間兩個維度來評估數(shù)據(jù)結構和算法的性能。
3.分別用時間復雜度和空間復雜度兩個概念來描述性能問題,二者統(tǒng)稱為復雜度。
4.復雜度描述的是算法執(zhí)行時間(或占用空間)與數(shù)據(jù)規(guī)模的增長關系。
二、為什么要進行復雜度分析?
1.和性能測試相比,復雜度分析有不依賴執(zhí)行環(huán)境、成本低、效率高、易操作、指導性強的特點。
2.掌握復雜度分析,將能編寫出性能更優(yōu)的代碼,有利于降低系統(tǒng)開發(fā)和維護成本。
三、如何進行復雜度分析?
1.大O表示法
1)來源
算法的執(zhí)行時間與每行代碼的執(zhí)行次數(shù)成正比,用T(n) = O(f(n))表示,其中T(n)表示算法執(zhí)行總時間,f(n)表示每行代碼執(zhí)行總次數(shù),而n往往表示數(shù)據(jù)的規(guī)模。
2)特點
以時間復雜度為例,由于時間復雜度描述的是算法執(zhí)行時間與數(shù)據(jù)規(guī)模的增長變化趨勢,所以常量階、低階以及系數(shù)實際上對這種增長趨勢不產(chǎn)決定性影響,所以在做時間復雜度分析時忽略這些項。
2.復雜度分析法則
1)單段代碼看高頻:比如循環(huán)。
2)多段代碼取最大:比如一段代碼中有單循環(huán)和多重循環(huán),那么取多重循環(huán)的復雜度。
3)嵌套代碼求乘積:比如遞歸、多重循環(huán)等
4)多個規(guī)模求加法:比如方法有兩個參數(shù)控制兩個循環(huán)的次數(shù),那么這時就取二者復雜度相加。
四、常用的復雜度級別?
多項式階:隨著數(shù)據(jù)規(guī)模的增長,算法的執(zhí)行時間和空間占用,按照多項式的比例增長。包括,
O(1)(常數(shù)階)、O(logn)(對數(shù)階)、O(n)(線性階)、O(nlogn)(線性對數(shù)階)、O(n^2)(平方階)、O(n^3)(立方階)
非多項式階:隨著數(shù)據(jù)規(guī)模的增長,算法的執(zhí)行時間和空間占用暴增,這類算法性能極差。包括,
O(2^n)(指數(shù)階)、O(n!)(階乘階)
五、如何掌握好復雜度分析方法?
復雜度分析關鍵在于多練,所謂孰能生巧。
六、復雜度分析的4個概念
1.最壞情況時間復雜度:代碼在最理想情況下執(zhí)行的時間復雜度。
2.最好情況時間復雜度:代碼在最壞情況下執(zhí)行的時間復雜度。
3.平均時間復雜度:用代碼在所有情況下執(zhí)行的次數(shù)的加權平均值表示。
4.均攤時間復雜度:在代碼執(zhí)行的所有復雜度情況中絕大部分是低級別的復雜度,個別情況是高級別復雜度且發(fā)生具有時序關系時,可以將個別高級別復雜度均攤到低級別復雜度上?;旧暇鶖偨Y果就等于低級別復雜度。
七、為什么要引入這4個概念?
1.同一段代碼在不同情況下時間復雜度會出現(xiàn)量級差異,為了更全面,更準確的描述代碼的時間復雜度,所以引入這4個概念。
2.代碼復雜度在不同情況下出現(xiàn)量級差別時才需要區(qū)別這四種復雜度。大多數(shù)情況下,是不需要區(qū)別分析它們的。
八、如何分析平均、均攤時間復雜度?
1.平均時間復雜度
代碼在不同情況下復雜度出現(xiàn)量級差別,則用代碼所有可能情況下執(zhí)行次數(shù)的加權平均值表示。
2.均攤時間復雜度
兩個條件滿足時使用:1)代碼在絕大多數(shù)情況下是低級別復雜度,只有極少數(shù)情況是高級別復雜度;2)低級別和高級別復雜度出現(xiàn)具有時序規(guī)律。均攤結果一般都等于低級別復雜度。
轉載于:https://www.cnblogs.com/756623607-zhang/p/9758261.html
總結
以上是生活随笔為你收集整理的算法之如何进行算法复杂度分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Problem E: 零起点学算法25—
- 下一篇: 图床-1