关于递归程序的时间复杂度

Posted chy-2003

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于递归程序的时间复杂度相关的知识,希望对你有一定的参考价值。

关于递归程序的时间复杂度


主定理

递归中,一个规模为n的问题分成a个规模为n/b的问题,额外计算复杂度为c*n^d,那么
技术分享图片
技术分享图片
技术分享图片

证明

我们画出递归树,则递归树共有logb(n)+1层。对于第j层,有a^j个子问题,每个子问题规模为n/b^j。
则第j层所用时间为
技术分享图片
接下来求所有层的和
技术分享图片
根据a与b^d的大小讨论,易得主定理中结论

tip

若不为平均分,则设最大的一部分为p*n(0 < p < 1),则树的深度为
技术分享图片
又由于
技术分享图片
所以深度依旧是log(n)级别


快排复杂度分析

由于快排分割随机,所以我们考虑平均复杂度。
技术分享图片
技术分享图片
所以有
技术分享图片
技术分享图片
两边同乘以n
技术分享图片
又有
技术分享图片
[1] - [2] 得
技术分享图片
两边同除n*(n+1)得
技术分享图片
累加求和,得
技术分享图片
//γ为欧拉常数
所以
技术分享图片































以上是关于关于递归程序的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

使用递归方程的程序的时间复杂度

递归的空间复杂度

算法计算时间复杂度:求递归式 f(n) = 2f(n/2) + n

递归算法的复杂性

二分查找算法的递归循环实现及其缺陷

二分查找算法的递归循环实现及其缺陷