主定理用于求递推方程的阶。
设a>=1, b>1为常数,f(n)为函数,T(n)为非负整数,且
T(n) = aT(n/b) + f(n)
(注意a、b取值范围)
- a代表递归调用子问题的个数(子问题数>=小于原问题,故a>=1)
- n / b代表子问题规模(子问题规模一定是递减的,否则问题无法收敛,故b>1)
- f(n)代表把子问题的解组合成原问题的总工作量
有以下三种结果:
- 若f(n) = O(nlogba-ε),ε>0,则T(n) = Θ(nlogba)
- 若f(n) = Θ(nlogba),则T(n) = Θ(nlogba logn)
- 若f(n) = Ω(nlogba+ε),ε>0,且对于某个常数c<1和所有充分大的n有af(n/b) <= cf(n),则T(n) = Θ(f(n))
例1
T(n) = 9T(n/3) + n
a = 9, b = 3, logba = 2,符合1式,得T(n) = Θ(n2)
例2
T(n) = T(2n/3