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

来源:互联网 发布:首席数据家 编辑:程序博客网 时间:2024/05/21 21:49

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

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

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

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


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

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

2、若,则

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


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

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


0 0
原创粉丝点击