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}< 1\Rightarrow \log_b a < d \]

看求和公式可知,

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

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

\[Total work = O(n^d) \]

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

posted @ 2021-01-29 16:42  对影成一双  阅读(132)  评论(0编辑  收藏  举报