標籤:

主方法求解遞歸式

T(n) = aT(n/b) + f(n) 遞歸式描述一種演算法運行時間:

它將規模為n的問題分解為a個子問題,每個子問題的規模為n/b,其中ab都為正常數。a個子問題遞歸的求解,每個花費時間為T(n/b)。函數f(n)包含了問題分解和子問題解合併的代價。

主定理

ageq 1b>1是常數,f(n)是一個函數,T(n)是定義在非負整數上的遞歸式:

T(n)=aT(n/b)+f(n)

T(n)有如下漸近界:

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

對於三種情況中的每一種,我們將函數f(n)和函數n^{log_{b}^{a} } 進行比較,較大者決定了遞歸式的解。若函數 n^{log_{b}^{a} } 更大,如情況1,若函數f(n)更大,如情況3,若二者相當,如情況2。

情況3比較棘手,所以祈求碰到的問題f(n)小一點。


推薦閱讀:

二叉堆
剪繩子
插入排序
6. ZigZag Conversion(medium) & 7.Reverse Integer(easy)

TAG:演算法 |