主定理
证明先不写
将一个规模为 nn 的问题,通过分治得到 aa 个规模为 n/bn/b 的子问题,每个递归带来的额外计算为 f(n)f(n) ,则有
T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n)其中 a,ba,b 为常数, n∈N∗,a≥1,b>1,n/b 解释为 ⌊nb⌋ 或 ⌈nb⌉
- 若 ∃ϵ>0 使得 f(n)=O(nlogba−ϵ),则 T(n)=Θ(nlogba)
- 若 ∃ϵ≥0 使得 f(n)=Θ(nlogbalogϵn),则 T(n)=Θ(nlogbalogϵ+1n)
- 若 ∃ϵ>0 使得 f(n)=Ω(nlogba+ϵ) ,且 ∃c<1,∀n≫1 使得 af(n/b)≤cf(n) ,则 T(n)=Θ(f(n))
其中 ϵ,c 均为常数。
常用结论
T(n)=2T(n2)+Θ(n)=Θ(nlogn)
T(n)=T(n2)+Θ(n)=Θ(n)
T(n)=T(n2)+Θ(1)=Θ(logn)
T(n)=2T(n2)+Θ(n√n)=Θ(n√n)
例题
例1:
T(n)=6T(n/3)+O(n32)解:
根据公式 a=6,b=3
logba=log36=1+ln2ln3≈1.63注:不要问我为什么可以手算出来,因为我背了自然对数表
并且
f(n)=O(n32)=O(nlog36−ϵ)故
T(n)=Θ(n1+log32)例2:
T(n)=4T(n/2)+Θ(n2)解:
根据公式 a=4,b=2
logba=2并且
f(n)=Θ(n2)=Θ(n2log0n)故
T(n)=Θ(n2logn)例3:
T(n)=T(n/2)+Θ(√n)解:
根据公式 a=1,b=2
logba=0并且
f(n)=Θ(√n)=Ω(n0+12)同时
∃c<1s.t.f(n/2)=√22f(n)≤cf(n)此时 √22<c<1 ,故
T(n)=Θ(√n)例4:
T(n)=4T(n/3)+Θ(n2)解:
根据公式 a=4,b=3
logba=2log32≈1.26并且
f(n)=Θ(n2)=Ω(n1.26+ϵ)同时
∃c<1s.t.4f(n/3)=49f(n)≤cf(n)此时 49<c<1
故
T(n)=Θ(n2)