主定理 (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)\)

浙公网安备 33010602011771号