主定理 (Master公式)

主定理 (Master公式)

定义与应用实例

Master公式,又称为Master定理或主定理,是分析递归算法时间复杂度的一种重要工具,尤其适用于具有具有分治的递归算法递归算法。

其实部分没有分治的递归也可以用, 极少数非递归代码也可以用

\[\operatorname{T}(n) = a*\operatorname{T}(n/b) + \operatorname{O}(n^d) \]

Master公式本身就是递归的形式,是递归方法时间复杂度的一种表示法。

解释

\(\operatorname{T}(n)\) 代表递归方法处理规模为 \(n\) 的数据量的时间复杂度。

\(\operatorname{T}(n/b)\) 代表调用子递归方法的总体时间复杂度,

\(\operatorname{O}(n^d)\) 代表调用子递归方法这行代码外其他代码(下面简称递归外代码)的时间复杂度。

\(a\): 每次递归调用子问题的数量。即在一个递归方法,需要调用几次子递归方法
\(b\): 子问题的规模缩小的比例。例如二分法递归搜索时,每次需要查找的数据都缩小了一半,那么 \(b=2\)
\(d\): 每次递归调用之外的代码时间复杂度的参数。例如二分法递归搜索时,每次递归时除了调用递归的方法,没有什么 for 循环代码,时间复杂度是 \(\operatorname{O}(1)\),即 \(n^d=1\),因此 \(d=0\)

使用主定理推到复杂度

主定理本身表示的复杂度难以分析,但是可以根据具体项的关系确定大致的复杂度

\(d<log_b^a\) 时,递归时间复杂度为:\(\operatorname{O}(nlog_b^a)\)

\(d=log_b^a\) 时,递归时间复杂度为:\(\operatorname{O}(n^d * log_2^n)\)

\(d>log_b^a\) 时,递归时间复杂度为:\(\operatorname{O}(n^d)\)

参考文献

带你彻底搞懂递归时间复杂度的Master公式

posted @ 2025-09-01 23:21  txp2025  阅读(17)  评论(0)    收藏  举报