递归方程解法
- 格式:doc
- 大小:86.00 KB
- 文档页数:2
递归方程求解方法综述递归方程是数学中常见的一种表示方式,它描述了一个数列或函数之间的递推关系。
递归方程求解方法是指寻找递归方程的解析解或近似解的过程。
在许多应用领域,递归方程都是非常重要的,例如在计算机科学、自然科学及经济学等各个领域。
本文将从递归方程的求解方法综述入手,介绍常见的求解方法,包括代入法、特征根法、母函数法等,并举例说明其应用。
一、代入法代入法是求解递归方程的常见方法之一、它的基本思想是通过猜测法求得递归方程的解的形式,然后通过代入递归方程验证该猜测解是否成立。
如果成立,我们就可以得到递归方程的解析解;如果不成立,我们需要修改猜测解的形式,重复上述过程直到找到正确的解。
例如,考虑递推关系式$f(n) = 2f(n-1) + 3$,其中$f(0)=1$。
我们首先猜测$f(n) = a\cdot 2^n + b$,代入递推关系式可得:$a\cdot 2^n + b = 2(a\cdot 2^{n-1} + b) + 3$。
整理得$a\cdot 2^n + b = 2a\cdot 2^{n-1} + 2b + 3$。
化简可得$a\cdot 2^{n-1} = 2b + 3$。
由此可知,$b = \frac{a\cdot 2^{n-1} - 3}{2}$。
将$b$的值代入原方程得到$a\cdot 2^n + \frac{a\cdot 2^{n-1} - 3}{2} = 2(a\cdot2^{n-1} + \frac{a\cdot 2^{n-1} - 3}{2}) + 3$。
进一步化简可得$a = 6$。
因此,递归方程的解析解为$f(n) =6\cdot 2^n + \frac{3}{2}(2^n - 1)$。
二、特征根法特征根法是求解线性递归方程的常用方法。
这种方法基于线性递归方程的特征方程和特征根的性质,通过求解特征方程的根来得到递归方程的解析解。
考虑递归关系式$f(n) = af(n-1) + b$,其中$f(0)=c$。
递归方程组解的渐进阶的求法——迭代法用这个方法估计递归方程解的渐近阶不要求推测解的渐近表达式,但要求较多的代数运算。
方法的思想是迭代地展开递归方程的右端,使之成为一个非递归的和式,然后通过对和式的估计来达到对方程左端即方程的解的估计。
作为一个例子,考虑递归方程:接连迭代二次可将右端项展开为:由于对地板函数有恒等式:(6.10)式可化简为:这仍然是一个递归方程,右端项还应该继续展开。
容易看出,迭代i次后,将有(6.11)而且当时,(6.11)不再是递归方程。
这时:(6.13)又因为[a]≤a,由(6.13)可得:而由(6.12),知i≤log4n,从而,代人(6.14)得:即方程(6.9)的解T(n)=O(n)。
从这个例子可见迭代法导致繁杂的代数运算。
但认真观察一下,要点在于确定达到初始条件的迭代次数和抓住每次迭代产生出来的"自由项"(与T无关的项)遵循的规律。
顺便指出,迭代法的前几步迭代的结果常常能启发我们给出递归方程解的渐近阶的正确推测。
这时若换用代入法,将可免去上述繁杂的代数运算。
图6-1 与方程(6.15)相应的递归树为了使迭代法的步骤直观简明、图表化,我们引入递归树。
靠着递归树,人们可以很快地得到递归方程解的渐近阶。
它对描述分治算法的递归方程特别有效。
我们以递归方程T(n)=2T(n/2)+n2 (6.15)为例加以说明。
图6-1展示出(6.15)在迭代过程中递归树的演变。
为了方便,我们假设n恰好是2的幂。
在这里,递归树是一棵二叉树,因为(6.15)右端的递归项2T(n/2)可看成T(n/2)+T(n/2)。
图6-1(a)表示T(n)集中在递归树的根处,(b)表示T(n)已按(6.15)展开。
也就是将组成它的自由项n2留在原处,而将2个递归项T(n/2)分别摊给它的2个儿子结点。
(c)表示迭代被执行一次。
图6-1(d)展示出迭代的最终结果。
图6-1中的每一棵递归树的所有结点的值之和都等于T(n)。
求解递归式的方法递归式是计算机科学中常见的数学表示方法,用于描述一个函数或算法在运行过程中自我调用的特性。
在求解递归式时,我们希望找到一个封闭的表达式,从而得到问题的解析解。
本文将介绍几种常见的求解递归式的方法。
一、递归展开法递归展开法是求解递归式的一种常用方法。
它的基本思想是将递归式进行展开,直到得到一个不再含有递归项的等式。
通过这种方式,我们可以得到递归式的解析解。
例如,考虑递归式T(n) = T(n-1) + n,其中T(1) = 1。
我们可以使用递归展开法来求解这个递归式。
将递归式展开一次,得到T(n) = T(n-2) + (n-1) + n。
接着,再次展开,得到T(n) = T(n-3) + (n-2) + (n-1) + n。
继续展开,我们可以得到T(n) = T(n-k) + (n-k+1) + (n-k+2) + ... + (n-1) + n。
当展开到T(n) = T(1) + 2 + 3 + ... + (n-1) + n时,我们可以发现这个式子等于等差数列的和,即T(n) = 1 + 2 + 3 + ... + (n-1) + n。
利用等差数列求和公式,我们可以得到T(n) = (n+1)*n/2。
因此,递归式T(n) = T(n-1) + n的解析解为T(n) = (n+1)*n/2。
二、主定理主定理是求解递归式的另一种常用方法。
它适用于一类常见的递归式,即形如T(n) = aT(n/b) + f(n)的递归式。
其中,a是递归式中递归调用的次数,b是递归式中问题规模的缩小比例,f(n)是递归式中除了递归调用外的其他操作。
主定理的基本思想是通过比较递归式中不同部分的增长速度,判断递归式的解析解的形式。
主定理的具体表述如下:设递归式T(n) = aT(n/b) + f(n),其中a≥1,b>1,f(n)是一个非负函数。
1. 如果存在一个常数ε>0,使得f(n) = O(n^log_b(a-ε)),则T(n) = Θ(n^log_b(a))。
爬楼梯问题的解题技巧爬楼梯问题是在计算机科学和数学领域经常遇到的一个经典问题。
题目描述如下:假设你正在爬楼梯,楼梯有n级台阶。
每次你可以爬1级台阶或者2级台阶。
请问,你有多少种不同的方法可以爬到楼梯顶部?这个问题可以用递归和动态规划两种方法来解决。
下面我将分别介绍这两种解题技巧。
1. 递归解法:递归解法是最直观的解法,通过将问题分解成更小的子问题来解决。
假设爬到第n级台阶有f(n)种方法,那么可以得到以下递推关系:f(n) = f(n-1) + f(n-2)。
也就是说,爬到第n级台阶的方法数等于爬到第n-1级台阶的方法数加上爬到第n-2级台阶的方法数。
递归解法的代码如下:```pythondef climbStairs(n):if n == 1:return 1if n == 2:return 2return climbStairs(n-1) + climbStairs(n-2)```递归解法的时间复杂度为O(2^n),因为在每一级台阶上都有两种选择,所以递归树的节点数为指数级别。
虽然递归解法的代码简洁,但是对于大规模的问题,会导致指数级别的计算量,效率较低。
2. 动态规划解法:动态规划是一种将复杂问题分解成简单子问题的解决方法,通过保存子问题的解来避免重复计算,从而提高效率。
对于爬楼梯问题,可以使用动态规划来解决。
我们可以定义一个长度为n+1的数组dp,其中dp[i]表示爬到第i级台阶的方法数。
根据递推关系f(n) = f(n-1) + f(n-2),可以得到动态规划的状态转移方程:dp[i] = dp[i-1] + dp[i-2]。
初始条件为dp[1] = 1,dp[2] = 2。
动态规划解法的代码如下:```pythondef climbStairs(n):dp = [0] * (n+1)dp[1] = 1dp[2] = 2for i in range(3, n+1):dp[i] = dp[i-1] + dp[i-2]return dp[n]```动态规划解法的时间复杂度为O(n),因为只需计算n个状态,每个状态的计算只需要常数时间。
递归方程解的渐近阶的求法递归算法在最坏情况下的时间复杂性渐近阶的分析,都转化为求相应的一个递归方程的解的渐近阶。
因此,求递归方程的解的渐近阶是对递归算法进行分析的关键步骤。
递归方程的形式多种多样,求其解的渐近阶的方法也多种多样。
这里只介绍比较实用的五种方法。
1.代入法这个方法的基本步骤是先推测递归方程的显式解,然后用数学归纳法证明这一推测的正确性。
那么,显式解的渐近阶即为所求。
2.迭代法这个方法的基本步骤是通过反复迭代,将递归方程的右端变换成一个级数,然后求级数的和,再估计和的渐近阶;或者,不求级数的和而直接估计级数的渐近阶,从而达到对递归方程解的渐近阶的估计。
3.套用公式法这个方法针对形如:T (n)=aT (n / b)+f (n) 的递归方程,给出三种情况下方程解的渐近阶的三个相应估计公式供套用。
4.差分方程法有些递归方程可以看成一个差分方程,因而可以用解差分方程(初值问题)的方法来解递归方程。
然后对得到的解作渐近阶的估计。
5.母函数法这是一个有广泛适用性的方法。
它不仅可以用来求解线性常系数高阶齐次和非齐次的递归方程,而且可以用来求解线性变系数高阶齐次和非齐次的递归方程,甚至可以用来求解非线性递归方程。
方法的基本思想是设定递归方程解的母函数,努力建立一个关于母函数的可解方程,将其解出,然后返回递归方程的解。
本章将逐一地介绍上述五种方法,并分别举例加以说明。
本来,递归方程都带有初始条件,为了简明起见,我们在下面的讨论中略去这些初始条件。
递归方程组解的渐进阶的求法——代入法用这个办法既可估计上界也可估计下界。
如前面所指出,方法的关键步骤在于预先对解答作出推测,然后用数学归纳法证明推测的正确性。
例如,我们要估计T(n)的上界,T(n)满足递归方程:其中是地板(floors)函数的记号,表示不大于n的最大整数。
我们推测T(n)=O(n log n),即推测存在正的常数C和自然数n0,使得当n≥n0时有:T(n)≤Cn log n事实上,取n0=22=4,并取那么,当n0≤n≤2n0时,成立。
递归方程求解方法综述摘要:随着计算机科学的逐步发展,各种各样的算法相继出现,我们需要对算法进行分析,以选择性能更好的解决方案。
算法分析中计算复杂度常用递归方程来表达,因此递归方程的求解有助于分析算法设计的好坏。
阐述了常用的3种求解递归方程的方法:递推法、特征方程法和生成函数法。
这3种方法基本上可以解决一般规模递归方程的求解问题。
关键词:递归;递推法;特征方程;生成函数0引言寻求好的解决方案是算法分析的主要目的,问题的解决方案可能不只一个,好的方案应该执行时间最短,同时占有存储空间最小,故算法分析一般考虑时间复杂性、空间复杂性两方面的参数。
在算法分析时我们采用时间耗费函数来表示时间参数,用当问题规模充分大时的时间耗费函数的极限表示时间复杂度。
一般算法对应的时间耗费函数常用递归方程表示,找出递归方程的解,就可以表示其对应算法复杂度的渐进阶,从而比较算法的优劣。
因此研究递归方程的解法意义重大。
下文将分析并给出常用递归方程的3种解法。
1递归方程的解法递归方程是对实际问题求解的一种数学抽象,递归的本质在于将原始问题逐步划分成具有相同解题规律的子问题来解决,原始问题与子问题仅在规模上有大小区别,并且子问题的规模比原始问题的规模要小。
对于规模为n的原始问题,我们通常会寻找规模n的问题与规模n-1或者规模n/2的问题之间存在的联系,从而进一步推导出具有递归特性的运算模型。
根据递归方程的一般形式,常用的解法有三种,分别是递推法、公式法及生成函数法。
下面就分别来分析其求解过程。
1.1递推法当递归方程形式简单且阶数较低时,一般可以采用递推法求解,根据一步一步递推找到方程的递推规律,得到方程的解。
下面举例说明: t(1)=0t(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)))。
递归方程的概念将原问题分解的数学表达式
递归方程是一种描述递归关系的数学表达式。
递归关系通常出现在那些可以将原问题分解为更小、更简单的子问题的情境中。
递归方程的基本形式通常如下:
f(n) = g(n) + f(n-1)
其中,f(n) 是我们要找的函数,g(n) 是一个已知的函数,而f(n-1) 是函数 f 在n-1 处的值。
这个方程描述了如何将问题f(n) 分解为更小的问题f(n-1)。
递归方程的关键在于,它允许我们将一个复杂的问题分解为一系列更小、更简单的子问题,而这些子问题可以用相同的方程来描述。
通过这种方式,我们可以逐步解决这些子问题,直到我们找到原问题的解。
例如,考虑斐波那契数列,这是一个非常经典的递归问题。
斐波那契数列的定义是:F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2)
这个方程就是一个递归方程,它描述了如何将斐波那契数列的第n 项分解为第n-1 项和第n-2 项的和。
通过不断应用这个方程,我们可以计算出斐波那契数列的任何一项。
总的来说,递归方程是一种强大的工具,它允许我们以一种系统的方式解决那些可以分解为更小子问题的复杂问题。
递归式的三种求解⽅式求解递归式对于分冶算法的重要性不⾔⽽喻以下介绍了三种求解递归式的⽅法1,代换法:缺点:代换法主要的缺点在于,对于任何递归式,我们先得去猜其解,对于猜错了同学,如果不幸猜出的结果和正确结果相差太⼤,虽然可以推导,但是意义不⼤;优点:代换法相较于递归树法更为严谨,相较于主定理应⽤范围更⼴,主定理只能求解类似于T(n) = aT(n/b)+n/c这种形式的递归式;下⾯给出⼀个递归表达式T(n) = 2T(n/2)+n,求其解;⾸先猜⼀下其解为O(nlgn);那么我们只需要证明T(n)<cnlgn即可先假设T(n)<cnlgn对于n/2也成⽴,那么T(n/2)<=c(n/2)lg(n/2)也成⽴那么必然的T(n)<=2(c(n/2)(lgn/2))+n-=cnlgn-cnlg2+n<=cnlgn-cn+n以上表达式,在c>=1时永远成⽴,得证递归式T(n) = 2T(n/2)+n的解为O(nlgn)其他递归式的求解⽅式和上⾯的⼤体相似;2,递归树法递归树⽅法利⽤了将递归式分解为⼀棵递归树的形式来更加直观的求解递归式;缺点:递归树⽅法求解递归式因为丢弃了很多低阶项,所以不够严谨;优点:递归树⽅法求解递归式从视觉上更为直观,简单。
⼀般可以先运⽤递归树求解,然后利⽤代换法更加严谨得证明⽤递归树求解的解的数学上的正确性;下⾯求T(n) = 2T(n/2)+n的解⾸先将上述递归表达式⽤递归树表达出来,不会画图,⽐较丑。
以上递归式的深度为lgn,每层的代价为n,⾃然推导出T(n) = T(n/2)的解为O(nlgn)以上递归式的求解⽐较简单更为复杂的求解参考算法导论;3,主定理主定理是最为简单求解递归式的解的⽅法,也是我最为喜欢的⼀种分析⽅法主定理给出如下的如下形式的通⽤的递归式:T(n) = aT(n/b)+f(n)主定理套公式分为以下三种情况符号打得⼼累直接截图:以上为三种递归式的求解⽅法。
递归方程解的渐近阶的求法递归算法在最坏情况下的时间复杂性渐近阶的分析,都转化为求相应的一个递归方程的解的渐近阶。
因此,求递归方程的解的渐近阶是对递归算法进行分析的关键步骤。
递归方程的形式多种多样,求其解的渐近阶的方法也多种多样。
这里只介绍比较实用的五种方法。
1.代入法这个方法的基本步骤是先推测递归方程的显式解,然后用数学归纳法证明这一推测的正确性。
那么,显式解的渐近阶即为所求。
2.迭代法这个方法的基本步骤是通过反复迭代,将递归方程的右端变换成一个级数,然后求级数的和,再估计和的渐近阶;或者,不求级数的和而直接估计级数的渐近阶,从而达到对递归方程解的渐近阶的估计。
3.套用公式法这个方法针对形如:T (n)=aT (n / b)+f (n) 的递归方程,给出三种情况下方程解的渐近阶的三个相应估计公式供套用。
4.差分方程法有些递归方程可以看成一个差分方程,因而可以用解差分方程(初值问题)的方法来解递归方程。
然后对得到的解作渐近阶的估计。
5.母函数法这是一个有广泛适用性的方法。
它不仅可以用来求解线性常系数高阶齐次和非齐次的递归方程,而且可以用来求解线性变系数高阶齐次和非齐次的递归方程,甚至可以用来求解非线性递归方程。
方法的基本思想是设定递归方程解的母函数,努力建立一个关于母函数的可解方程,将其解出,然后返回递归方程的解。
本章将逐一地介绍上述五种方法,并分别举例加以说明。
本来,递归方程都带有初始条件,为了简明起见,我们在下面的讨论中略去这些初始条件。
递归方程组解的渐进阶的求法——代入法用这个办法既可估计上界也可估计下界。
如前面所指出,方法的关键步骤在于预先对解答作出推测,然后用数学归纳法证明推测的正确性。
例如,我们要估计T(n)的上界,T(n)满足递归方程:其中是地板(floors)函数的记号,表示不大于n的最大整数。
我们推测T(n)=O(n log n),即推测存在正的常数C和自然数n0,使得当n≥n0时有:T(n)≤Cn log n事实上,取n0=22=4,并取那么,当n0≤n≤2n0时,成立。
解递归方程下面的求解方法,其正确性可阅读组合数学中的相关内容。
1、 递推法例:Hanoi 塔问题递归算法的时间复杂性,由以下递归方程给出:()2(1) 1 2(1)1T n T n n T =-+≥⎧⎨=⎩递推求解如下:232122122()2(1)12(2(2)1)12(2)212(3)221......2(1)2 (221)22 (221)21n n n n n T n T n T n T n T n T ----=-+=-++=-++=-++++=+++++=+++++=-所以,Hanoi 塔问题递归算法的时间复杂性为:()(2)n T n O =例:分治法实例。
设n 表示问题的尺寸,n/b 表示将问题分成a 个子问题后的每个子问题的尺寸,其中a,b 为常数。
d(n)表示在分解或合成子问题而得到整个问题解决时的时间耗费。
则整个问题的时间耗费由下面的递归方程给出: ()(/)() 2(1)1T n aT n b d n n T =+≥⎧⎨=⎩递推求解如下:222232332210()((/)(/))()(/)(/)()((/)(/))(/)()(/)(/)(/)() ......(/)(/)k k ki i i T n a aT n b d n b d n a T n b ad n b d n a aT n b d n b ad n b d n a T n b a d n b ad n b d n a T n b a d n b -==++=++=+++=+++=+∑设:kn b =,则log b k n =,有: 10()(1)(/)k ki i i T n a T a d n b -==+∑ 当()d n 为常数时,有:log 10()() 1()(log ) 1 b a k k k ii b O a O n a T n a c a O n a -=⎧=≠=+=⎨=⎩∑ 当(),d n cn c =为常数时,有:111000(/)(/)(/)k k k i i i ii i i i a d n b a cn b cn a b ---=====∑∑∑若:a b <,则:10(/)()k i i cn a b O n -==∑log ()()()b a T n n O n O n =+=若:a b =,则:10(/)log k i b i cn a b cnk cn n -===∑log ()log (log )b a b b T n n cn n O n n =+=若:a b >,则:1log log 0(/)1(/)()()()/1/1b b k k kk n a ik i a b a b cn a b cn c O a O a O n a b a b -=--=====--∑ log log log ()()()b b b a a a T n n O n O n =+=综上所述:log () ()(log ) () b n O n a b T n O n n a b O na b ⎧<⎪==⎨⎪>⎩2、公式解法K 阶常系数齐次递推方程:12()(1)(2)...()0k T n a T n a T n a T n k -------= 0,,,1,...,k i a n k a i k ≠≥=是常数则对应的特征方程为:1212...0k k k k x a x a x a ------=特征方程有k 个根:12,,...,k q q q ,称为齐次方程的特征根。
求解递归方程的方法递归方程是一种用于描述数列、函数或其他对象的数学方程。
它通常通过将问题分解成更小的子问题来定义。
解递归方程的方法可以包括:递归直接求解、递归树、主定理、特征根法等。
首先,我们来介绍递归直接求解的方法。
递归直接求解是指通过不断展开递归式,直到出现边界条件,从而得到一系列的函数值,最终可以得到递归式的解。
这种方法通常适用于递归方程比较简单的情况。
举个例子来说明递归直接求解的方法。
假设我们要解递归方程f(n)=f(n-1)+2n,其中f(1)=1、我们可以展开递归式,得到f(n)=f(n-1)+2n=[f(n-2)+2(n-1)]+2n=...=f(1)+2(2)+...+2n=1+2+4+...+2n。
这个等式可以通过求和公式得到解为f(n)=2^(n+1)-2递归树是一种用于解递归方程的图形化工具,它将递归式展开为一个树形结构。
每个结点代表一个递归表达式的计算步骤,而边表示从一个结点到另一个结点的计算关系。
通过分析递归树的结构和计算路径,可以得到递归方程的解。
接下来我们以斐波那契数列的求解为例来介绍递归树的方法。
斐波那契数列的递归方程为f(n)=f(n-1)+f(n-2),其中f(0)=0,f(1)=1、我们可以通过递归树来展示每一步的计算过程。
```f(5)/\f(4)f(3)/\/\f(3)f(2)f(2)f(1)/\f(2)f(1)```从递归树中可以看出,计算f(5)需要计算f(4)和f(3),而计算f(4)需要计算f(3)和f(2),以此类推。
在递归树中,每个结点的计算次数总是与其所对应的递归次数一致。
因此,通过递归树可以推导出递归方程的求解。
主定理是解递归方程的一种重要的数学工具,它适用于形如T(n)=aT(n/b)+f(n)的递归方程的求解。
其中,a≥1,b>1是常数,f(n)是一个任意函数。
主定理给出了递归方程求解的一般公式。
主定理有三种形式:第一种形式适用于f(n) = O(n^c),其中c<log_b(a);第二种形式适用于f(n) = Θ(n^c log^k(n)),其中k≥0,c=log_b(a);第三种形式适用于f(n) = Ω(n^c),其中c>log_b(a)。
采用主方法求解以下递归方程要求解递归方程,我们可以使用主方法(master theorem),一种用于估计递归算法时间复杂度的方法。
主方法适用于满足以下形式的递归方程:T(n)=aT(n/b)+f(n)其中T(n)是算法的时间复杂度,a是递归步骤的数量,n/b是每个递归步骤的输入规模(其中b是一个大于1的常数),f(n)是除了递归步骤之外的其他工作的时间复杂度。
根据主方法,我们将方程分为三种情况来求解。
第一种情况:当f(n) = O(n^c) 且 c < log_b(a)时,时间复杂度为O(n^log_b(a))。
第二种情况:当f(n) = Θ(n^c * log^k(n)),且c = log_b(a)时,时间复杂度为O(n^c * log^(k+1)(n))。
第三种情况:当f(n) = Ω(n^c) 且 c > log_b(a)时,时间复杂度为O(f(n))。
现在让我们来应用这些原则来解决一个具体的递归方程。
例子1:T(n)=2T(n/2)+n我们可以看到a=2,b=2,f(n)=n。
我们可以观察到f(n) = O(n^c) 且 c = 1、因为c = 1 < log_b(a) = log_2(2) = 1,我们处于第一种情况。
根据主方法,时间复杂度为O(n^log_b(a)) = O(n^log_2(2)) =O(n)。
例子2:T(n)=2T(n/4)+√n我们可以看到a=2,b=4,f(n)=√n。
我们可以观察到f(n) = Θ(n^c * log^k(n)),且c = log_b(a) =log_4(2) = 0.5,k = 0。
因此,我们处于第二种情况。
根据主方法,时间复杂度为O(n^c * log^(k+1)(n)) = O(n^0.5 *log^1(n)) = O(√n * log(n))。
例子3:T(n)=2T(n/2)+n^2我们可以看到a=2,b=2,f(n)=n^2我们可以观察到f(n) = Ω(n^c) 且 c = log_b(a) = log_2(2) = 1、因此,我们处于第三种情况。
求解递归式的方法递归是一种问题解决方法,它基于将问题分解为更小的子问题,然后通过解决子问题来解决原始问题。
递归式是一种表示一些问题与其子问题之间关系的方程式。
求解递归式的方法包括数学归纳法、递归树、主方法和代换法等。
一、数学归纳法数学归纳法是求解递归式的一种常用方法,它基于递推式的思想。
首先,我们需要证明基础情况的正确性,即递归式是否在一些起始点成立。
然后,我们需要假设递归式在一般情况下成立,即假设递归式对n=k成立,然后证明递归式在n=k+1时也成立。
通过推理和证明,可以得到递归式的解。
二、递归树递归树是一种图形化的表示方法,用于描述递归式的求解过程。
它将问题划分为不同的子问题,并将其表示为树的结构。
递归树的深度表示递归的层数,每个节点表示一个子问题,叶子节点表示基本情况。
通过计算每个节点的代价,可以得到递归式的解。
三、主方法主方法是求解递归式的一种常用方法,它适用于形如T(n) = aT(n/b) + f(n)的递归式,其中a≥1,b>1、主方法的基本原理是通过比较a、b和f(n)的关系,判断递归式的求解复杂度。
主方法分为三种情况:若f(n) = O(n<sup>c</sup>),其中c<log<sub>b</sub>a,则T(n) =Θ(n<sup>log<sub>b</sub>a</sup>);若f(n) = Θ(n<sup>c</sup>),其中c=log<sub>b</sub>a,则T(n) = Θ(n<sup>c</sup> logn);若f(n)= Ω(n<sup>c</sup>),如果af(n/b)≤kf(n),其中k<1,且存在d≥0使得af(n/b)≥df(n),则T(n) = Θ(f(n))。
第二章 常用的数学工具2.2 用生成函数求解递归方程 2.2.1 生成函数及其性质一、生成函数的定义定义2.1 令Λ,,,210a a a 是一个实数序列,构造如下的函数:k k kz az a z a a z G ∑∞==+++=02210)(Λ (2.2.1)则函数)(z G 称为序列Λ,,,210a a a 的生成函数。
例:函数nn n n n n n x C x C x C C x ++++=+Λ2210)1(则函数n x )1(+便是序列nn n n n C C C C ,,,,210Λ的生成函数。
二、生成函数的性质1. 加法 设k k k z a z G ∑∞==0)(是序列Λ,,,210a a a 的生成函数,k k kz bz H ∑∞==)(是序列Λ,,,210b b b 的生成函数,则)()(z H z G βα+k k kkk kz bz az H z G ∑∑∞=∞=+=+0)()(βαβαk k k kz b a)(0∑∞=+=βα(2.2.2)是序列Λ,,,221100b a b a b a βαβαβα+++的生成函数。
2.移位 设k k k z a z G ∑∞==0)(是序列Λ,,,210a a a 的生成函数,则)(z G z mkmk m k mzaz G z ∑∞=-=)( (2.2.3)是序列ΛΛ,,,,0,,0210a a a 的生成函数。
3.乘法 设k k k z a z G ∑∞==0)(是序列Λ,,,210a a a 的生成函数,k k kz bz H ∑∞==)(是序列Λ,,,210b b b 的生成函数,则)()(z H z G)()()()(22102210ΛΛ++++++=z b z b b z a z a a z H z GΛ++++++=2021120011000)()(z b a b a b a z b a b a b ak k k z c ∑∞==0(2.2.4)是序列Λ,,,210c c c 的生成函数,其中,k n nk k n b a c -=∑=04. z 变换 设k k k z a z G ∑∞==0)(是序列Λ,,,210a a a 的生成函数,则。
递归关系的精确表示式
递归关系的精确表示式
递归函数是一种特殊的函数。
它可以无限次地调用自身,直到满足某个临界条件,才表示结束。
递归函数可以帮助简化程序,节省代码空间,提高代码的可读性和可维护性。
给出一个精确的递归表达式:
f(n)=f(n-1)+f(n-2),n>1; f(1)=f(2)=1
这个表达式表示一个递归函数,其中n代表状态数。
函数f(n)表示从起始
状态到第n状态之间的跳转次数。
其中,f(1)和f(2)表示起始状态,即f(1)和f(2)的值都是1;其他n状态值可以通过这个公式来递归求解:f(n)=f(n-1)+f(n-2),即n状态值等于n-1状态值和n-2状态值的总和。
实际上,此公式可以用来求解斐波那契数列的求解。
比如说,f(n)=f(n-1)+f(n-2)中的f(1)和f(2)表示斐波那契数列的第1和第2项均为1,而f(n)表示斐波那契数列的第n项,它可以用前两项结果来递归计算:即f(n)=f(n-1)+f(n-2),可以计算出斐波那契数列的任意项的值。
从以上可以看出,精确的递归表达式对程序的优化和提高效率起着重要作用,
它可以帮助开发者减少代码量,提高代码的可维护性和可读性。
递归方程解的渐近阶的求法递归算法在最坏情况下的时间复杂性渐近阶的分析,都转化为求相应的一个递归方程的解的渐近阶。
因此,求递归方程的解的渐近阶是对递归算法进行分析的关键步骤。
递归方程的形式多种多样,求其解的渐近阶的方法也多种多样。
这里只介绍比较实用的五种方法。
1.代入法这个方法的基本步骤是先推测递归方程的显式解,然后用数学归纳法证明这一推测的正确性。
那么,显式解的渐近阶即为所求。
2.迭代法这个方法的基本步骤是通过反复迭代,将递归方程的右端变换成一个级数,然后求级数的和,再估计和的渐近阶;或者,不求级数的和而直接估计级数的渐近阶,从而达到对递归方程解的渐近阶的估计。
3.套用公式法这个方法针对形如:T (n)=aT (n / b)+f (n) 的递归方程,给出三种情况下方程解的渐近阶的三个相应估计公式供套用。
4.差分方程法有些递归方程可以看成一个差分方程,因而可以用解差分方程(初值问题)的方法来解递归方程。
然后对得到的解作渐近阶的估计。
5.母函数法这是一个有广泛适用性的方法。
它不仅可以用来求解线性常系数高阶齐次和非齐次的递归方程,而且可以用来求解线性变系数高阶齐次和非齐次的递归方程,甚至可以用来求解非线性递归方程。
方法的基本思想是设定递归方程解的母函数,努力建立一个关于母函数的可解方程,将其解出,然后返回递归方程的解。
本章将逐一地介绍上述五种方法,并分别举例加以说明。
本来,递归方程都带有初始条件,为了简明起见,我们在下面的讨论中略去这些初始条件。
递归方程组解的渐进阶的求法——代入法用这个办法既可估计上界也可估计下界。
如前面所指出,方法的关键步骤在于预先对解答作出推测,然后用数学归纳法证明推测的正确性。
例如,我们要估计T(n)的上界,T(n)满足递归方程:其中是地板(floors)函数的记号,表示不大于n的最大整数。
我们推测T(n)=O(n log n),即推测存在正的常数C和自然数n0,使得当n≥n0时有:T(n)≤Cn log n (6.2)事实上,取n0=22=4,并取那么,当n0≤n≤2n0时,(6.2)成立。
特征方程求解递归方程
在计算机科学和算法设计中,递归方程是非常常见的数学模型。
通常情况下,它们被用来描述某些重复性的过程或者算法的运行时间。
例如,计算斐波那契数列、快速排序算法等都可以用递归方程来描述。
解决递归方程的一种常见方法是使用特征方程。
特征方程是一个与原方程形式相似的代数方程,通过求解它的根可以得到递归方程的通项公式。
特征方程的求解需要一些数学知识,包括线性代数和微积分等。
但是,对于一些简单的递归方程,我们可以使用一些基本的技巧来求解它们的特征方程。
例如,对于斐波那契数列的递归方程f(n) = f(n-1) + f(n-2),我们可以将它转化为特征方程x^2 = x + 1,然后求解它的根为φ和1-φ(φ是黄金比例,约为1.618),从而得到斐波那契数列的通项
公式f(n) = (φ^n - (1-φ)^n) / √5。
特征方程可以帮助我们更加系统地理解递归方程,从而更好地设计和分析算法。
因此,学习特征方程的求解方法是非常有价值的。
- 1 -。
递推关系解法补充
(取自[美]C.L.Liu 著,刘振宏译《离散数学基础》,•邮电出版社,1982.2,••P258)
一、有关定义及术语
1. 递推关系或差分方程:对于序列a 0,a 1,...,a n ,...,一个关系到a n 与几个a i (i<n)的方程式就称
为刻划该序列的递推关系或差分方程。
2. 边界条件或初始条件:只要给定了一个序列在一个或几个时刻的值,按递推关系,我们就可以逐步地由a n-1,a n-2,...求出a n ,再由a n ,a n-1,...求出a n+1等等。
这些给定的值即称为边界条件或初始条件。
3. 具有常系数的线性递推关系:形如 c 0a n +c 1a n-1+c 2a n-2+...+c k a n-k =f(n) (1) 的递推关系称为k 阶常系数的线性递推关系。
其中,所有的c i 为常数,c 0和c k 均不为0。
二、解法
通解=齐次解(方程右边等于0时的解)+特解(方程右边有f(n)时的解) (一)齐次解的求法
形如 c 0αk +c 1αk-1+c 2α
k-2
+...+c k =0 (2) 的方程称为差分方程(1)
的特征方程。
若1α是其特征根,则n
1A α就是(1)的一个齐次解。
1. k 阶特征方程有k 个特征根,假定特征方程的根都不相同,那么,可以验证
n
n
n
n 1122k k a =A α+A α++A α (3) 也是差分方程的一个齐次解(通项)。
其
中k 21,,,ααα 是不同的特征根,A 1,A 2,...,A K 是由边界条件所确定的常数。
例:回顾斐波那契数列,其递推关系是:a n =a n-1+a n-2,对应的特征方程为
12
=-α-α
,n n
12n 1122α=
α=
a =A α+A α2
2
⇒⇒是一个齐次解。
其
中A 1,A 2可由边界条件a 0=1,a 1=1来确定。
2. 某些根是重根,不妨令1α是m 重根(m=1时下式就是(3)式的第一项),•则与1α对应的
齐次解为: a n =(A 1n
m-1
+A 2n
m-2
+...+A m-1n 1+A m n 0)n
1α (4)
整个方程的齐次解由形如(4)式的齐次解相加而成。
例:a n +6a n-1+12a n-2+8a n-3=0
特征方程:α3+6α2+12α+8=0 ⇒ (α+2)3
=0 α=-2•是三重根,故a n =(A 1n 2+A 2n+A 3)(-2)n 是给定方程的一个齐次解。
(二)特解的求法
寻求特解,没有一般的方法。
然而,在一些简单的情况下,用观察的方法可以得到特解,下面讨论两种常见形式。
1. 当差分方程的右端属于n t
形式时,那么对应的特解属于下述形式:
t
t-1
n 12t t+1a =p n +p n
++p n+p
其中p 1,p 2,...,p t ,p t+1是待定常数。
例:用此法可得a n +5a n-1+6a n-2=3n 2的一个特解为2
n 117115a =
n +
n+
424
288
2. 当差分方程的右端属于n β形式时,若β不是差分方程的特征根,则对应的特解是n p β形
式;若β是m 重根(m>=1),则对应的特解是如下形式:
a n =(p 0n m +p 1n m-1+p 2n m-2+...+p m )n β
例:用此法可得a n +5a n-1+6a n-2=42n 4⨯的一个特解为n n+2n a =164=4⨯ (三)通解的求法
假定差分方程的特征根是不同的,那么通解的形式为
n
n
n
n 1122k k a =A α+A α++A α+p(n) 其中p(n)是一特解,k 21A ,,A ,A 为任意常数。
有m 重根时的通解可类似写出,只是相应项的系数不是常数,而是关于n 的一个m-1次多项式。
(四)满足边界条件的特解的求法
将k 个边界条件代入通解,得到关于待定系数k 21A ,,A ,A 的k 阶线性方程组,从中解出待定常数,代回通解所得的特解即为原差分方程满足边界条件的解。
例:n n n
n 12a =A (-2)+A (-3)+164⨯ 是方程a n +5a n-1+6a n-2=42n 4⨯的通解,假定边界条件
为962a ,278a 32==,则解方程组⎩⎨
⎧+--=++=1024
A 27A 8962256A 9A 42782121我们得到A 1=1,A 2=2,因此,
差分方程满足边界条件的特解是:n n n
n a =(-2)+2(-3)+164⨯。