网站大量收购独家精品文档,联系QQ:2885784924

[数学]递推关系的建立及其求解方法.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[数学]递推关系的建立及其求解方法

* 递推式的建立及其求解方法 山东师大附中 赵宗昌   一、递推式的建立   1、Hanoi塔问题     问题Ⅰ: 三柱问题     问题Ⅱ:四柱问题     问题Ⅲ:m柱问题   2、平面分割问题     问题Ⅰ:封闭曲线分割平面     问题Ⅱ:‘Z’分割平面     问题Ⅲ:‘M’分割平面   3、Catalan数     问题一:凸n边形的三角形剖分     问题二:二叉树数目     问题三:出栈序列   4、第二类Stirling数     问题一:放置小球     问题二:集合划分问题   5、其他     问题一:集合取数问题     问题二:整数划分问题 二、递推式的求解方法:   1. 递归函数   2.用数组实现   3.求递推式的通项表达式: 3.1、迭加法 3.2、待定系数法 3.3、特征方程法 3.4、生成函数法 一、递推式的建立   1、Hanoi塔问题 问题的提出:Hanoi塔由n个大小不同的圆盘和m根木柱1,2,3…….m组成。开始时,这n个圆盘由大到小依次套在1柱上,如图所示。 现在要求把1柱上n个圆盘按下述规则移到m柱上: (1) 一次只能移一个圆盘; (2) 圆盘只能在m个柱上存放; (3) 在移动过程中,不允许大盘压小盘。 求将这n个盘子从1柱移动到m柱上所需要移动盘子的最少次数 。 问题Ⅰ:三柱问题 设f(n)为n 个盘子从1柱移到3柱所需移动的最少盘次。 当n=1时,f(1)=1。 当n=2时,f(2)=3。 以此类推,当1柱上有n(n2)个盘子时,我们可以利用下列步骤: 第一步:先借助3柱把1柱上面的n-1个盘子移动到2柱上,所需的移 动次数为f(n-1)。 第二步:然后再把1柱最下面的一个盘子移动到3柱上,只需要1次 盘子。 第三步:再借助1柱把2柱上的n-1个盘子移动到3上,所需的移动次 数为f(n-1)。 由以上3步得出总共移动盘子的次数为:f(n-1)+1+ f(n-1)。 所以:f(n)=2 f(n-1)+1 f(n)= 2n-1 问题Ⅱ:四柱问题 【问题分析】: 令f[i]表示四个柱子时,把i个盘子从原柱移动到目标柱所需的最少移动次数。 j 第一步:先把1柱上的前j个盘子移动到另外其中一个非目标柱(2或3柱均可,假设移到2柱)上,此时3和4柱可以作为中间柱。移动次数为:f[j]。 第二步:再把原1柱上剩下的i-j个盘子在3根柱子(1、3、4)之间移动,最后移动到目标柱4上,因为此时2柱不能作为中间柱子使用,根据三柱问题可知,移动次数为:2^(i-j)-1。 第三步:最后把非目标柱2柱上的j个盘子移动到目标柱上,次数为:f[j]。 通过以上步骤我们可以初步得出: f[i] = 2*f[j]+2^(i-j)-1 j可取的范围是1=jI,所以对于不同的j,得到的f[i]可能是不同的,本题要求最少的移动次数 f[i] = min{2*f[j]+2^(i-j)-1},其中1=jI const MaxNum = 1000; var n : integer; F3, F4 : array[1..MaxNum] of double; procedure Init; var i : integer; begin fillChar(F3,sizeOf(F3),0); fillChar(F4,sizeOf(F4),0); readln(n); F3[1] := 1; F4[1] := 1; {*F3[n] 为Hanoi塔中3根柱子,n个盘子的最少移动次数 F3[n] = 2^n -1; F4[n] 为Hanoi塔中4根柱子,n个盘子的最少移动次数*} for i :=2 to n do F3[i] := 2*F3[i-1] + 1; end; procedure Run; var i, j : integer; minF4i,temp : double; begin for i := 2 to n do begin minF4i :=1e+100; for j := 1 to i-1 do begin temp := 2*F4[j] + F3[i-j

您可能关注的文档

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档