資料結構01-時空分析
阿新 • • 發佈:2022-04-05
1、時空分析
1、1時間複雜度分析
我們一般採用大 o 表示法,大 O 複雜度表示法
, 它並不表示程式碼執行真正需要的時間 , 而是一種隨著資料規模增長的趨勢。也就是我們考慮的是執行時間的上界。
//example: int cal(int n) { int sum = 0; //執行一次 int i = 1; //執行一次 for (; i <= n; ++i) //執行n次 { sum = sum + i;//執行n次 } return sum; //執行一次 } //總的執行時間就是 T = 3T(1) + 2T(n) //因為我們只是估算一個增長趨勢, 而常數和係數不會對增長趨勢產生什麼影響, 所以可以簡寫為 f(n) = n //當 n 足夠大的時候,整個 T 就趨向於 f(n) 則有 T(n) = O(n) , 即表示: 程式碼執行時間T(n)和程式碼執行次數f(n)成正比
如何快速估算一段程式碼的時間複雜度呢
1, 只關注迴圈執行次數最多的一段程式碼
2, 總的複雜度 = 複雜度量級最高的那段程式碼的複雜度
3, 巢狀程式碼的複雜度 = 巢狀內外程式碼複雜度的乘積
1、2常見的時間複雜度
O(1)
O(logn)
O(n)
O(nlogn)
O(n^2)
i = 1;
while (i <= n)
{
i = i * 3;
}
計算方式:看迴圈終止時,關鍵語句執行次數
\[i = 3^x = n \] \[x = logn \]即 i = i *3 執行 logn 次,那麼時間複雜度就是 T = O(logn)
1、3空間複雜度分析
空間複雜度全稱是漸進空間複雜度, 表示演算法的儲存空間和資料規模之間的增長關係
常用的空間複雜度量級有O(1), O(n), O(n^2)