求解递归式时间复杂度

梦想的初衷 提交于 2020-03-07 00:06:43

方法一:代换法(代入法)

这种方法分为两个步骤:
1、猜答案,我们只需要猜一下大致的形式
比如 T(n)= 4T(n/2) +n
通过观察该递归式,注意到当n加倍时,输出增加4倍,于是猜测该递归式时间复杂度为O(n2),即T(n) = O(n2) 。
2、数学归纳法证明
我们用带常数系数的展开
T(k) ≤ c1k2-c2k(k<n)
T(n) ≤4[c1(n/2)2-c2(n/2)]+n=c1n2+(1-2c2)n = c1n2-c2n-(c2-1)n≤c1n^2-c2n
这里我们就得到了时间复杂度O(n2)

那么我们为什么不用ck2呢,看上式看不出来的话,可以推导一下,化简为 cn2+n,这个式子我们得不到T(n) ≤cn2,所以通过降阶来实现(算时间复杂度我们只考虑高阶,不用管低阶)

方法二:递归树法(迭代法)

这个应该式比较好理解的了吧,就是一项一项展开,项数以等比数列方式增长(dk-1,每次可以递归d次,k为递归的层数),这里的话就可以理解成 满d叉树
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!