递归方程求解方法综述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
递归方程求解方法综述
摘要:随着计算机科学的逐步发展,各种各样的算法相继出现,我们需要对算法进行分析,以选择性能更好的解决方案。算法分析中计算复杂度常用递归方程来表达,因此递归方程的求解有助于分析算法设计的好坏。阐述了常用的3种求解递归方程的方法:递推法、特征方程法和生成函数法。这3种方法基本上可以解决一般规模递归方程的求解问题。
关键词:递归;递推法;特征方程;生成函数
0引言
寻求好的解决方案是算法分析的主要目的,问题的解决方案可能不只一个,好的方案应该执行时间最短,同时占有存储空间最小,故算法分析一般考虑时间复杂性、空间复杂性两方面的参数。在算法分析时我们采用时间耗费函数来表示时间参数,用当问题规模充分大时的时间耗费函数的极限表示时间复杂度。
一般算法对应的时间耗费函数常用递归方程表示,找出递归方程的解,就可以表示其对应算法复杂度的渐进阶,从而比较算法的优劣。因此研究递归方程的解法意义重大。下文将分析并给出常用递归方程的3种解法。
1递归方程的解法
递归方程是对实际问题求解的一种数学抽象,递归的本质在于将原始问题逐步划分成具有相同解题规律的子问题来解决,原始问题与子问题仅在规模上有大小区别,并且子问题的规模比原始问题的
规模要小。对于规模为n的原始问题,我们通常会寻找规模n的问题与规模n-1或者规模n/2的问题之间存在的联系,从而进一步推导出具有递归特性的运算模型。
根据递归方程的一般形式,常用的解法有三种,分别是递推法、公式法及生成函数法。下面就分别来分析其求解过程。
1.1递推法
当递归方程形式简单且阶数较低时,一般可以采用递推法求解,根据一步一步递推找到方程的递推规律,得到方程的解。下面举例说明: t(1)=0
t(n)=2t(n/2)+n2(n≥2)
t(n)=2t(n/2)+n2=2(2t(n/22)+(n/2)2)+n2
=22t(n/2)2+2n2/22+n2
=22(2t(n/23)+(n/22)2)+2n2/22+n2
=23(2t(n/23)+22n2/(22)2)+2n2/(22)1+n2…
=2kt(n/2k)+∑k-1i=02in2(22)i递推到这里我们就可以发现递
归规律,找到递归出口, t(1)=0,令n=2k 则可以得到如下结果:t(n) =2kt(1) +∑k-1i=0n2(1/2)i)=
n2(1-(1/2)k1-1/2)=2n2-2n 上面得到方程的解,我们来分析其对应算法复杂性的渐进阶,根据渐进阶定理有:设有函数f(n),g(n)均是规模n的函数,则o(f(n))+o(g(n))=o(max(f(n), g(n)))。故有t(n)=o(n2)。
1.2公式法
对所需求解的递归方程进行观察,如果它是符合以下形式的常系数齐次线性方程,可用公式法求解。f(0)=b0;
f(1)=b1;……
f(k-1)=bk-1;
f(n)=a1f(n-1)+a2f(n-2)+…+akf(n-k) 在此,常系数是指a1 、a2、……ak是常数,线性指所有的f均为一次幂,齐次指无常数项。解这类方程,可由f(n)项得出:f (n)-a1f(n-1)-a2f(n-2)-…
-akf(n-k) =0;寻找形如f(n)= xn的解。
令xn-a1xn-1-a2xn-2-…-akxn-k=0;xn-k(xk-a1xk-1-…-ak) =0;即xk-a1xk-1-…-ak =0;
由此,我们得到了这类递归方程的特征方程,它有n个特征根,设为x1,x2,…,xk;其线性组合是f(n)的通解。即c1x1n+c2x2n+…+ckxkn=f(n);其中c1,c2,…,ck可由k个初始条件得到的线性方程组解出。
例如,常系数齐次线性方程组f(0)=0;
f(1)=1;
f(n)=4f(n-2);(n>1) 令f(n)=xn;则xn =4xn-2;
xn - 4xn-2=0 ;
x2-4=0;(特征方程)
x1=2;x2=-2;(特征根)
设有c1,c2使f (n) =c1x1n+c2x2n;
由初始条件 f(0)
=c1x10+c2x20=c1+c2=0;f(1)=c1x11+c2x21=2c1-2c2=1;即
c1+c2=0;
2c1-2c2=1解得c1=1/4;c2=-1/4;
∴f(n)=2n/4-(-2)n/4即为以上递归方程的解。
1.3生成函数法
第三种方法是利用生成函数的方法,即已知一个数列
a0,a1,a2,…,an,定义它的生成函数为一个形式幂级数:
f(x)=a0+a1x1+a2x2+…+anxn+…
我们寻找an的代数式。有了生成函数f(x),无需知道
a0,a1,a2,…,an 的各项就可以设法找出它的生成函数的解析式,再将其展开成一个幂级数,则xn项的系数即为要求得的an。
以汉诺(hanoi)塔问题的递归方程为例:t(1)=1;
t(n)=2t(n-1)+1;(n≥2) 该序列的生成函数为:
t(x)=t(1)x+t(2)x2+t(3)x3+…+t(n)xn+…(1)下面求t(n)的解析式。
由递归方程可得:t(2)-2t(1) =1;
t(3)-2t(2)=1;
t(4)-2t(3)=1;
……
t(n+1)-2t(n)=1将(1)式×2x得:2xt(x)=2t(1)x2+2t(2)x3+ 2t(3)x4+…+2t(n)xn+1+…(2)(1)式-(2)式得,t(x) -2xt(x)= t(1)x+x2+x3+…+xn+…(1-2x)t(x)= x+x2+x3+…+xn+…