📜  主定理中的正则条件。(1)

📅  最后修改于: 2023-12-03 14:48:58.491000             🧑  作者: Mango

主定理中的正则条件

主定理是算法复杂度的一种计算方法,根据算法的递推式(或递归式)来确定算法的复杂度。主定理的形式化定义如下:

$$ T(n) = aT(n/b) + f(n) $$

其中,$a$ 是问题规模缩小比例,$b$ 是子问题规模与原问题规模的比例,$f(n)$ 是问题本身所需的时间复杂度。主定理适用于可以划分为子问题的递归算法,其时间复杂度可以表示为递归式。

主定理给出了递归式的时间复杂度的渐进界(O表示上界),前提是满足正则条件。正则条件是指:

$$ af(n/b) \leq cf(n),\ c < 1 $$

也就是说,子问题的规模虽然不断缩小,但是求解子问题所需的时间必须具有一定的结构,能够保证子问题所需的时间在运行时间中占比越来越小。

主定理中的三种情况分别为:

  • 第一种情况:$f(n) = \Theta(n^{\log_b{a}})$。此时,$T(n) = \Theta(n^{\log_b{a}}\log{n})$。
  • 第二种情况:$f(n) = \Theta(n^{\log_b{a}}\log{n})$。此时,$T(n) = \Theta(n^{\log_b{a}}\log^2{n})$。
  • 第三种情况:$f(n) = \Theta(n^{k})$,其中 $k > \log_b{a}$。此时,$T(n) = \Theta(f(n))$。

在使用主定理计算递归式的时间复杂度时,一定要保证满足正则条件。否则,主定理所得到的结果是不准确的。因此,程序员在使用主定理时应该注意正则条件的判断,以确保所求得的时间复杂度是正确的。

参考资料