递归算法时间复杂度的估计问题

在递归算法中,我们常常需要计算算法的时间复杂度。例如前一次讲到的合并排序,就是一个递归的过程。递归过程可以用下面的式子来描述:

当n=1时,算法的时间复杂度为O(1),当n>1时,算法可以拆分成多个相同的子过程。计算这样的递归算法的时间复杂度大体上有三种方法。1、代换法。代换法首先要猜测解的形式,然后要用数学归纳法来证明。2、递归树方法。将迭代的过程画成一个递归树,通过递归树来确定时间复杂度。3、主方法。主方法是一组公式,用来求三种条件下的递归式的时间复杂度。但是主方法并不能涵盖所有的情况,有的是主方法没法求的。

由于主方法的三种情况容易忘记,因此主要将主方法的三种情况记录如下。

主方法主要面对的是下面的一种情况:


其中f(n)为一个任意的表达式。那么,针对不同的a,b,主方法将有以下的集中策略:

1、对于某常数s>0,有,则

2、若,则

3、若对于某常数s>0,有,且对常数c<1有足够大的n,有,那么


但是要注意一点,即主方法并不适用于所有的情况。

例如当递归式为时条件不满足。不难验证,这时既不符合第二种情况也不符合第三种情况,可以说是位于第二种第三种之间。对于这样的问题,就只能用代入法和递归子树的方法来解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值