1. 程式人生 > >資料結構隨筆——演算法

資料結構隨筆——演算法

所看演算法課程視訊

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.複雜度分析小竅門

  1. 若兩段演算法分別有複雜度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) )
  2. 若T(n)是關於n的k階多項式,那麼T(n)=Θ(n^k)
  3. 一個for迴圈的時間複雜度等於迴圈次數乘以迴圈體程式碼的複雜度
  4. if-else 結構的複雜度取決於if的條件判斷複雜度和兩個分枝部分的複雜度,總體複雜度取三者中最大