1. 程式人生 > >計算機演算法設計與分析學習筆記1

計算機演算法設計與分析學習筆記1

基本概念

程式 = 演算法 + 資料結構

演算法描述如何解決一類問題的一種方法,滿足如下性質:

-輸入:一類問題的例項
- 輸出:針對例項的解
- 確定性:每條指令無歧義
- 有限性:有限迴圈

程式 不滿足有限性性質, eg. 作業系統為無限迴圈。

為某一類問題設計演算法,具體流程如下:

問題求解過程

演算法複雜性分析

複雜性分析主要體現在:

  • 時間複雜性T(n)
  • 空間複雜性S(n)

其中,n 表徵問題的規模大小。

演算法的時間複雜性主要考慮:

  • 最壞情況下的時間複雜性,上界

    Tmax(n)=max{T(I)

    |size(I)=n}

  • 最好情況下的時間複雜性, 下界

    Tmin(n)=min{T(I)|size(I)=n}

  • 平均複雜性

    Tavg(n)=size(I)=np(I)T(I)

時間複雜度分析更側重於漸進性複雜性分析,即

limnT(n)=?

5種漸進符號

1
2
3

注意:
4

即對於一個比較大的程式,通常由幾步構成,其時間複雜度取決於最複雜的一步。

判斷兩個函式的漸進關係

給定函式, f(n), g(n), f(n) > 0, g(n)>0, 有如下定理:

定理1:

limnf(n)/g(n)=c,cf(n)=Θ(g(n))

定理2:

limnf(n)/g(n)=f(n)=w(g(n))

定理3:

limnf(n)/g(n)=0,cf(n)=o(g(n))

常見函式

  • 常數
  • log(n) 多項式
  • n的多項式
  • 指數函式
  • 階乘

注意:
5

6

不同函式的漸進關係可通過前節的3個定理來判斷。

Reference:

課件ch0.Introduction