主定理速记
主定理速记
主定理用于分析分治复杂度。
\[T(n) = aT(\frac{n}{b}))+f(n)
\]
\(T(n)\) 表示时间复杂度
\(n\) 表示问题规模
\(a\) 表示划分后子问题个数
\(\frac{n}{b}\) 表示子问题规模,上下取整不影响复杂度分析
\(f(n)\) 表示分治过程中“分”和“合并”这两步的时间开销
\(f(n)\) 的举例:
比如归并排序,合并需要扫整个数组,所以 \(f(n)=O(n)\)
而二分,合并仅需要对两个元素比较,所以 \(f(n) = O(1)\)
基于上式,引入 基准函数 \(\Theta(n^{log_{b}a})\) 。比较和 \(f(n)\) 的大小。有下面三种情况。
-
若存在实数 \(\varepsilon >0\) ,使得 \(f(n) = O(n^{log_{b}a - \varepsilon})\)。则 \(T(n) =O(n^{log_{b}a})\)。
-
若 \(f(n) = O(n^{log_{b}a})\) ,则 \(T(n) = O(log_{b}{a}~ log{n})\)。
-
若存在实数 \(\varepsilon >0\) ,使得 \(f(n) = O(n^{log_{b}a + \varepsilon})\),且 \(af(\frac{n}{b}) \le cf(n),c<1\) 。则 \(T(n) = O(f(n))\)。
这三种情况实际上就是和基准函数在渐进意义上的比大小。
case3需要额外判断 \(af(\frac{n}{b}) \le cf(n),c< 1\)。
具体算例和详细表述参考(112条消息) 主定理_Debroon的博客-CSDN博客_主定理