























主定理适用于递归复杂度计算。
a,ba,b 是常数,f(n)f(n) 为额外附加值函数 T(n)T(n) 为递归式 T(n)=aT(nb)+f(n) (a>0,b>1)T(n)=aT(\frac{n}{b})+f(n)\ (a>0,b>1),就有:
例一:T(n)=4T(n2)+nT(n)=4T(\frac{n}{2})+n,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1,那么 logba=log24=2,f(n)=O(nlogba−ϵ)=O(n2−1)\log_ba=\log_24=2,f(n)=\mathcal{O}(n^{\log_ba-\epsilon})=\mathcal{O}(n^{2-1}),f(n)f(n) 成立,所以 T(n)=Θ(nlogba)=Θ(n2)T(n)=\Theta(n^{\log_ba})=\Theta(n^2)。
例二:T(n)=2T(n2)+nT(n)=2T(\frac{n}{2})+n,此时 a=2,b=2a=2,b=2,那么 logba=log22=1,f(n)=Θ(nlogba)=Θ(n)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba})=\Theta(n),f(n)f(n) 成立,所以 T(n)=Θ(nlogbalogn)=Θ(nlogn)T(n)=\Theta(n^{\log_ba}\log n)=\Theta(n\log n)。
例三:T(n)=4T(n2)+n3T(n)=4T(\frac{n}{2})+n^3,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1,那么 logba=log24=2,f(n)=Ω(nlogba+ϵ)=Ω(n2+1)\log_ba=\log_24=2,f(n)=\Omega(n^{\log_ba+\epsilon})=\Omega(n^{2+1}),对于 c=23c=\frac{2}{3} 和够大的 nn,(af(nb)=4(n2)3=4(n38)=n32)≤(cf(n)=2n33)\left(af(\frac{n}{b})=4(\frac{n}{2})^3=4(\frac{n^3}{8})=\frac{n^3}{2}\right)\leq \left(cf(n)=\frac{2n^3}{3}\right),f(n)f(n) 成立,所以 T(n)=Θ(f(n))=Θ(n3)T(n)=\Theta(f(n))=\Theta(n^3)。
例四:T(n)=2T(n2)+nlognT(n)=2T(\frac{n}{2})+n\log n,此时 a=2,b=2,k=1a=2,b=2,k=1,那么 logba=log22=1,f(n)=Θ(nlogbalogkn)=Θ(nlogn)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba}\log^kn)=\Theta(n\log n),f(n)f(n) 成立,所以 T(n)=Θ(nlogbalogk+1n)=Θ(nlog2n)T(n)=\Theta(n^{\log_ba}\log^{k+1}n)=\Theta(n\log^2 n)。
将一个规模为 nn 的问题,通过分治得到 aa 个规模为 nb\dfrac{n}{b} 的子问题,每次递归进行的计算为 O(nd)O(n^d),满足如下形式:
T(n)=a⋅T(nb)+O(nd)T(n)=a\cdot T(\dfrac{n}{b})+O(n^d)
则 T(n)T(n) 满足:
T(n)={O(nd)d>logbaO(ndlogn)d=logbaO(nlogba)d<logbaT(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(1)n=12T(n2)+notherwise.T(n)=\begin{cases} O(1) & n=1\\ 2T(\dfrac{n}{2})+n & \text{otherwise.} \end{cases}
则有 a=2,b=2,d=1a=2,b=2,d=1。
∵1=log22∴T(n)=O(n1logn)=O(nlogn)\begin{array}{ll} \because 1=\log_22\\ \therefore T(n)=O(n^1\log n)=O(n\log n) \end{array}
另一例子:
T(n)={O(1)n=12T(n2)+1otherwise.T(n)=\begin{cases} O(1) & n=1\\ 2T(\dfrac{n}{2})+1 & \text{otherwise.} \end{cases}
则有 a=2,b=2,d=0a=2,b=2,d=0。
∵0<log22∴T(n)=O(nlog22)=O(n)\begin{array}{ll} \because 0<\log_22\\ \therefore T(n)=O(n^{\log_2 2})=O(n) \end{array}
例三:
T(n)={O(1)n=12T(n2)+nlognotherwise.T(n)=\begin{cases} O(1) & n=1\\ 2T(\dfrac{n}{2})+n\log n & \text{otherwise.} \end{cases}
则有 a=2,b=2,d=1a=2,b=2,d=1。
∵1=log22∴T(n)=O(n1logn⋅logn)=O(nlog2n)\begin{array}{ll} \because 1=\log_22\\ \therefore T(n)=O(n^1\log n\cdot \log n)=O(n\log^2 n) \end{array}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。