算法導論:2 漸進符號、遞歸及解法

1 漸進符號

1.1 O符號

f(n)=O(g(n))

存在常數c>0n_{0}>0,對所有的n\geqslant n_{0},滿足0\leqslant f(n)\leqslant cg(n) 。f(n)的複雜度最多與g(n)一個數量級,即小於等於。

例:2n^{2}=O(n^{3})


出現在公式中的集合符號(如O)表示集合中的某一個函數,而不是集合整體。

例1:f(n)=n^{3}+O(n^{2})
直觀理解:表示了一個誤差界限,即f(n)主要是由n^{3}構成的,但也有一些O(n^{2})的低階項
實際含義:存在一個函數h(n)\in O(n^{2}),使得f(n)=n^{3}+h(n)

例2:n^{2}+O(n)=O(n^{2})
直觀理解:“=”應該理解成“是”,而不是“等於”。等號左邊隱含任意量詞,等號右邊隱含存在量詞,
實際含義:對於任意函數f(n)\in O(n),總存在函數h(n)\in O(n^{2}),使得n^{2}+f(n)=h(n)
用途: 如果有很長的“等式鏈”,第一個就等於最後一個(只能從左到右,因爲O是非對稱的)

 

1.2 \Omega 符號

  f(n)=\Omega (g(n)) 

 存在常數c>0n_{0}>0,對所有的n\geqslant n_{0},滿足0\leqslant ng(n)\leqslant f(n)成立。f(n)的複雜度最少與g(n)一個數量級,即大於等於。

例:\sqrt{n}=\Omega (logn)

 

1.3 \Theta符號

\Theta (g(n))=\Omega (g(n))\bigcap O(g(n))

f(n)=\Theta (g(n)),表示f(n)的複雜度既大於等於g(n)的複雜度,又小於等於g(n)的複雜度,即於g(n)的複雜度相當。

例:n^{2}=\Theta (n^{2}),     n^{2}+O(n)=\Theta (n^{2})

 

1.4 o\omega符號

更“嚴格的”O\Omega,不等式需要對所有的c成立,而不僅僅是一個特定的c

類比

 

2 求解遞歸的三種方法

2.1 代換法


第一步:猜答案Guess the form of the solution。代換法在大多數情況下是有效的,但是不幸的是第一步需是猜答案。你不需要完全猜出來,你可以不需要知道常數係數確切是多少,僅需要猜它的形式。

第二步:通過數學歸納法驗證第一步纔出來的form是否滿足條件。

第三步:也是第二步的必然結果,如果猜對了那麼很容易解出常數係數。

下圖所示是如何利用代換法解一個遞歸式:

證明  T(n)=O(n^{3})

那麼,上圖中證明了T(n)小於等於一個常數乘以n^{3}。圖中所解出的答案就是上界,不過不是嚴格的上界,事實上我們認爲n^{2}也成立。所以這並不能證明遞歸式的答案就是n^{3},這只是表示至多是O(n^{3})

證明  T(n)=O(n^{2})

改進歸納假設

考慮低階項!!

 

2.2 遞歸樹法

將抽象遞歸表達式具體化的最佳圖形表示就是遞歸樹。該模型以輸入規模爲n開始,一層層地分解,直到輸入規模變爲1爲止。而這個時候的解決方案已經是瑣細的了。圖3-5爲表達式T(n) = T(n /4) + T(n / 2)+ n2 的遞歸樹。


 各棵樹的葉子節點數不一樣,因爲遞歸速度不一樣。如果按n的子節點爲兩個n/2,葉子節點數爲n,該例子中n的節點爲n/4和n/2, 葉子節點數肯定小於n。

T(n)=n^{2}(1+\frac{5}{16}+(\frac{5}{16})^{2}+...)=O(n^{2})
 

2.3 主定理法(Master Method) 

每個子問題的規模相同,a個相同的子問題。

T(n)=aT(\frac{n}{b})+f(n)     where   a\geqslant 1, b\geqslant 1f(n) 是不參與遞歸的複雜度函數

判斷n^{log_{b}a}f(n)的大小關係(n^{log_{b}a}是遞歸樹葉子節點的數量):

  1. 若對某個常數\epsilon >0, 有f(n)=O(n^{log_{b}a-\epsilon} ),  則T(n)=\Theta (n^{log_{b}a})
  2. f(n)=\Theta (n^{log_{b}a} ), 則T(n)=\Theta (n^{log_{b}a}logn)
  3. 若對某個常數\epsilon >0, 有f(n)=\Omega (n^{log_{b}a+\epsilon} ),且對某個常數c<1和所有足夠大的naf(n/b)\leqslant cf(n),T(n)=\Theta (f(n))

分別舉出了主定理方法的三個應用場景的例子以及一個主定理方法不適用的例子。

 

 

證明主定理:

樹高度爲h=log_{b}n

 葉子節點數a^{h}=a^{log_{b}n}=n^{log_{b}a}

case 3 : 如果af(n/b)\leqslant cf(n), 代價由上到下呈幾何級數降低,最頂層的代價占主導地位,所以,T(n)=\Theta (f(n))

case1:   代價由上到下升高,最底層的代價占主導地位,所以,T(n)=\Theta (n^{log_{b}a})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章