master 公式 分析递归算法的时间复杂度

递归算法每一层函数的时间复杂度的通项形式可以描述如下:

[T(n)=aT(frac{n}{b}) + O(n^d) ]

可以猜测,最后的时间复杂度和这a, b ,d几个参数有关。
整个递归规程的描述用下面一张图就能够概括:

最后的公式是一个累加函数

[Total work = sum^{log_b n}_0 O(n^d)(frac{a}{b^d})^i ]

一看结构,是一个等比数列,公比为(frac{a}{b^d})

接下来就好分析了,等比数列的求和公式为

[S = frac{a_1(1-q^n)}{1-q} ]

后面的分析其实就是针对公比是大于1,等于1,还是小于1做文章。
如果小于1,即

[frac{a}{b^d}< 1Rightarrow log_b a < d ]

看求和公式可知,

[n ightarrow infty , S = frac{a_1}{1-q} = const ]

常数项忽略,所以结果就是

[Total work = O(n^d) ]

其他两种情况分析类似,这里不再赘述。直接给出结果<font>
参考链接:https://zhuanlan.zhihu.com/p/100531135

原文地址:https://www.cnblogs.com/Jie-Bian/p/14345794.html