主定理
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章推荐的分析方法。