主定理与主方法的使用
主定理
令 $a \geqslant 1$ 和 $b > 1$ 是常数,
$f(n)$ 是一个函数, $T(n)$
是定义在非负整数上的递归式:
\[T(n) = aT(n/b) + f(n)\]
其中我们将 $n/b$ 解释为
$\left \lfloor n/b \right \rfloor$ 或
$\left \lceil n/b \right \rceil$. 那么 $T(n)$
有如下渐进界:
- 若对某个常数
$\varepsilon > 0$有$f(n) = O(n^{log_{b}a - \varepsilon})$, 则$T(n) = \Theta(n^{log_{b}a})$. - 若
$f(n) = \Theta(n^{log_{b}a})$, 则$T(n) = O(n^{log_{b}a}lgn)$. - 若对某个常数
$\varepsilon > 0$有$f(n) = \Omega(n^{log_{b}a + \varepsilon})$, 且对某个常数$c < 1$和所有足够大的$n$有$af(n/b) \leqslant cf(n)$, 则$T(n) = \Theta(f(n))$.
使用主方法
使用主方法很简单, 我们只需确定主定理的哪种情况成立, 即可得到解.
我们看下面的例子
\[T(n) = 9T(n/3) + n\]
对于这个递归式, 我们有 $a = 9$, $b = 3$,
$f(n) = n$, 因此
$n^{log_{b}a} = n^{log_{3}9} = \Theta(n^2)$. 由于
$f(n) = O(n^{log_{3}9 - \varepsilon})$, 其中
$\varepsilon = 1$, 因此可以应用主定理的情况 1, 从而得到解
$T(n) = \Theta(n^2)$.
参考
《算法导论》(中文版)
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!