書上寫的太複雜了,不深讀文章不容易理解. 看馬士兵的視頻容易理解些.
如何測算算法的優劣:
時間測算
- 計算算法的時間差
- 幅度不夠循環來湊(時間少看不出算法的差別 就使用循環加大幅度)
時間複雜度
空間測算
- 看使用空間的大小
空間複雜度.
Big O 標記法
學術上算法區分算法的優劣
時間隨着問題規模的擴大 時間怎麼進行變化的
空間同理
- 不考慮必須要的操作. 循環, 賦初值, 程序初始化,
- 比如訪問數組的最後一個值花的時間, 不隨着數組的規模擴大而擴大, 這時時間複雜度是 O(1). 時間是固定的一個值.
- 不考慮常數項. 2n 到 n
- 比如 訪問鏈表的某個位置的值花的時間. (一般時間複雜度我們都是講的"最差"情況), 那麼假設鏈表的規模是n, 那麼時間複雜度就是O(n).
如果用圖表來表示
當問題規模在1的時候,時間是1. 當問題規模是2的時候, 時間是2.
下面是算法書裏面的圖解
分爲標準圖像 和對數圖像. 我上面畫的和對數圖像是一致的.
當然時間複雜度還有O(n2),O(n3) ,n的平方(兩遍循環),n的立方(三遍循環).
- 求數組的內所有數字的平均數是什麼. 想一想…
- O(n)