主定理计算递归式的复杂度
符号 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)\)