第二讲 递推算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• begin • readln(x,y,z); • a[1]:=1; • for i:=1 to z do add(i); A[I]进行递推} • ans:=0; • for i:=1 to z+1 do ans:=ans+a[i]; } • writeln(ans); • end.
{初始化} {对每个
解答
• 由问题,可写出递推方程
1n 0 fn 2n 1 f f n 2 n2 n 1
算法:
F[0] := 1; F[1] := 2; FOR i := 2 TO N DO F[i] := F[i – 1] + F[i – 2];
总结
• 从这个问题可以看出,在计算裴波那契数列的每一项目时, 都可以由前两项推出。这样,相邻两项之间的变化有一定 的规律性,我们可以将这种规律归纳成如下简捷的递推关 系式:Fn=g(Fn-1),这就在数的序列中,建立起后项和前 项之间的关系。然后从初始条件(或是最终结果)入手, 按递推关系式递推,直至求出最终结果(或初始值)。很 多问题就是这样逐步求解的。 • 对一个试题,我们要是能找到后一项与前一项的关系并清 楚其起始条件(或最终结果),问题就可以递推了,接下 来便是让计算机一步步了。让高速的计算机从事这种重复 运算,真正起到“物尽其用”的效果。
– No. –1 –2 – … Distance(k.m.) × × × × …… Oil(litre) ×× ×× ……
分析
• 设Way[i]——第i个贮油点到终点(i=0)的距离; • oil[i]——第i个贮油点的贮油量; • 我们可以用倒推法来解决这个问题。从终点向始点倒推, 逐一求出每个贮油点的位置及存油量。 • 从贮油点i向贮油点i+1倒推的方法是:卡车在贮油点i和 贮油点i+1间往返若干次。卡车每次返回i+1点时应该正好 耗尽500公升汽油,而每次从i+1点出发时又必须装足500 公升汽油。两点之间的距离必须满足在耗油最少的条件 下,使i点贮足i*500公升汽油的要求(0≦i≦n-1)。
ans A[i]
i 1
z 1
• • • • • • • • • • • • • • •
程序如下: program exam1; var x,y,z,i :integer; ans:longint; a :array[1..60]of longint; procedure add(i:integer); var j :integer; begin j:=i+2+x; {新生成虫要过x 个月才开始产卵,即第 I+2+x个月才出现第一群新成虫} repeat a[j]:=a[j]+a[i]*y; {递推} j:=j+x until j>z+1 end;
例5:Catalan数
• 在一个凸n边形中,通过不相交于n边形内部的对 角线,把n边形拆分成若干三角形,不同的拆分数 目用hn表示,hn即为Catalan数。例如五边形有如 下五种拆分方案,故h5=5。求对于一个任意的凸 n边形相应的hn。
分析
• 设Cn表示凸n边形的拆分方案总数。由题目中的要求可知一个凸n边 形的任意一条边都必然是一个三角形的一条边,边P1 Pn也不例外, 再根据“不在同一直线上的三点可以确定一个三角形”,只要在P2, P3,……,Pn-1点中找一个点Pk(1<k<n),与P1、Pn 共同构成一个三 角形的三个顶点,就将n边形分成了三个不相交的部分(如图),我们 分别称之为区域①、区域②、区域③,其中区域③必定是一个三角 形,区域①是一个凸k边形,区域②是一个凸n-k+1边形,区域①的 拆 分 方 案 总 数 是 Ck , 区 域 ② 的 拆 分 方 案 数 为 Cn-k+1 , 故 包 含 △P1PkPn的 n 边形的拆分方案数为 CkCn-k+1种,而 Pk可以是 P2, P3, ……,Pn-1种任一点,根据加法原理,凸n边形的三角拆分方案总数 为:
分析
• 首先我们来看样例:每隔1个月产2对卵,求过8 月(即第8+1=9月)的成虫个数
月份 1 1 2 2 1 3 2 1 4 2 3 5 6 5 6 10 7 7 14 13 8 26 23 9 46 37 … … … 新增卵 0 成虫
分析
• 设数组A[i]表示第i月新增的成虫个数。 • 由于新成虫每过x个月产y对卵,则可对每个A[i]作 如下操作: • A[i+k*x+2]:=A[i+k*x+2]+A[i]*y (1<=k,i+k*x+2<=z+1) • 因为A [i]的求得只与A[1]~A[i-1]有关,即可用递推 求法。 • 则总共的成虫个数为:
倒推第k步
• …… • 为了在i=k处贮藏k*500公升汽油,卡车至少从i=k+1处开k 趟满载车至i=k处,即oil[k+1]=(k+1)*500=oil[k]+500,加 上从i=k返回i=k+1的k-1趟返程空间,合计2k-1次。这2k1次总耗油量按最省要求为500公升,即dk,k+1=500/(2k1) • Way[k+1]=Way[k]+dk,k+1=Way[k]+500/(2k-1);
精品课件!
精品课件!
动态规划与递推的关系
• 上题实质上是采用动态规划来求解,那么与递推 动态规划之间到底是什么关系呢? • 我们不妨画个图(如下图)。而通常人们理解的递 推关系就是一般递推关系,故认为动态规划与 递推关系是两个各自独立的个体。
递推关系 一般递 推关系 动态 规划
i=n的情形
• i=n至始点的距离为1000-Way[n],oil[n]=500*n。为了在 i=n处取得n*500公升汽油,卡车至少从始点开n+1次满载车 至I=n,加上从I=n返回始点的n趟返程空车,合计2n+1次, 2n+1趟的总耗油量应正好为(1000-Way[n])*(2n+1),即 始点藏油为oil[n]+(1000-Way[n])*(2n+1)。
{累加总和
例2 : Hanoi塔问题
• Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开 始时,这n个圆盘由大到小依次套在a柱上,如图1所示。 要求把a柱上n个圆盘按下述规则移到c柱上:
(1)一次只能移一个圆盘; (2)圆盘只能在三个柱上存放; (3)在移动过程中,不允许大盘压小盘。
• 问将这n个盘子从a柱移动到c柱上,总计需要移动多少个 盘次? a b c
图1
分析
• 设hn为n 个盘子从a柱移到c柱所需移动的盘次。显然, 当n=1时,只需把a 柱上的盘子直接移动到c柱就可以 了,故h1=1。当n=2时,先将a柱上面的小盘子移动到b 柱上去;然后将大盘子从a柱移到c 柱;最后,将b柱 上的小盘子移到c柱上,共记3个盘次,故h2=3。以此 类推,当a柱上有n(n>=2)个盘子时,总是先借助c柱把 上面的n-1个盘子移动到b柱上,然后把a柱最下面的盘 子移动到c柱上;再借助a柱把b柱上的n-1个盘子移动 到c柱上;总共移动hn-1+1+hn-1个盘次。
引例.Fibonacci数列
• Fibonacci数列的代表问题是由意大利著名 数学家Fibonacci于1202年提出的“兔子繁 殖问题”(又称“Fibonacci问题”)。 • 问题: 一个数列的第0项为0,第1项为1,以后每 一项都是前两项的和,这个数列就是著名 的裴波那契数列,求裴波那契数列的第N项。
例4:杨辉三角
分析
C C
n r r n 1
C n 1
r 1
组合公式的证明:
(n 1)! C n1 r!(n r 1)!
r
r r 1
Hale Waihona Puke Baidu
(n 1) ! C n1 (r 1)!(n r )!
r 1
(n 1) ! (n r ) (n 1)! r n! r Cn C n1 C n1 r!(n r )! r!(n r )!
• 科学家在热带森林中发现了一种特殊的昆虫,这 种昆虫的繁殖能力很强。每对成虫过x个月产y对 卵,每对卵要过两个月长成成虫。假设每个成虫 不死,第一个月只有一对成虫,且卵长成成虫后 的第一个月不产卵(过X个月产卵),问过Z个月以 后,共有成虫多少对?x>=1,y>=1,z>=x • 输入:x,y,z的数值 • 输出:成虫对数 • 示例: 输入:x=1 y=2 z=8 输出:37
倒推第一步
• 第一个贮油点i=1应距终点i=0处500km,且在该 点贮藏500公升汽油,这样才能保证卡车能由 i=1处到达终点i=0处,这就是说 • Way[1]=500;oil[1]=500;
倒推第二步
为了在i=1处贮藏500公升汽油,卡车至少从I=2处开两趟 满载油的车至i=1处,所以i=2处至少贮有2*500公升汽油, 即oil[2]=500*2=1000;另外,再加上从i=1返回至i=2处 的一趟空载,合计往返3次。三次往返路程的耗油量按 最省要求只能为500公升,即d1,2=500/3km, Way[2]=Way[1]+d1,2=Way[1]+500/3
• ∴hn=2hn-1+1 • 边界条件:h1=1
例3 :平面分割问题
• 设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好 相交于两点,且任何三条封闭曲线不相交于同一点,问 这些封闭曲线把平面分割成的区域个数。
分析
• 设an为n条封闭曲线把平面分割成的区域个数。 由图2 可以看出:a2-a1=2;a3-a2=4;a4-a3=6。从这些式子 中可以看出an-an-1=2(n-1)。当然,上面的式子只是我 们通过观察4幅图后得出的结论,它的正确性尚不能 保证。下面不妨让我们来试着证明一下。当平面上已 有n-1条曲线将平面分割成an-1个区域后,第n-1条曲线 每与曲线相交一次,就会增加一个区域,因为平面上 已有了n-1条封闭曲线,且第n条曲线与已有的每一条 闭曲线恰好相交于两点,且不会与任两条曲线交于同 一点,故平面上一共增加2(n-1)个区域,加上已有的 an-1个区域,一共有an-1 + 2(n-1)个区域。所以本题的 递推关系是 • an=an-1+2(n-1) • 边界条件是a1=2。
C C
i 2 i
n 1
n i 1
边界条件C2=1。
例6:贮油点
• 一辆重型卡车欲穿过1000公里的沙漠,卡车耗汽油为1升/ 公里,卡车总载油能力为500公升。显然卡车装一次油是 过不了沙漠的。因此司机必须设法在沿途建立若干个贮油 点,使卡车能顺利穿过沙漠。试问司机如怎样建立这些贮 油点?每一贮油点应存储多少汽油,才能使卡车以消耗最 少汽油的代价通过沙漠? • 编程计算及打印建立的贮油点序号,各贮油点距沙漠边沿 出发的距离以及存油量。格式如下:
递推概念
• 给定一个数的序列H0,H1,…,Hn,…若存在 整数n0,使当n>n0时,可以用等号(或大于号、 小于号)将Hn与其前面的某些项Hn(0<i<n) 联系起来,这样的式子就叫做递推关系。
– 如何建立递推关系 – 递推关系有何性质 – 如何求解递推关系
递推的形式
• 顺推法和倒推法
例1:昆虫繁殖
倒推第三步
• 为了在I=2处贮藏1000公升汽油,卡车至少从I=3处开三 趟满载油的车至I=2处。所以I=3处至少贮有3*500公升汽 油,即oil[3]=500*3=1500。加上I=2至I=3处的二趟返程 空车,合计5次。路途耗油亦应500公升,即d23=500/5, • Way[3]=Way[2]+d2,3=Way[2]+500/5;
相关文档
最新文档