Master Theorem主定理——递归与分治算法复杂度分析

版权声明:嘤嘤嘤 https://blog.csdn.net/HNUCSEE_LJK/article/details/88066734

在递归与分治的算法复杂度分析时,通常可得到一个递推公式,形如:

T(n)=a\;T\!\left({\frac {n}{b}}\right)+f(n)\: \: \: \: (a\geq 1,\: b>1)

其中n为问题的规模,a为递归的子问题的数量,\frac{n}{b}为子问题的规模,f(n)为每次递归带来的额外计算的函数。要计算这个式子,有以下三种情形:

  1. f(n) = O(n^{c})c<log{_{b}}\: a,则T(n)=\Theta (n^{log{_{b}}\: a})
  2. f(n) = \Theta (n^{log{_{b}}\: a}}\, log^{k}\: n)k\geq 0,则T(n)=\Theta (n^{log{_{b}}\: a}\, log^{k+1}\: n)
  3. f(n) = \Omega (n^{c})c>log{_{b}}\: a,且对于任意k<1,有af\left({\frac {n}{b}}\right)\leq kf(n),则T\left(n\right)=\Theta \left(f(n)\right)

举个例子,现有T(n)=4\;T\!\left({\frac {n}{2}}\right)+O(n),根据情形1,有T(n)=\Theta (n^{2})

关于主定理的证明可以参考主定理证明,这里不做展开。另外,情形2对于任意k,又有三种情形,可以参考维基百科

猜你喜欢

转载自blog.csdn.net/HNUCSEE_LJK/article/details/88066734