https://www.cnblogs.com/LeeJD/p/12524855.htmlhtml
在分析算法效率時,常常關注如下兩種複雜度:算法
(1)最壞狀況複雜度:Tworst(n)函數
(2)平均複雜度:Tavg(n)spa
易知Tavg(n)<=Tworst(n)htm
注:通常分析最壞狀況複雜度,由於平均複雜度不容易找blog
下表可以比較直觀的看出各個複雜度的運行時間圖片
1 | 2 | 4 | 8 | 16 | 32 | |
C(常函數) | 1 | 1 | 1 | 1 | 1 | 1 |
logn | 0 | 1 | 2 | 3 | 4 | 5 |
n | 1 | 2 | 4 | 8 | 16 | 32 |
nlogn | 0 | 2 | 8 | 24 | 64 | 160 |
n2 | 1 | 4 | 16 | 64 | 256 | 1024 |
n3 | 1 | 8 | 64 | 512 | 4096 | 32768 |
2n | 2 | 4 | 16 | 256 | 65536 | 4294967296 |
n! | 1 | 2 | 24 | 40326 | 2092278988000 | 26313×1033 |
因此通常狀況下避免出現後兩種複雜度for循環
下圖是幾種複雜度的增加速度table
(圖片來自慕課,陳越姥姥那堂課)class
複雜度分析的竅門:
- 若已知T1(n) = O(f1(n))和T2(n) = O(f2(n)),則
T1(n) + T2(n) = max(O(f1(n)),O(f2(n))) (就是O(f1(n))和O(f2(n))的最大值)
T1(n) × T2(n) = O(f1(n) × f2(n)) - for循環的T(n) = 循環次數 × 循環體代碼的複雜度
- if-else結構的複雜度取決於if的條件判斷複雜度和兩個分支部分的複雜度,整體複雜度取三者中的最大值
2020-03-19