3.4.3递归算法的效率分析
Posted kitor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.4.3递归算法的效率分析相关的知识,希望对你有一定的参考价值。
longFact(long n) { long temp; if(n==0)return1;//活动记录退栈 else temp=n*Fact(n-1);//活动记录进栈 return temp;//活动记录退栈 }
1.时间复杂度的分析2、空间复杂度的分析1.时间复杂度的分析在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析可以转化为一个递归方程求解。也就是数学上求渐进解得问题,而递归方唱的形式多种多样,其求解方法也不尽相同。迭代法是求解递归方程的一种常用方法,其基本步骤是迭代地展开递归方程的右端,使之成为一个非递归的和式,然后通过对和式的估计(即方程的解)来达到对左端的估计。 下面以阶乘为例求解时间复杂度。阶乘执行函数如下:long Fact(long n){ long temp; if(n==0) return 1;//活动记录退栈 else temp=n*Fact(n-1);//活动记录进栈 return temp;//活动记录退栈}
设Fact(n)的执行时间是T(n)。此递归函数中语句4的时间复杂度为O(1)【因为语句4的执行次数不会随着问题规模n的改变而改变】。递归调用Fact(n-1)的执行时间是T(n-1)【因为随着n的不同,函数中Fact(long n)会被执行n次】,所以语句5的执行时间是O(1)+T(n-1)【因为语句5中最后一次传进的参数是0,所以执行的是语句4。又前面共执行了n-1次调用,所以有执行时间是O(1)+T(n-1)】。加入设两数相乘和赋值的时间复杂度都是O(1),则对某常数C【非终止条件下的递归通式】、D【终止条件下的执行时间】有如下递归方程
设n>2,利用上式对T(n-1)展开,即在上式中用n-1代替n得到T(n-1)=C+T(n-2)再代入T(n)=C+T(n-1)中,有T(n)=2C+T(n-2)同理,n>3时有T(n)=3C+T(n-3)以此类推,当n>i时有T(n)=iC+T(n-i)最后,当i=n时有T(n)=nC+T(0)=nC+D求得递归方程的解为:T(n)=O(n)采用这种方法计算Fibonacci数列和Hanoi塔问题递归算法的时间复杂度为
2、空间复杂度的分析递归函数在执行时,系统会建立一个“递归工作栈”存储每一层递归所需的信息,此工作栈是递归函数执行的辅助空间,因此,分析递归算法的空间复杂度需要分析工作栈的大小。对于递归算法,空间复杂度S(n)=O(f(n))其中,f(n)为“递归工作栈”中工作记录的个数,与问题规模n的函数关系。根据这种分析方法不难得到,前面讨论的阶乘问题、Fibonacci数列问题、Hanoi塔问题的递归算法的空间复杂度为O(n)。
以上是关于3.4.3递归算法的效率分析的主要内容,如果未能解决你的问题,请参考以下文章