主定理 Master Theorem

分治法主定理

主定理 Master Theorem

主定理的证明

假设有递归式:
T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)
证明:
T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n) =a[aT(n/b2)+f(n/b)]+f(n) = a\big[aT(n/b^2)+f(n/b)\big] + f(n) =a2T(n/b2)+f(n)+af(n/b)  = a^2T(n/b^2) + f(n) + af(n/b) ~\,=akT(n/bk)+j=0k1ajf(n/bj)     = a^{k}T(n/b^k) + \sum_{j=0}^{k-1} a^j f(n/b^j) ~~~~= (nb)             = \cdots ~(不妨设n是b的幂)~~~~~~~~~~~~=alogbnT(1)+j=0logbn1ajf(n/bj)   = a^{log_b^n}T(1) + \sum_{j=0}^{log_b^n-1} a^j f(n/b^j) ~~
由对数的换底公式:alogbn=blogb(alogbn)=blogbalogbn=blogbnlogba=blogb(nlogba)=nlogbaa^{log_b^n} =b^{log_b^{(a^{log_b^n})}} =b^{log_b^a log_b^n} =b^{log_b^n log_b^a}= b^{log_b^{(n^{log_b^a})}}=n^{log_b^a}

所以原递归式的渐进复杂度为O(nlogba)+j=0logbn1ajf(n/bj)O(n^{log_b^a}) + \sum_{j=0}^{log_b^n-1} a^j f(n/b^j)

简单起见,下面只考虑 f(n)=nkf(n) = n^k 的情形:
j=0logbn1ajf(n/bj) \sum_{j=0}^{log_b^n-1} a^j f(n/b^j)=j=0logbn1aj(n/bj)k        = \sum_{j=0}^{log_b^n-1} a^j (n/b^j)^k ~~~~~~~=nkj=0logbn1(a/bk)j        = n^k\sum_{j=0}^{log_b^n-1} (a/b^k)^j ~~~~~~~={nk(1(a/bk)logbn1a/bk),如果abknk(logbn1),如果a=bk = \left\{ \begin{array}{lr} n^k \left(\frac{1-(a/b^k)^{log_b^n}}{1-a/b^k}\right), & \text{如果$a\neq b^k$}\\ &\\ n^k(log_b^n-1), & \text{如果$a = b^k$} \end{array} \right. ={O(nk),如果a<bk(k>logba)O(nlogba),如果a>bkO(nklogbn)=O(nlogbalogbn),如果a=bk = \left\{ \begin{array}{lr} O(n^k) , & \text{如果$a < b^k(k>log_b^a)$}\\ &\\ O(n^{log_b^a}), & \text{如果$a> b^k$}\\ &\\ O(n^klog_b^n)=O(n^{log_b^a}log_b^n), & \text{如果$a = b^k$} \end{array} \right.

综上所述,对 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n) 的情形:
T(n)={O(nk),如果a<bk(k>logba)O(nlogba),如果a>bkO(nklogbn)=O(nlogbalogbn),如果a=bk T(n)= \left\{ \begin{array}{lr} O(n^k) , & \text{如果$a< b^k(k>log_b^a)$}\\ &\\ O(n^{log_b^a}), & \text{如果$a> b^k$}\\ &\\ O(n^klog_b^n)=O(n^{log_b^a}log_b^n), & \text{如果$a = b^k$} \end{array} \right.
主定理 Master Theorem

减治法主定理

主定理 Master Theorem