求解递归时间复杂度

迭代法(递归树)

每一次对过程的重复称为一次迭代,而每一次迭代得到的结果会作为下一次迭代的初始值。重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。

例1

problem

T(n)=2×T(n4)+n,T(1)=1

solution

T(n)=2×T(n4)+n

T(n)=2×(2×T(n16)+n4)+n

T(n)=4×T(n16)+2×n2+n

T(n)=4×T(n16)+2n

T(n)=2k×T(n22k)+kn

22k=n,即 2k=nk=log2n=log2n12=12log2n

T(n)=n×T(1)+12log2nn

T(n)=n+12nlog2n

所以时间复杂度为 O(nlogn)

例2

problem

T(n)=4×T(n2)+n2log2n,T(1)=1

solution

T(n)=4×(4×T(n4)+(n2)2log2(n2))+n2log2n

T(n)=16×T(n4)+n2log2(n2)+n2log2n

T(n)=16×T(n4)+n2×(log2(n2)+log2n)

T(n)=16×T(n4)+n2×(log2n+log2nlog22)

T(n)=22k×T(n2k)+n2×(klog2n(1+4+...+log22k1))

T(n)=22k×T(n2k)+n2×(klog2ni=1k1i2)

T(n)=22k×T(n2k)+n2×(klog2n(k1)(k2)(2×(k1)1)6)

T(n)=22k×T(n2k)+n2×(klog2n2k39k2+13k66)

2k=n ,即 22k=n2k=logn

T(n)=n2×T(1)+n2log3nn2×2log3n9log2n+13logn66

所以时间复杂度为 O(n2log3n)

例3

problem

T(n)=3×T(n4)+nlogn

solution

T(n)=3×(3×T(n16)+n4log(n4))+nlogn

T(n)=9×T(n16)+3n4log(n4)+nlogn

T(n)=27×T(n64)+9n16log(n16)+3n4log(n4)+nlogn

T(n)=27×T(n64)+n×(logn×(916+34+1)(916log24+34log22))

T(n)=27×T(n64)+n×(logn×(916+34+1)(94log2+32log2))

T(n)=27×T(n64)+n×(logn×(916+34+1)(94+32))

T(n)=3k×T(n22k)+n×(logn×(4×((34)k1)))3×((32)k11))

22k=n,即 k=log4n

T(n)=3log4n+n×(logn×(4×(34)log4n+4)3×(32)log4n1+3)

T(n)=nlog43+nlogn×(4×(34)log4n+4)3n×(32)log4n1+3n

T(n)=nlog43+nlogn×(4×nlog434+4)2n×(32)log4n+3n

T(n)=nlog43+nlogn×(4×nlog434+4)2n×nlog432+3n

T(n)=nlog43+4nlogn4nlogn×nlog4342n×nlog432+3n

T(n)=nlog43+4nlogn4nlogn×nlog43log442n×nlog43log42+3n

T(n)=nlog43+4nlogn4nlog43logn2n×nlog43n+3n

T(n)=nlog43+4nlogn4nlog43logn2n×nlog43+3n

所以时间复杂度为 O(nlogn)

posted @   reclusive2007  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示