主定理 Master Theorem

分治法主定理

在这里插入图片描述

主定理的证明

假设有递归式:
T ( n ) = a T ( n b ) + f ( n ) T(n) = aT(\frac{n}{b}) + f(n)
证明:
T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) = a [ a T ( n / b 2 ) + f ( n / b ) ] + f ( n ) = a\big[aT(n/b^2)+f(n/b)\big] + f(n) = a 2 T ( n / b 2 ) + f ( n ) + a f ( n / b )   = a^2T(n/b^2) + f(n) + af(n/b) ~\, = a k T ( n / b k ) + j = 0 k 1 a j f ( n / b j )      = a^{k}T(n/b^k) + \sum_{j=0}^{k-1} a^j f(n/b^j) ~~~~ =   ( n b )              = \cdots ~(不妨设n是b的幂)~~~~~~~~~~~~ = a l o g b n T ( 1 ) + j = 0 l o g b n 1 a j f ( n / b j )    = a^{log_b^n}T(1) + \sum_{j=0}^{log_b^n-1} a^j f(n/b^j) ~~
由对数的换底公式: a l o g b n = b l o g b ( a l o g b n ) = b l o g b a l o g b n = b l o g b n l o g b a = b l o g b ( n l o g b a ) = n l o g b a a^{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 ( n l o g b a ) + j = 0 l o g b n 1 a j f ( n / b j ) O(n^{log_b^a}) + \sum_{j=0}^{log_b^n-1} a^j f(n/b^j)

简单起见,下面只考虑 f ( n ) = n k f(n) = n^k 的情形:
j = 0 l o g b n 1 a j f ( n / b j ) \sum_{j=0}^{log_b^n-1} a^j f(n/b^j) = j = 0 l o g b n 1 a j ( n / b j ) k         = \sum_{j=0}^{log_b^n-1} a^j (n/b^j)^k ~~~~~~~ = n k j = 0 l o g b n 1 ( a / b k ) j         = n^k\sum_{j=0}^{log_b^n-1} (a/b^k)^j ~~~~~~~ = { n k ( 1 ( a / b k ) l o g b n 1 a / b k ) , 如果 a b k n k ( l o g b n 1 ) , 如果 a = b k = \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 ( n k ) , 如果 a < b k ( k > l o g b a ) O ( n l o g b a ) , 如果 a > b k O ( n k l o g b n ) = O ( n l o g b a l o g b n ) , 如果 a = b k = \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 ) = a T ( n b ) + f ( n ) T(n) = aT(\frac{n}{b}) + f(n) 的情形:
T ( n ) = { O ( n k ) , 如果 a < b k ( k > l o g b a ) O ( n l o g b a ) , 如果 a > b k O ( n k l o g b n ) = O ( n l o g b a l o g b n ) , 如果 a = b k 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.
在这里插入图片描述

减治法主定理

在这里插入图片描述

发布了274 篇原创文章 · 获赞 446 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/itnerd/article/details/103854805