主定理

Abstract

主定理(Master Theorem)提供了形如 的分治递推关系复杂度的直接判定方法,根据 的大小关系分为三种情况:(合并开销主导),(平衡情况),(递归开销主导)。主定理是分析分治算法复杂度的核心工具。

定义

主定理(Master Theorem / Theorem 2)

是递增函数,满足递推关系

其中 为正整数), 是大于 的整数,。则

应用条件

  • 必须是递增函数
  • 必须能写成 的形式(
  • 的幂(当 不是 的幂时,结论仍然成立,但需额外论证)

Theorem 1( 的特殊情况)

主定理在 (即 )时的特例。设 是递增函数,满足

其中 的倍数, 为正常数。则

时,精确解为 。当 时,精确解为 ,其中

核心性质

编号情况条件复杂度直觉经典案例
1合并开销主导每层工作量递减,根节点主导
2平衡情况每层工作量相同,共 归并排序
3递归开销主导每层工作量递增,叶子节点主导
编号判定步骤说明
1识别参数从递推关系中确定 (子问题个数)、(缩小因子)、(使
2计算 次幂与 比较
3判断情况 分别对应三种情况
4得出结论套用对应情况的复杂度公式

关系网络

graph LR
    A["主定理 Master Theorem"] -->|"应用于"| B["[[离散数学/concepts/分治算法]]"]
    A -->|"度量"| C["[[离散数学/concepts/算法复杂度]]"]
    A -->|"使用"| D["[[离散数学/concepts/大O记号]]"]
    A -->|"求解"| E["[[离散数学/concepts/递推关系]]"]

    A -->|"情况1"| F["O(n^d)<br/>合并开销主导"]
    A -->|"情况2"| G["O(n^d log n)<br/>平衡情况"]
    A -->|"情况3"| H["O(n^log_b a)<br/>递归开销主导"]

    A -->|"特殊情况"| I["Theorem 1<br/>g(n) = c"]

    B -->|"产生"| J["分治递推关系<br/>f(n) = af(n/b) + g(n)"]
    J -->|"代入主定理"| A

    style A fill:#5cb85c,color:#fff
    style F fill:#d9534f,color:#fff
    style G fill:#f0ad4e,color:#fff
    style H fill:#5bc0de,color:#fff

章节扩展

第08章 高级计数技术 — 8.3 分治算法与递推关系

主定理是 8.3 节的核心定理(Theorem 2),与分治递推关系紧密关联:

  • 递推展开法:主定理的证明基础。将 展开为
  • Theorem 1(即 )时的特例,可通过等比数列求和精确求解
  • 证明思路概述
    • 情况1):每层递归总合并开销为 ,由于 ,是递减等比数列,总开销以首项 为上界
    • 情况2):每层递归总合并开销为常数 ,共 层,总开销
    • 情况3):底层叶子节点有 个,底层总开销主导

经典判定案例

递推关系参数判断结果

补充

主定理使用注意事项

  • 判断的关键是比较 的大小关系,而非 的大小关系
  • 时,复杂度多了一个 因子,这是最容易出错的地方
  • 主定理要求 的形式,对于 等非标准形式,需使用递归树法或其他方法
  • Theorem 1 是主定理在 时的特殊情况,两者结论完全一致

递归树视角的直觉理解

将分治递推展开为一棵递归树,可以直观理解主定理的三种情况:

  • 情况1):每层工作量按 递减,总工作量以根节点的工作量 为上界——合并开销主导
  • 情况2):每层工作量相同,都是 ,共 层——总工作量
  • 情况3):工作量随层数递增,总工作量以叶子节点的工作量 为上界——递归开销主导

这种递归树分析法是理解主定理的最佳方式,也是《算法导论》(CLRS)第4章推荐的分析方法。

参见

  • 分治算法 — 主定理的主要应用场景,分治算法的复杂度分析
  • 算法复杂度 — 主定理输出的复杂度度量结果
  • 大O记号 — 主定理结论中使用的渐近记号
  • 递推关系 — 主定理所求解的递推关系类型