039.递归master公式

一、Master公式定义

Master公式用于分析所有子问题规模相同的递归算法的时间复杂度。其标准形式为:

\[T(n) = a \cdot T\left(\frac{n}{b}\right) + O(n^c) \]

其中:

  • a:递归调用的次数(子问题的个数)
  • b:每次递归问题规模缩小的比例
  • c:递归外操作的时间复杂度指数
  • a、b、c都是常数

二、Master公式的三种情况

情况1:\(\log_b a < c\)

  • 复杂度:\(O(n^c)\)
  • 解释:递归外的工作量占主导

情况2:\(\log_b a > c\)

  • 复杂度:\(O\left(n^{\log_b a}\right)\)
  • 解释:递归调用的工作量占主导

情况3:\(\log_b a = c\)

  • 复杂度:\(O(n^c \cdot \log n)\)
  • 解释:内外工作量平衡,需乘以\(\log n\)

三、常见算法示例

1. 归并排序

递归关系式:

\[T(n) = 2T\left(\frac{n}{2}\right) + O(n) \]

参数分析:

  • \(a = 2\)(分成两个子问题)
  • \(b = 2\)(每个子问题规模为\(n/2\)
  • \(c = 1\)(合并操作为\(O(n)\)

计算比较:

  • \(\log_b a = \log_2 2 = 1\)
  • \(c = 1\)
  • \(\log_b a = c\)情况3

时间复杂度:

\[O(n^c \cdot \log n) = O(n \log n) \]

2. 二分查找

递归关系式:

\[T(n) = T\left(\frac{n}{2}\right) + O(1) \]

参数分析:

  • \(a = 1\)
  • \(b = 2\)
  • \(c = 0\)

计算比较:

  • \(\log_b a = \log_2 1 = 0\)
  • \(c = 0\)
  • \(\log_b a = c\)情况3

时间复杂度:

\[O(n^c \cdot \log n) = O(\log n) \]

3. 快速排序(最好情况)

递归关系式:

\[T(n) = 2T\left(\frac{n}{2}\right) + O(n) \]

与归并排序相同,时间复杂度为:

\[O(n \log n) \]

四、特殊情况

对于形式为:

\[T(n) = 2T\left(\frac{n}{2}\right) + O(n \log n) \]

的时间复杂度为:

\[O\left(n (\log n)^2\right) \]

注意

仅适用于等规模划分:如果子问题规模不同,不能使用Master公式

posted @ 2026-01-09 10:07  射杀百头  阅读(6)  评论(0)    收藏  举报