主定理

渐进记号

\(O\)渐进上界,\(\Theta\)渐进紧确界,\(\Omega\)渐进下界,\(o\)非渐进紧确上界,\(\omega\)非渐进紧确下界
例如\(2n^2 = O(n^2)\)是渐进紧确的,但\(2n = O(n^2)\)不是渐进紧确的,我们使用\(2n = o(n^2)\)

公式

\(\lg(n!) = \Theta(nlgn)\)
\(a^{\log_b{n}} = n ^ {\log_b{a}}\)

主定理

假设有递归式
\(T(n) = aT(\frac{n}{b}) + f(n), a \geq 1, b \gt 1\)

情况一

\(f(n) = O(n^{\log_b{a} - \epsilon}), \epsilon > 0\)
\(T(n) = \Theta(n^{\log_b{a}})\)
\(T(n) = 9T(\frac{n}{3}) + n\), \(T(n) = \Theta(n^2)\)

情况二

\(f(n) = \Theta(n^{\log_b{a}})\)
\(T(n) = \Theta(n^{\log_b{a}} \log_2{n})\)
\(T(n) = T(\frac{2n}{3}) + 1\), \(T(n) = \Theta(\log_2{n})\)

情况三

\(f(n) = \Omega(n^{\log_b{a} + \epsilon}), \epsilon > 0\)且对于某个常数\(c<1\)和足够大的\(n\)\(af(\frac{n}{b}) \leq cf(n)\)
\(T(n) = \Theta(f(n))\)
\(T(n) = 3T(\frac{n}{4}) + n\log_2{n}\), \(T(n) = \Theta(n\log_2{n})\)

例子

对于\(T(n) = 2T(\frac{n}{2}) + n\log_2{n}\),不能应用情况三,因为\(\frac{f(n)}{n} = \log_2{n}\)都渐进小于\(n^\epsilon\)

证明主定理

画递归树

现在只需要计算
\[ g(n) = \sum_{j=0}^{\log_b{n} - 1} a^j f(\frac{n}{b^j}) \]
带入即可证明

练习

\(f(n) = \Theta(n^{\log_b{a}}\lg^k n), k \ge 0\)
\(T(n) = \Theta(n^{\log_b{a}}\lg^{k+1} n)\), 简单起见假定\(n\)\(b\)的幂

猜你喜欢

转载自www.cnblogs.com/qbits/p/10939541.html