1.引言

本文介绍了递归算法的时间复杂度计算方法,包括通过展开递归方程求解及使用公式法进行估计。并详细解释了公式法在不同条件下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法:有限步内解决一个问题的有效方法。

算法五大特征:(输入,输出,有穷性,确定性,有效性)。

 

 

 

递归算法时间复杂度(递归方程)计算方法:

 一个例子:

 1.1

 T(n) =  O(1)                n=1

             2T(n/2)+O(n)  n>1 

  求T(n)的表达式

 

   T(n)=2T(n/2)+O(n)

          =4T(n/4)+2O(n/2)+O(n)

          =4T(n/4)+2O(n)

          =8T(n/8)+3O(n)

         .....

          =2k T(n/2k) +kO(n)

 

   这里令n=2k ,k=logn那么T(n)=T(2k)=n * T(1)+logn * O(n)

                                                         =n*O(1)+O(nlogn)

                                                         =O(n)+O(nlogn)

                                                         =O(nlogn).

 

1.2 公式法

这个方法为估计形如:

  T(n) = aT(n/b) + f(n)

  其中,a≥1和b≥1,均为常数,f(n)是一个确定的正函数。在f(n)的三类情况下,我们有T(n)的渐近估计式:

    1.若对于某常数ε>0,有f(n) = O(nlogb a-ε ),则T(n) = O(nlogb a )
   
    2.若f(n) = O(nlogb a ),则T(n) = O(nlogb a *logn)
   
    3.若f(n) = O(nlogb a+ε ),且对于某常数c>1和所有充分大的正整数n,有af(n/b)≤cf(n),则T(n)=O(f(n))。
   
    设T(n) = 4T(n/2) + n,则a = 4,b = 2,f(n) = n,计算得出nlogb a = nlog2 4 = n2 ,而f(n) = n = O(n2-ε ),此时ε= 1,根据第1种情况,我们得到T(n) = O(n2 )。
   
    这里涉及的三类情况,都是拿f(n)与nlogb a 作比较,而递归方程解的渐近阶由这两个函数中的较大者决定。在第一类情况下,函数nlogb a 较大,则T(n)=O(nlogb a );在第三类情况下,函数f(n)较大,则T(n)=O(f (n));在第二类情况下,两个函数一样大,则T(n)=O(nlogb a *logn),即以n的对数作为因子乘上f(n)与T(n)的同阶。
   
    但上述三类情况并没有覆盖所有可能的f(n)。在第一类情况和第二类情况之间有一个间隙:f(n)小于但不是多项式地小于nlogb a ,第二类与第三类之间也存在这种情况,此时公式法不适用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值