「算法」如何分析、統計算法的執行效率和資源消耗

「算法」如何分析、統計算法的執行效率和資源消耗

一、什麼是複雜度分析

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!)(階乘階)

五、如何掌握好複雜度分析方法

複雜度分析關鍵在於多練,所謂孰能生巧。


分享到:


相關文章: