相关笔记: 4.4 递归树法 | 4.6 连续主定理的证明

概览

本节系统介绍了主定理(master theorem)——一种求解形如 的分治递归关系式的”食谱式”方法。内容涵盖主定理的三种情形及其判定条件、分水岭函数(watershed function) 的核心角色、情形 3 的正则性条件(regularity condition)、多个典型例题的详细求解过程,以及主定理不适用的情形与常见陷阱。

  • 主定理为形如 的递归关系式提供直接的渐近解,无需展开递归树
  • 分水岭函数 是比较驱动函数 的基准,决定适用哪种情形
  • 情形 1: 多项式地小于分水岭函数,解为 ,叶节点代价主导
  • 情形 2: 与分水岭函数同阶(至多多对数因子),解为 ,各层代价均匀
  • 情形 3: 多项式地大于分水岭函数且满足正则性条件,解为 ,根节点代价主导
  • 主定理不覆盖所有递归关系式,存在情形间的”间隙”以及正则性条件不满足的情况

知识结构总览

graph TB
    A["4.5 主定理"] --> B["主递归关系式"]
    A --> C["分水岭函数"]
    A --> D["情形 1"]
    A --> E["情形 2"]
    A --> F["情形 3"]
    A --> G["应用实例"]
    A --> H["局限性与陷阱"]

    B --> B1["T(n) = aT(n/b) + f(n)"]
    B --> B2["a > 0, b > 1"]
    B --> B3["驱动函数 f(n)"]
    B --> B4["隐式处理取整"]

    C --> C1["n^{log_b a}"]
    C --> C2["多项式分离要求"]

    D --> D1["f(n) = O(n^{log_b a - ε})"]
    D --> D2["T(n) = Θ(n^{log_b a})"]
    D --> D3["叶代价主导"]

    E --> E1["f(n) = Θ(n^{log_b a} lg^k n)"]
    E --> E2["k ≥ 0"]
    E --> E3["T(n) = Θ(n^{log_b a} lg^{k+1} n)"]

    F --> F1["f(n) = Ω(n^{log_b a + ε})"]
    F --> F2["正则性条件 af(n/b) ≤ cf(n)"]
    F --> F3["T(n) = Θ(f(n))"]
    F --> F4["根代价主导"]

    G --> G1["归并排序"]
    G --> G2["Strassen 矩阵乘法"]
    G --> G3["二分查找"]

    H --> H1["情形间间隙"]
    H --> H2["非多项式差异"]
    H --> H3["正则性条件失败"]

核心思想

核心思想

本节的核心思想是主方法(master method):对于形如 的分治递归关系式(称为主递归关系式),只需比较驱动函数 与分水岭函数 的渐近增长速度,即可直接写出渐近解。主定理将所有可能的情况归纳为三种情形,每种情形对应递归树中代价分布的一种典型模式。主方法的价值在于将复杂的递归求解过程简化为”判定情形 → 写出答案”的两步操作,是算法分析中最实用的工具之一。

1. 主递归关系式

主递归关系式(Master Recurrence)

主递归关系式具有如下形式:

其中:

  • 是子问题的数量(常数)
  • 是子问题规模缩小的因子(常数)
  • 驱动函数(driving function),涵盖分解和合并步骤的代价
  • 实际上隐含了取整操作:,其中

主递归关系式描述了一类将规模为 的问题分解为 个规模为 的子问题的分治算法的运行时间。例如,Strassen 矩阵乘法的递归关系式 就是一个主递归关系式,其中

取整的隐式处理

主方法的一个便利之处是可以忽略取整操作。例如,归并排序的精确递归关系式应为 ,但使用主方法时可以直接写为 。无论参数如何取整为最近的整数,主方法给出的渐近界都不会改变。

直觉理解:取整只对递归参数产生最多为 1 的扰动,而分治算法的递归深度为 ,这种微小扰动不会影响整体的渐近行为。

2. 分水岭函数

分水岭函数(Watershed Function)

函数 称为分水岭函数,它是判定主定理适用哪种情形的基准。 的值决定了递归树中叶节点代价与内部节点代价的相对大小关系。

直觉理解:分水岭函数 表示递归树中叶节点的总代价(忽略常数因子)。如果驱动函数 小于分水岭函数,说明叶节点代价占主导;如果两者相当,说明各层代价均匀;如果驱动函数大于分水岭函数,说明根节点代价占主导。

3. 主定理的三种情形

主定理(Theorem 4.1)

为常数, 为定义在所有足够大实数上的非负驱动函数。定义递归关系式 )为:

的渐近行为可由以下三种情形刻画:

情形 1: 若存在常数 使得 ,则

情形 2: 若存在常数 使得 ,则

情形 3: 若存在常数 使得 ,且 满足正则性条件 (对某个常数 和所有足够大的 ),则

三种情形的直觉理解:公司层级模型

想象一家公司,CEO(根节点)将工作分配给 个副总裁,每个副总裁管理 规模的团队,层层递归。 是每层管理者的管理开销。

  • 情形 1(叶主导): 管理开销 很小,基层员工(叶节点)的工作量占主导。公司越大,基层人数 增长越快,总工作量由基层决定。
  • 情形 2(均匀分布): 管理开销 与基层工作量相当,每一层的总管理成本大致相同。共有 层,总成本为
  • 情形 3(根主导): 管理开销 很大,CEO 的决策成本占主导。越往基层,管理开销按几何级数递减,总工作量由顶层决定。

4. 正则性条件

正则性条件(Regularity Condition)

正则性条件要求:,其中 为常数,对所有足够大的 成立。

该条件的含义是:驱动函数在缩小参数后,其值以一个小于 1 的常数因子衰减。这保证了递归树中各层的代价从根到叶至少按几何级数递减,从而使根节点的代价主导总代价。

