算法基础期末考点总结五——递归方程求时间复杂度
作者:互联网
这里有三种方法可以从递归方程得到算法的时间复杂度:
代入法
递归树
主方法
代入法
先知道结果,然后想办法证明结果是对的,这就是代入法。
但是有两点需要注意:
1.证明的时候,要严格按照渐近符号的定义证明;
2.递归式左边后面的n项如果不是n的幂方项式,想办法把他替换成幂方形式会更简单
关于第一点,我们遇到待证明的项多出来一部分的时候,可以从假设里减,使得证明成立,如下:(这确实给了我很大的启发)
关于代入法,有一道这个知识点最难的题,只要你看懂了,就掌握了。
有取上整或者取下整的时候,需要放缩,常常会出现n-1,n+1,所以需要想办法变成n,并且时刻记住,最后的结果里有个系数c,可以让我控制,使得结果偏小(或偏大,取决于你证明的渐近记号是哪一个)。
递归树
递归树法大概能分成两种情况。
第一种:形如:
向下取整,树是对称的,这是这类的特点。
第二种:形如:
树不是对称的,这是这类型的特点。
在证明上界的时候,我们采用(在本例中)log3/2(n)的树高;证明下界的时候,我们采用log3(n)的树高。
主方法
这是一个公式性质的东西,它来自于一个定理——主定理。
要注意的有两点:
1.n^Σ比lgn高阶
2.主方法处理的递归式的形式为:
但不意味着长这样的它都能处理,它的情况1,2,3之间都有间隙,而情况三更是有不满足的情况。
1-2间隙:
2-3间隙:
不满足3正则条件的:
有了主方法,天下在我爪。
标签:期末考,递归,间隙,树高,复杂度,代入,证明,方法 来源: https://blog.csdn.net/weixin_43416013/article/details/112623614