主定理 Master Theorem

分治法主定理

在这里插入图片描述

主定理的证明

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

所以原递归式的渐进复杂度为 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) O(nlogba)+j=0logbn1ajf(n/bj)

简单起见,下面只考虑 f ( n ) = n k f(n) = n^k f(n)=nk 的情形:
∑ 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=0logbn1ajf(n/bj) = ∑ 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 ~~~~~~~ =j=0logbn1aj(n/bj)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 ~~~~~~~ =nkj=0logbn1(a/bk)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. =nk(1a/bk1(a/bk)logbn),nk(logbn1),如果a=bk如果a=bk = { 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. =O(nk),O(nlogba),O(nklogbn)=O(nlogbalogbn),如果a<bk(k>logba)如果a>bk如果a=bk

综上所述,对 T ( n ) = a T ( n b ) + f ( n ) T(n) = aT(\frac{n}{b}) + f(n) T(n)=aT(bn)+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. T(n)=O(nk),O(nlogba),O(nklogbn)=O(nlogbalogbn),如果a<bk(k>logba)如果a>bk如果a=bk
在这里插入图片描述

减治法主定理

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值