算法设计与分析-第2章 递推方程求解
- 格式:ppt
- 大小:1.63 MB
- 文档页数:51
求解递推方程递推方程是一种数学模型,用于描述某个数列中每个数与前面的数之间的关系。
在实际应用中,递推方程常常用于预测未来的趋势或者计算某个数列中的特定项。
本文将介绍如何求解递推方程。
我们需要了解递推方程的基本形式。
一般来说,递推方程可以写成如下形式:an = f(an-1, an-2, …, an-k)其中,an表示数列中的第n项,f是一个函数,它描述了第n项与前面的k项之间的关系。
在实际应用中,k的取值通常是2或3。
接下来,我们需要找到递推方程的初始条件。
也就是说,我们需要知道数列中的前k项。
这些初始条件通常是通过实验或者观察得到的。
有了递推方程和初始条件,我们就可以使用递推法求解数列中的任意一项。
具体来说,我们可以按照如下步骤进行:1. 根据初始条件,计算出数列中的前k项。
2. 根据递推方程,计算出数列中的第k+1项。
3. 用计算出的第k+1项替换掉数列中的第1项,得到新的数列。
4. 重复步骤2和步骤3,直到计算出所需的项数为止。
需要注意的是,递推方程的求解过程中可能会涉及到复杂的数学运算,例如求和、求积等。
在这种情况下,我们可以使用数学工具或者编程语言来辅助计算。
我们需要检验所求解的数列是否符合递推方程和初始条件。
一般来说,我们可以通过计算数列中的前几项来检验结果的正确性。
如果计算出的数列与实际数列相符,则说明递推方程求解正确。
求解递推方程是一种重要的数学技能,它在实际应用中具有广泛的应用。
通过掌握递推方程的基本形式和求解方法,我们可以更好地理解数列中的规律,预测未来的趋势,以及计算数列中的特定项。
求解递推方程【前言】递推方程,在数学中也称为递归式,是一种递归定义的数学式子。
它通常用于描述一些指数级别的计算过程,如斐波那契数列等,是算法分析中一个非常基础的概念。
本文将介绍递推方程的基本概念和求解方法,并给出几个例子进行解析。
另外,本文的内容长度约为700字,将按照以下列表划分:1.递推方程的定义2.递推方程的求解方法3.斐波那契数列的递推方程4.经典递推问题——青蛙跳台阶问题的递推方程5.总结【正文】1.递推方程的定义递推方程是描述一个数列中每个项与前面某些项之间关系的方程式。
通常用f(n)表示序列的第n个数,而序列中的每个数,都可以通过前面某几个数的加减乘除运算来得到。
递推方程可以用以下的方式表示:f(n)=a*f(n-1) + b*f(n-2) + g(n)其中a,b为常数,g(n)是一个能够用n的式子表示的函数。
2.递推方程的求解方法对于递推式的求解,通常需要用到数学归纳法。
具体来说,可以采用以下的步骤:(1)通过观察数列的前几个数,找出递推式的初值。
(2)首先验证初值是否符合递推式,即检验f(1),f(2)等初几项是否为预期的值。
(3)假定递推式对1到n-1的所有自然数都成立,需要证明递推式对n也成立,即验证f(n)是否能够通过前面的项f(1)~f(n-1)计算得到。
(4)最后,通过归纳法证明递推式对任意自然数n都成立。
3.斐波那契数列的递推方程斐波那契数列是一个非常经典的递推问题,定义如下:f(1)=1,f(2)=1f(n)=f(n-1)+f(n-2),n≥3其中,f(n)表示斐波那契数列的第n项。
这个数列的前几项依次为1,1,2,3,5,8,13,21......以下是斐波那契数列的递推方程的证明过程:(1)首先根据题意,可以确定斐波那契数列的初值f(1)=1,f(2)=1。
(2)验证初值是否符合递推式,可以计算出f(3)=2,f(4)=3等,并确认这些值与数列的定义是一致的。
算法分析(第二章):递归与分治法一、递归的概念知识再现:等比数列求和公式:1、定义:直接或间接地调用自身的算法称为递归算法。
用函数自身给出定义的函数称为递归函数。
2、与分治法的关系:由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。
在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。
这自然导致递归过程的产生。
分治与递归经常同时应用在算法设计之中,并由此产生许多高效算法。
3、递推方程:(1)定义:设序列01,....na a a简记为{na},把n a与某些个()ia i n<联系起来的等式叫做关于该序列的递推方程。
(2)求解:给定关于序列{n a}的递推方程和若干初值,计算n a。
4、应用:阶乘函数、Fibonacci数列、Hanoi塔问题、插入排序5、优缺点:优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。
缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。
二、递归算法改进:1、迭代法:(1)不断用递推方程的右部替代左部(2)每一次替换,随着n的降低在和式中多出一项(3)直到出现初值以后停止迭代(4)将初值代入并对和式求和(5)可用数学归纳法验证解的正确性2、举例:-----------Hanoi塔算法----------- ---------------插入排序算法----------- ()2(1)1(1)1T n T nT=−+=()(1)1W n W n nW=−+−(1)=021n-23()2(1)12[2(2)1]12(2)21...2++2 (121)n n n T n T n T n T n T −−=−+=−++=−++==++=−(1)2 ()(1)1((n-2)+11)1(2)(2)(1)...(1)12...(2)(1)(1)/2W n W n n W n n W n n n W n n n n =−+−=−−+−=−+−+−==++++−+−=−3、换元迭代:(1)将对n 的递推式换成对其他变元k 的递推式 (2)对k 进行迭代(3)将解(关于k 的函数)转换成关于n 的函数4、举例:---------------二分归并排序---------------()2(/2)1W n W n n W =+−(1)=0(1)换元:假设2kn =,递推方程如下()2(/2)1W n W n n W =+−(1)=0 → 1(2)2(2)21k k k W W W−=+−(0)=0(2)迭代求解:12122222321332133212()2(2)212(2(2)21)212(2)22212(2)2*2212(2(2)21)2212(2)222212(2)3*2221...2(0)*2(22...21)22k k k k k k k k k k k k k k k k k k k k k k k k W n W W W W W W W W k k −−−−−−−+−+−−−=+−=+−+−=+−+−=+−−=+−+−−=+−+−−=+−−−==+−++++=−1log 1n n n +=−+(3)解的正确性—归纳验证: 证明递推方程的解是()(1)/2W n n n =−()(1)1W n W n n W =−+−(1)=0,(n 1)=n +n=n(n-1)/2+n =n[(n-1)/2+1]=n(n+1)/2n W W +方法:数学归纳法证 n=1,W(1)=1*(1-1)/2=0假设对于解满足方程,则()---------------快速排序--------------------->>>平均工作量:假设首元素排好序在每个位置是等概率的112()()()(1)0n i T n T i O n n T −==+=∑ >>>对于高阶方程应该先化简,然后迭代(1)差消化简:利用两个方程相减,将右边的项尽可能消去,以达到降阶的目的。
第一章作业1.证明下列Ο、Ω和Θ的性质1)f=Ο(g)当且仅当g=Ω(f)证明:充分性。
若f=Ο(g),则必然存在常数c1>0和n0,使得∀n≥n0,有f≤c1*g(n)。
由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。
必要性。
同理,若g=Ω(f),则必然存在c2>0和n0,使得∀n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。
2)若f=Θ(g)则g=Θ(f)证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得∀n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。
由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。
3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。
证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得∀n≥n1,有F(n) ≤ c1 (f(n)+g(n))= c1 f(n) + c1g(n)≤ c1*max{f,g}+ c1*max{f,g}=2 c1*max{f,g}所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))对于Ω和Θ同理证明可以成立。
4)log(n!)= Θ(nlogn)证明:∙由于log(n!)=∑=n i i 1log ≤∑=ni n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。
∙由于对所有的偶数n 有,log(n!)= ∑=n i i 1log ≥∑=n n i i 2/log ≥∑=nn i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。
当n ≥4,(nlogn)/2-n/2≥(nlogn)/4,故可得∀n ≥4,log(n!) ≥(nlogn)/4,即log(n!)= Ω(nlogn)。
第二讲递推公式求解
递推公式是求解递归问题的一种方法,它可以用简单的表达式描述系
统的行为,以确定或猜测系统未来的行为。
在数学上,它是一个表达式,
可以将系统的当前状态用于计算下一状态的值,并将其用于下一步的计算。
递推公式一般有两种形式,即线性递推公式和非线性递推公式。
线性递推公式是指当n(当前状态)变化时,其结果也是线性的,即
其中的变量与n的关系可以表示为一个线性的方程式。
线性递推公式可以
用于求解递归问题。
例如,求解有线性递推公式的递归问题:F(n)=F(n-1)+F(n-2)。
非线性递推公式是指当n(当前状态)变化时,其结果是非线性的,
即其中的变量与n的关系不能表示为一个线性方程式。
非线性递推公式可
以用于求解递归问题,例如,求解非线性递推公式的递归问题:
F(n)=F(n-1)×F(n-2)。
在许多情况下,线性递推公式可以用来求解递归问题,而非线性递推
公式要更加复杂,但它们可以用来求解一些比较复杂的递推问题。
求解递推公式的一般步骤如下:
(1)找出递推公式,并得到它的形式;
(2)如果是线性递推,解出其特征方程;
(3)根据特征方程和起始条件确定递推公式的解;。
黄宇《算法设计与分析》课后习题解析(⼆)第2章:从算法的视⾓重新审视数学的概念2.1:(向下取整)题⽬:请计算满⾜下⾯两个条件的实数的区间解析:根据向下取整的含义,令,讨论a的取值范围即可解答:令,则可得:即:故的取值区间为:2.2: (取整函数)题⽬:证明:对于任意整数,(提⽰:将n划分为)。
解析:根据提⽰将n进⾏划分,根据取整函数的定义⽤k表⽰取整函数,即可证明;证明如下:因为对于任意整数,可划分为,则:① ;② ;综上:对于任意整数,, 得证;2.3: (斐波拉契数列)对于斐波拉契数列,请证明:1)题⽬:是偶数当且仅当n能被3整除解析:由斐波拉契数列的递归定义式,容易联想到数学归纳法;证明如下:(采⽤数学归纳法)i)当n = 1,2,3时,依次为1,1,2,符合命题;ii)假设当(k>=1)时命题均成⽴,则:① 当n = 3k+1时,是奇数,成⽴;② 当n = 3k+2时,是奇数,成⽴;③ 当 n = 3(k+1)时,是偶数,成⽴;综上:归纳可得为偶数当且仅当,得证;2)题⽬:x x =1+a (0<a <1)x =1+a (0<a <1)⌊x ⌋=1⇒⌊x ⌋=21⌊x ⌋=2⌊1+a +22a ⌋=1a +22a <1⇒0<a <−21⇒1<a +1<⇒21<x <2x (1,)2n ≥1⌈log (n +1)⌉=⌊logn ⌋+12≤k n ≤2−k +11n ≥12≤k n ≤2−k +11k +1=⌈log (2+k 1)⌉≤⌈log (n +1)⌉≤⌈log (2)⌉=k +1k +1=>⌈log (n +1)⌉=k +1k =⌊log (2)⌋≤k ⌊logn ⌋≤⌊log (2−k +11)⌋=k =>⌊logn ⌋=k n ≥1⌈log (n +1)⌉=k +1=⌊logn ⌋+1F n F n n ≤3k F =n F +n −1F =n −2F +3k F =3k −1>F 3k +1F =n F +3k +1F =3k >F 3k +2F =n F +3k +2F =3k +1>F 3k +3F n 3∣n F −n 2F F =n +1n −1(−1)n +1解析:同1)理,容易联想到数学归纳法证明如下:(采⽤数学归纳法)i)当n = 2时,, 易知成⽴;ii)假设当 n = k 时命题成⽴,① 若k = 2m, 则,当n = k+1 = 2m+1时,要证命题成⽴,即证: => ,代⼊递推式, 得:, 易知是恒等式,故命题成⽴;②当 k=2m+1时,同①理可证命题成⽴;综上:归纳可得,得证;2.4:(完美⼆叉树)给定⼀棵完美⼆叉树,记其节点数为,⾼度为,叶节点数为,内部节点数为1)题⽬:给定上述4个量中的任意⼀个,请推导出其他3个量解析:根据完美⼆叉树的结构特点易得解答:(仅以已知⾼度h推导其他三个量为例,其余同理)已知⾼度为h,可得:节点数:叶节点数:内部节点数:2)题⽬:请计算完美⼆叉树任意⼀层的节点个数:① 如果任意指定深度为的⼀层节点,请计算该层节点个数;② 如果任意指定⾼度为的⼀层节点,请计算该层节点个数;解析:根据完美⼆叉树的结构特点易得(注意节点深度和节点⾼度是互补的,相加为树⾼)解答:① ; ② ;2.5: (⼆叉树的性质)对于⼀棵⾮空的⼆叉树T,记其中叶节点的个数为,有1个⼦节点的节点个数为,有两个⼦节点的节点个数为1)题⽬:如果T是⼀棵2-tree,请证明。
第二章算法分析得数学基础outline1 算法复杂性得阶2与式得估计与界限3递归方程4 集合、关系、函数、图、树等5 计数原理与概率论2、1 复杂性函数得阶2、1、1同阶函数集合定义2、1、1(同阶函数集合)、θ(f(n))={g(n)|∃c1,c2>0,n0,当n≥ n0,c1f(n)≤g(n)≤c2f(n)}称为与f(n)同阶得函数集合。
*如果g(n)∈θ(f(n)),我们称个g(n)与f(n)同阶。
*g(n)∈θ(f(n))常记作g(n)=θ(f(n))。
*f(n)必须就是极限非负得,即当n充分大以后,f(n)就是非负得,否则=空集。
例1 证明证、设 ,令c1=a/4,c2=7a/4,则,令。
当时成立。
例2 证明证、如果存在c1、c2>0,n0使得当n≥n0时,c1≤6n3≤c2n2。
于就是,当n>c2/6时,n≤c2/6,矛盾。
例3例4 因任何常数,,如果令。
2、1、2 低阶函数集合定义2、1、2(低阶函数集合)、O(f(n))={g(n)|∃c>0,n0 ,当n≥ n0 ,0≤g(n)≤cf(n)}称为比f(n)低阶得函数集合。
*如果g(n)∈O(f(n)),称f(n)就是g(n)得上界。
*g(n)∈O(f(n))常记作g(n)=O(f(n))。
例1例2 证明。
证、令c=1,n0=1,则当时,。
2、1、3 高阶函数集合定义2、1、3(高阶函数集合)、Ω(f(n))={g(n)|∃c>0,n0 ,当n≥n0 ,0≤cf(n)≤g(n)}称为比f(n)高阶得函数集合。
*如果g(n)∈Ω(f(n)),称f(n)就是g(n)得下界。
*g(n)∈Ω(f(n))常记作g(n)=Ω(f(n))。
定理2、1、对于任意f(n)与g(n), iff 而且f(n)=Ω(g(n))、证、如果, 则当时,、显然、如果且,则由可知,存在使得,当,。
由f(n)=Ω(g(n))可知,使得当,令,则当,。
第一章作业1.证明下列Ο、Ω和Θ的性质1)f=Ο(g)当且仅当g=Ω(f)证明:充分性。
若f=Ο(g),则必然存在常数c1>0和n0,使得∀n≥n0,有f≤c1*g(n)。
由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。
必要性。
同理,若g=Ω(f),则必然存在c2>0和n0,使得∀n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。
2)若f=Θ(g)则g=Θ(f)证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得∀n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。
由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。
3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。
证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得∀n≥n1,有F(n) ≤ c1 (f(n)+g(n))= c1 f(n) + c1g(n)≤ c1*max{f,g}+ c1*max{f,g}=2 c1*max{f,g}所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))对于Ω和Θ同理证明可以成立。
4)log(n!)= Θ(nlogn)证明:∙由于log(n!)=∑=n i i 1log ≤∑=ni n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。
∙由于对所有的偶数n 有,log(n!)= ∑=n i i 1log ≥∑=n n i i 2/log ≥∑=nn i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。
当n ≥4,(nlogn)/2-n/2≥(nlogn)/4,故可得∀n ≥4,log(n!) ≥(nlogn)/4,即log(n!)= Ω(nlogn)。
算法分析基础——迭代法求解递推⽅程迭代法的步骤:迭代⽤递推⽅程的右部替换左部出现初始值时,迭代停⽌⽤数学归纳法验证解的正确性例如,Hanoi塔问题是⼀个可以递归求解的经典问题。
我们便可以⽤迭代法求解其时间复杂度的递推⽅程。
⾸先看⼀下Hanoi塔问题的算法伪码:算法1 Hanoi(A, C, n) //将A柱上n个盘⼦按照要求移到C柱上1. if n=1 then move (A, C) //将A柱上1个盘⼦移到C柱上2. else Hanoi(A, B, n-1)3. move (A, C)4. Hanoi(B, C, n-1)设移动n个盘⼦的所需要的移动次数为T(n),由算法的伪码得到递推⽅程T(n) = 2 * T(n-1) + 1 = 2 * [T(n-2) + 1] + 1 = ... = 2n-1 * T(1) + 2n-2 + ... + 2 + 1,其中T(1) = 1。
于是得到T(n) = 2n - 1。
再⽤数学归纳法带⼊验证结果:T(n) = 2 * T(n - 1) + 1 = 2 * (2n - 1 - 1) + 1 = 2n - 1。
随着n的增⼤,算法的时间复杂度呈指数级别增长,解Hanoi问题需要的时间之漫长将令⼈难以接受。
事实上,Hanoi塔问题属于NP-Hard问题,即不存在多项式级别时间复杂度的解法,是不可解的。
有时,当直接只⽤迭代法解递归⽅程⽐较复杂时,可以采⽤换元迭代的⽅法,其执⾏步骤总结如下:将对n的递推式换成对其它变元k的递推式对k直接迭代将解(关于k的函数)转换成关于n的函数例如,考虑归并排序的时间复杂度。
设待排序数组A的长度为n。
⾸先看⼀下伪码:算法2 MergeSort(A, p, r)输⼊: 数组A[p...r], 1 ≤ p ≤ r ≤ n输出: 从A[p]到A[r]按照递增顺序排好的数组A1. if p < r2. then q←floor((p+r)/2)3. MergeSort(A, p, q)4. MergeSort(A, q+1, r)5. Merge(A, p, q, r)设W(n)为对长度为n的数组排序需要的⽐较次数。
算法设计与分析-主定理主定理的作⽤:求解递推⽅程。
使⽤主定理,就可以不⽤迭代法。
条件:得判断是否满⾜3个条件中的⼀个。
T(n)=aT(n/b)+f(n)n:解的规模a:⼦问题的个数n/b:归约后⼦问题的规模f(n):除了⼦问题,要求解另外增加的计算代价,不参加递归。
定理:设a>=1,b>=1,为常数,f(n)为函数,T(n)为⾮负整数,且T(n)=aT(n/b)+f(n),则有3个条件:下⾯是主定理的三⼤条件:1.f(n)=O(n log b a-ε)存在ε>0,就是当n log b a的阶⾼于f(n)时,可以存在ε使得n log b a-ε和f(n)的阶相同。
此时取T(n)=θ(n log b a)。
2.f(n)=Θ(n log b a)注意这时n log b a的阶和f(n)的阶相同,不需要ε。
此时取T(n)=Θ(n log b a logn)。
3.f(n)=Ω(n log b a+ε)⾸先得存在ε>0,就是当n log b a的阶低于f(n)时,可以存在ε使得n log b a+ε和f(n)的阶相同。
第⼆个要满⾜的条件是:af(n/b)<=cf(n), c<1。
此时取T(n)=Θ(f(n))。
来⼏道例题:例⼀:求解递推⽅程T(n)=9T(n/3)+n。
a=9,b=3,f(n)=n。
先判断n log b a=n log39=n2,阶数⾼于n,存在f(n)=O(n log b a-ε)=O(n2-1),ε=1。
满⾜主定理的条件1,所以T(n)=Θ(n log b a)=Θ(n2)。
例⼆:求解递推⽅程T(n)=T(2n/3)+1。
a=1,b=3/2,f(n)=1。
先判断n log b a=n log3/21=n0=1,和f(n)同阶。
满⾜主定理的条件2,所以T(n)=Θ(n log b a logn)=Θ(logn)。
例三:求解递推⽅程T(n)=3T(n/4)+nlogn。
求解递推方程递推方程是一种描述数列或函数的方法,通过给定初始条件和递推关系,可以求解出数列或函数的各个值。
在数学和计算机科学中,递推方程被广泛应用于各种问题的求解,例如斐波那契数列、阶乘计算等。
我们需要明确递推方程的定义和求解方法。
递推方程是一种通过给定初始条件和递推关系来确定数列或函数值的方法。
其中,初始条件指的是已知的数列或函数的前几个值,递推关系则是通过已知的数列或函数值来计算下一个值的关系式。
对于递推方程的求解,主要有两种方法:直接法和递归法。
直接法是通过递推关系式直接计算出所需的数列或函数值,而递归法则是通过递推关系式和已知的初始条件来递归地计算出所需的数列或函数值。
以斐波那契数列为例,其递推方程为f(n) = f(n-1) + f(n-2),其中f(0) = 0,f(1) = 1。
根据这个递推方程和初始条件,我们可以使用直接法或递归法来求解斐波那契数列的任意项。
使用直接法求解斐波那契数列的思路是,从初始条件开始,通过递推关系式依次计算出每一项的值,直到计算到所需的项。
具体步骤如下:1. 根据初始条件,将f(0)和f(1)分别设为0和1;2. 根据递推关系式f(n) = f(n-1) + f(n-2),计算出f(2)、f(3)、f(4)等项的值;3. 重复上述计算,直到计算到所需的项。
使用递归法求解斐波那契数列的思路是,根据递推关系式和初始条件,通过递归地调用自身来计算出每一项的值。
具体步骤如下:1. 定义一个递归函数fib(n),用于计算斐波那契数列的第n项的值;2. 在递归函数中,首先判断n的值是否满足初始条件,如果满足则直接返回初始值;3. 如果n不满足初始条件,则通过递归调用fib(n-1)和fib(n-2)来计算出f(n)的值;4. 递归调用结束后,将计算结果返回。
除了斐波那契数列,还有很多其他的递推方程可以求解。
例如,阶乘的递推方程为f(n) = n * f(n-1),其中f(0) = 1。