正则性条件在大多数实际遇到的多项式有界函数中都能满足。但如果驱动函数在某些局部区域增长缓慢、但在整体上增长较快,则可能不满足该条件。

5. 应用主定理

例 1:

  • ,分水岭函数
  • ,取 即可
  • 适用情形 1,解为

例 2:

  • ,分水岭函数
  • ,取
  • 适用情形 2,解为

例 3:

  • ,分水岭函数
  • ,取
  • 验证正则性条件:,取
  • 适用情形 3,解为

例 4:

  • ,分水岭函数
  • ,取
  • 适用情形 2,解为

例 5:归并排序

  • ,分水岭函数
  • ,取
  • 适用情形 2,解为

例 6:Strassen 矩阵乘法

  • ,分水岭函数
  • ,取
  • 适用情形 1,解为

6. 主定理不适用的情形

主定理的局限性

主定理不覆盖所有递归关系式。以下几种情况主定理无法直接处理:

情形间的间隙:

  • 情形 1 和情形 2 之间的间隙:,但 不是多项式地更小(即不存在 使得
  • 情形 2 和情形 3 之间的间隙:,但 不是多项式地更大

正则性条件失败: 即使 ,如果正则性条件不满足,情形 3 也不适用

无法渐近比较: 分水岭函数与驱动函数无法进行有意义的渐近比较

典型的间隙案例:

  • ,分水岭函数
  • ,比分水岭函数增长慢
  • 只是对数地慢于 ,不是多项式地慢
  • 具体地:(对任意 ),因此 ,即
  • 不存在 使得 ,情形 1 不适用
  • 为非负整数),情形 2 也不适用
  • 主定理无法处理此递归关系式,需要使用代入法或 Akra-Bazzi 方法(解为

补充理解与拓展

主定理的历史与地位

主定理的思想最早可追溯到 20 世纪中叶对分治算法分析的研究。现代形式的主定理由 Bentley、Haken 和 Saxe 于 1980 年系统化建立。主定理之所以被称为”食谱式”方法,是因为使用者只需”记住三种情形,就能轻松求解许多递归关系式”。在 CLRS 第 4 版中,主定理被推广为包含 因子的情形 2(),比早期版本更加通用。主定理的严格证明需要处理取整等技术细节,4.6 连续主定理的证明给出了在实数域上的简化证明。

来源:J. L. Bentley, D. Haken, J. B. Saxe, “A general method for solving divide-and-conquer recurrences,” SIGACT News, 12(3):36-44, 1980; T. H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Section 4.5.

递归树视角下的三种情形

4.4 递归树法的视角理解主定理的三种情形:

  • 情形 1: 递归树中每层代价从根到叶至少按几何级数增长(增长因子为 ),叶节点代价主导
  • 情形 2: 递归树中每层代价大致相同(或按多项式增长), 层的总代价为
  • 情形 3: 递归树中每层代价从根到叶至少按几何级数递减(衰减因子为 ),根节点代价主导

主定理本质上是将递归树方法的直观分析形式化为一个可直接套用的判定规则。


易混淆点与辨析

"多项式分离"与"任意更小"的混淆

初学者常误以为只要 渐近小于分水岭函数就适用情形 1,或只要 渐近大于分水岭函数就适用情形 3。

  • ❌ “,所以适用情形 1”
  • ✅ “情形 1 要求 多项式地小于分水岭函数,即 但不是多项式地小于 ,因此情形 1 不适用”

关键区别: 小,但差距仅为对数级别,不是多项式级别。多项式分离要求差距至少为 因子()。

情形 2 中 值的确定

初学者常混淆情形 2 中 的取值。

  • ❌ “,取 ,解为
  • ✅ “,取 ,解为

的指数,不是 的系数。 对应 (因为 ), 对应

忽略正则性条件的验证

初学者在应用情形 3 时常忘记验证正则性条件。

  • ❌ “,所以直接得出
  • ✅ “情形 3 需要同时满足两个条件:(1) ;(2) 正则性条件 。两个条件缺一不可”

虽然正则性条件在大多数实际情况下都能满足,但存在反例(如 ),此时必须使用其他方法。


习题精选

题号核心考点难度
4.5-1主定理的基本应用⭐⭐
4.5-2矩阵乘法的递归分析⭐⭐⭐
4.5-3二分查找的递归关系式⭐⭐
4.5-4正则性条件的反例⭐⭐⭐⭐
4.5-5正则性条件不满足的构造⭐⭐⭐⭐

视频学习指南

资源链接对应内容备注
MIT 6.006 Lecture 4: Master Theoremhttps://www.youtube.com/watch?v=5s2bLH3Htcs主定理的三种情形与应用Erik Demaine 教授
Abdul Bari - Master Theoremhttps://www.youtube.com/watch?v=Oyn1v2xqFg0主定理的直观讲解与例题适合入门
河南大学《算法导论》中文字幕版https://www.bilibili.com/video/BV1H4411B7FY4.5 主定理中文授课

教材原文

教材原文摘录

“The master method provides a ‘cookbook’ method for solving algorithmic recurrences of the form , where and are constants. We call a driving function, and we call a recurrence of this general form a master recurrence. To use the master method, you need to memorize three cases, but then you’ll be able to solve many master recurrences quite easily.”

“In case 1, not only must the watershed function grow asymptotically faster than the driving function, it must grow polynomially faster. That is, the watershed function must be asymptotically larger than the driving function by at least a factor of for some constant .”

“Even when the relative growths of the driving and watershed functions can be compared, the master theorem does not cover all the possibilities. There is a gap between cases 1 and 2 when , yet the watershed function does not grow polynomially faster than the driving function.”


参见 Wiki

主定理