常用網站:
算法可視化動畫演示
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
常見的幾種時間複雜度
O(x) | 英文釋義 | 中文釋義 |
---|---|---|
O(1) | Constant Complexity | 常數複雜度 |
O(log n) | Logarithmic Complexity | 對數複雜度 |
O(n) | Linear Complexity | 線性時間複雜度 |
O(n^2) | N square Complexity | 平方D |
O(n^3) | N cubic Complexity | 立方 |
O(2^n) | Exponential Growth | 指數 |
O(n!) | Factorial | 階乘 |
注意:
1. 只看最高複雜度的運算。
2. O(x)前面的常數係數被選擇性忽略,比如O(n)時間複雜度,可以運行2n次
時間複雜度曲線
遞歸狀態的時間複雜度分析
例題:求斐波那契數列
分析思路:以fib(6)爲例:
共有2^6次計算
改進方法:
a. 添加一個緩存機制
b. 使用循環
主定理
空間複雜度
- 代碼中開了數組,則數組長度基本上就是空間複雜度
- 遞歸深度
參考文檔:
- 如何理解算法時間複雜度的表示法,例如 O(n²)、O(n)、O(1)、O(nlogn) 等? https://www.zhihu.com/question/21387264
- https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)
- https://zh.wikipedia.org/wiki/主定理