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