資料結構隨筆——演算法
阿新 • • 發佈:2018-12-01
1. 什麼是演算法?
- 一個有限指令集
- 接受一些輸入(有些情況下不需要輸入)
- 產生輸出
- 一定在有限步驟之後終止
- 每一條指令必須
1.有充分明確的目標,不可以有歧義
2.計算機能處理的範圍之內
3.描述應不依賴於任何一種計算機語言以及具體的實現
手段
2.什麼是時間空間複雜度?
空間複雜度S(n) —— 根據演算法寫成的程式在執行時
佔用儲存單元的長度。這個長度往往與輸入資料的
規模有關。空間複雜度過高的演算法可能導致使用的
記憶體超限,造成程式非正常中斷。
時間複雜度T(n) —— 根據演算法寫成的程式在執行時
耗費時間的長度。這個長度往往也與輸入資料的規
模有關。時間複雜度過高的低效演算法可能導致我們
在有生之年都等不到執行結果。
3.複雜度的漸進表示法
T(n) = O(f(n)) 表示存在常數C >0, n0>0 使得當n>=n0 時有T(n) <=C·f(n)
T(n) = Ω(g(n)) 表示存在常數C >0, n0>0 使得當n>=n0 時有T(n) >=C·g(n)
T(n) = Θ(h(n)) 表示同時有T(n) = O(h(n))和T(n) = Ω(h(n))
4.複雜度分析小竅門
- 若兩段演算法分別有複雜度T1(n)=O(f1(n))和T2(n)=O(f2(n)),則
T1(n)+T2(n)=max( O(f1(n)),O(f2(n)) )
T1(n)*T2(n)=O( f1(n)*f2(n) ) - 若T(n)是關於n的k階多項式,那麼T(n)=Θ(n^k)
- 一個for迴圈的時間複雜度等於迴圈次數乘以迴圈體程式碼的複雜度
- if-else 結構的複雜度取決於if的條件判斷複雜度和兩個分枝部分的複雜度,總體複雜度取三者中最大