主定理的數學證明


 

  分治算法中有一些算法,僅僅用分支遞推公式無法計算出其時間復雜性,因為它的遞推方程帶有一個冪項,雖然依靠迭代我們仍然可以求出其遞推公式,但是這么做未免太復雜浪費時間。

  這時候我們有一個通法,那就是主定理(master theorem),根據情況直接套公式就能求出時間復雜性。主定理形式如下

 

設f是滿足遞推關系

$f(n) = af(n/b) + cn^d$


的增函數,其中$n=b^k$,k是一個正整數,$a \geq1$,b是大於1的整數,c和d是實數,滿足c是正的且b是非負的,那么

$ f(n) = \begin{cases} O(n^d), a < b^d \\ O(n^d logn), a = b^d\\ O(n^{log_b a}), a > b^d \end{cases} $
 
證明一下:
Proof:
  
 
Proof:

假設N是b的冪,令$N = b^m$,假設f(1) = 1,則有

$f(b^m) = af(b^{m-1})+(b^k)^{m}$
$\frac{f(b^m)}{a^m} = \frac{f(b^{m-1})}{a^{m-1}}+(\frac{b^k}{a})^{m}$
...

將以上累加得

$\frac{f(b^m)}{a^m} = \sum\limits_{i=0}^{m}(\frac{b^k}{a})^i$

因此

$f(b^m) = a^m \sum\limits_{i=0}^{m}(\frac{b^k}{a})^i$

如果$a>b^k$

$f(N)=O(a^m)=O(N^{log_ba})$

如果$a=b^k$

$f(N)=O(a^mlog_bN)=O(N^klogN)$

如果$a < b^k$

$f(N)=\frac{(b^k/a)^{m+1} - 1}{b^k/a - 1} = O(a^m(\frac{b^k}{a})^{m})=O(N^k)$
             


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM