主定理计算递归式的复杂度

符号 Notation

渐进符号 Asymptotic Notation

渐进符号 非渐进符号 含义
\(f(n) = O(g(n))\) \(f(n) \le cg(n)\) g是f的上界
\(f(n) = o(g(n))\) \(f(n) \lt cg(n)\) g是f的严格上界
\(f(n) = \Omega(g(n))\) \(f(n) \ge cg(n)\) g是f的下界
\(f(n) = \omega(g(n))\) \(f(n) \gt cg(n)\) g是f的严格下界
\(f(n) = \Theta(g(n))\) \(c_1g(n) \le f(n) \le c_2g(n)\) g是f的确界

问题规范化

\[T(n) = aT(n/b) + f(n) \]

规模为n的问题,可分为a个规模为n/b的子问题,每个子问题可通过f(n)的事件解决。

主定理

主定理通过递归树导出,主要思想是:

比较\(n^{\log_ba}\)\(f(n)\)的渐进大小关系,谁大谁决定复杂度\(T(n)。\)

第一种情况:\(n^{\log_ba} = \omega(f(n))\)\(T(n) = \Theta(n^{\log_b a})\)

例:\(T(n) = 9T(n/3) + n\)

\(n^{\log_ba} = n^{\log_39} = n^2 = \omega(n)\)

\(T(n) = \Theta(n^2)\)

第二种情况:\(n^{\log_b a} = o(f(n))\)\(T(n) = \Theta(f(n))\)

应用该公式,还要必须满足:

存在实数c,且\(c \lt 1\)时,有\(af(n/b) \le cf(n)\)

例:\(T(n) = 3T(n/4) + n\log_2n\)

\(n^{\log_ba} = n^{\log_43} \approx n^{0.792} = o(n\log_2n)\)

且由\(\frac 34n\log_2{\frac n4} \le cn\log_2n\),可得\(\frac 34 \lt c \lt 1\)

\(T(n) = \Theta(n\log_2n)\)

第三种情况:\(n^{\log_b a} = \Theta(f(n))\)\(T(n) = \Theta(n^{\log_ba}\log_2n)\)

例:\(T(n) = T(3n/4) + 1\)

\(n^{\log_ba} = n^{\log_{\frac 4 3} 1} = n^0 = \Theta(1)\)

\(T(n) = \Theta(\log_2n)\)

注意

主定理为未包含所有递归式情况,有以下情况不被包含:

  • 不满足第二种情况情况中的附加条件。
  • 非渐进关系可比,如

\[T(n) = 2T(n/2) + n\log_2n \]

\(n^{\log_ba} = n^{\log_22} = n \not = o(n\log_2n)\)

posted @ 2018-03-13 16:40  sequix  阅读(844)  评论(0编辑  收藏  举报