主定理【master theorem】
本文部分参考《算法导论》。相关证明由于过于复杂,已略去。
前言
-
Θ\ThetaΘ 读作
theta,即等于。 -
OOO 读作
big-oh,即小于等于。 -
ooo 读作
small-oh,即小于。 -
Ω\OmegaΩ 读作
big omega,即大于等于。 -
ω\omegaω 读作
small omega,即大于。 -
T(n)T(n)T(n) 时间复杂度。
-
f(n)f(n)f(n) 关于 nnn 的函数。
-
若 f(x)f(x)f(x) 多项式大于 g(x)g(x)g(x),则存在实数 e>0e > 0e>0,使得 f(x)>g(x)×xef(x)>g (x) \times x^ef(x)>g(x)×xe。
-
若 f(x)f(x)f(x) 渐进大于 g(x)g(x)g(x),则存在实数 c>0c > 0c>0和 kkk,使得对于任意 n>=kn >= kn>=k 有 c×f(x)>=g(x)c\times f(x) >= g(x)c×f(x)>=g(x)。
-
对于 logn\log nlogn,不需要弄清其具体的底数。原因在于 limn→∞logxnlogyn=lnylnx(x≠y)\lim \limits_{n \to \infty}\frac{\log_x n}{\log_y n} = \frac{\ln y}{\ln x}(x \not = y)n→∞limlogynlogxn=lnxlny(x=y)。即 log\loglog 级别的渐进意义是一样的。
主定理
对于一个形如 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)T(n)=aT(bn)+f(n) 的式子(令 a≥1,b>1a \ge 1,b > 1a≥1,b>1 且为常数),有以下渐近界 :
{T(n)=Θ(nlogba) If ∃ε>0,f(n)=O(nlogba−ε)T(n)=Θ(nlogbalogn) If f(n)=Θ(nlogba)T(n)=Θ(f(n)) If ∃ε>0,f(n)=Ω(nlogba+ε) and If ∀n→∞,∃c<1, aT(nb)≤cf(n) \begin{cases} T(n) = \Theta (n^{\log_b a}) \text{ If }\exists \varepsilon > 0,f(n) = O(n^{\log_b a - \varepsilon})\\\\ T(n) = \Theta (n^{\log_b a}\log n) \text{ If }f(n) = \Theta(n^{\log_b a})\\\\ T(n) = \Theta (f(n)) \text{ If } \exists \varepsilon > 0,f(n) = \Omega(n^{\log_b a + \varepsilon}) \text{ and If } \forall n \to \infty,\exists c < 1, \ aT(\frac{n}{b}) \le cf(n)\\ \end{cases} ⎩⎨⎧T(n)=Θ(nlogba) If ∃ε>0,f(n)=O(nlogba−ε)T(n)=Θ(nlogbalogn) If f(n)=Θ(nlogba)T(n)=Θ(f(n)) If ∃ε>0,f(n)=Ω(nlogba+ε) and If ∀n→∞,∃c<1, aT(bn)≤cf(n)
简单的,我们可以描述成以下情况:
T(n)={O(nd),d>logbaO(ndlogn),d=logbaO(nlogba),d<logba T(n)= \begin{cases} O(n^d),d > \log_b a\\\\ O(n^d \log n),d = \log_b a\\\\ O(n^{\log_b a}),d < \log_b a\\ \end{cases} T(n)=⎩⎨⎧O(nd),d>logbaO(ndlogn),d=logbaO(nlogba),d<logba
例题
- T(n)=2T(n2)+nT(n) = 2T(\frac{n}{2}) + nT(n)=2T(2n)+n
∵b=2,a=2,f(n)=Θ(nlog22)=1∴T(n)=Θ(nlogn) \because b = 2,a = 2,f(n) = \Theta(n^{\log_2 2}) = 1\\ \therefore T(n) = \Theta(n \log n)\\ ∵b=2,a=2,f(n)=Θ(nlog22)=1∴T(n)=Θ(nlogn)
- T(n)=9T(n3)+nT(n) = 9T(\frac{n}{3}) + nT(n)=9T(3n)+n
∵b=3,a=9,f(n)=n∵Θ(nlogba)=Θ(n2),f(n)=O(nlog39−ε)=O(n2) If ε=1∴T(n)=Θ(n2) \because b = 3,a = 9,f(n) = n\\ \because \Theta (n^{\log_b a}) = \Theta (n^2),f(n) = O(n^{\log_3 9 - \varepsilon})= O(n^2) \textit{ If }\varepsilon = 1\\ \therefore T(n) = \Theta(n^2)\\ ∵b=3,a=9,f(n)=n∵Θ(nlogba)=Θ(n2),f(n)=O(nlog39−ε)=O(n2) If ε=1∴T(n)=Θ(n2)
- T(n)=3T(n4)+nlognT(n) = 3T(\frac{n}{4}) + n \log nT(n)=3T(4n)+nlogn
∵b=4,a=3,f(n)=nlogn∵Θ(nlogba)=O(n0.793),f(n)=Ω(nlogba)=Ω(nlog43+ε) If ε≈0.2∵n→∞,aT(nb)≤cf(n) If c=34∴T(n)=Θ(nlogn) \because b = 4,a = 3,f(n) = n \log n\\ \because \Theta (n^{\log_b a}) = O (n^{0.793}),f(n) = \Omega(n^{\log_b a}) = \Omega(n^{\log_4 3 + \varepsilon})\textit{ If }\varepsilon \thickapprox 0.2\\ \because n \to \infty,aT(\frac{n}{b}) \le cf(n) \textit{ If } c = \frac{3}{4}\\ \therefore T(n) = \Theta(n \log n)\\ ∵b=4,a=3,f(n)=nlogn∵Θ(nlogba)=O(n0.793),f(n)=Ω(nlogba)=Ω(nlog43+ε) If ε≈0.2∵n→∞,aT(bn)≤cf(n) If c=43∴T(n)=Θ(nlogn)
- T(n)=2T(n2)+nlognT(n) = 2T(\frac{n}{2}) + n \log nT(n)=2T(2n)+nlogn
可以求出 b=2,a=2,f(n)=nlogn,Θ(nlogba)=O(n)b = 2,a = 2,f(n) = n \log n,\Theta (n^{\log_b a}) = O (n)b=2,a=2,f(n)=nlogn,Θ(nlogba)=O(n)。看似是主定理的第三种情况,但是发现 f(n)nlogba=logn<nε(ε>0)\frac{f(n)}{n^{\log_b a}} = \log n < n^\varepsilon(\varepsilon > 0)nlogbaf(n)=logn<nε(ε>0),也就是 logn=o(nε)\log n = o(n^\varepsilon)logn=o(nε),即两者不同阶。
故只能采取递归树的方式解决,将叶子节点与非叶子节点分开计算最后答案是 Θ(2logn)+Θ(n∑i=1logn1)=Θ(n)+Θ(nlogn(1+logn)2)≈O(nlog2n)\Theta(2^{\log n}) + \Theta(n \sum_{i = 1}^{\log n} 1) = \Theta(n) + \Theta(n\frac{\log n(1 + \log n)}{2}) \thickapprox O(n \log^2 n)Θ(2logn)+Θ(n∑i=1logn1)=Θ(n)+Θ(n2logn(1+logn))≈O(nlog2n)。
总结
-
其中第一情况要求的小于是多项式意义下的小于,也就是 f(n)f(n)f(n) 渐近小于 nlogban^{\log_b a}nlogba,即相差一个因子 nεn^\varepsilonnε,其中 ε\varepsilonε 是一个大于 000 的常数。第三种情况同理,但多了一个“正则”的条件。
-
T(n)=Θ(nlogblogk+1n) If f(n)=Θ(nlogbalogkn),k≥1T(n) = \Theta (n^{\log_b}\log^{k + 1} n) \text{ If }f(n) = \Theta(n^{\log_b a} \log^k n),k \ge 1T(n)=Θ(nlogblogk+1n) If f(n)=Θ(nlogbalogkn),k≥1
-
主定理并不能覆盖所有的情况,但是可以通过递归树的方式求解。

被折叠的 条评论
为什么被折叠?



