当前位置:文档之家› 递推关系的建立及其求解方法

递推关系的建立及其求解方法


现在要求把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。
F(n)=
f(i - 1) * f(n - i)
i 1
n
4、第二类Stirling数 问题一:放置小球 n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案数用 S(n,m)表示,称为第二类Stirling数 设有n个不同的球,分别用b1,b2,……bn表示。从中取出一个球bn,bn 的放法有以下两种: bn独自占一个盒子;那么剩下的球只能放在m-1个盒子中,方案数为
【问题分析】: 用f(I,j)表示将整数I分成j分的分法,可以划分为两类: 第一类 :j分中不包含1的分法,为保证每份都>=2,可以先那出j个1分到 每一份,然后再把剩下的I-j分成j份即可,分法有:f(I-j,j). 第二类 : j份中至少有一份为1的分法,可以先那出一个1作为单独的1份, 剩下的I-1再分成j-1份即可,分法有:f(I-1,j-1). 所以:f(I,j)= f(I-j,j)+ f(I-1,j-1) 边界条件:f(i,1)=1, f(i,j)=0, (I<j)
S(n-1,m-1)
bn与别的球共占一个盒子;那么可以事先将b1,b2,……bn-1这n-1个球放入m个盒子 中,然后再将球bn可以放入其中一个盒子中,方案数为 mS(n-1,m)
S(n,m)=mS(n-1,m)+S(n-1,m-1) (n>1,m1)
问题二:集合划分问题。
设S是一个包含n个元素的集合,S={b1,b2,b3,…,bn},现需要将S集合 划分为m个满足如下条件的集合S1,S2, …Sm。 Si≠∮; Si∩Sj=∮; S1∪S2∪…∪Sm=S; (1<=I ,j<=m) 则称S1,S2, …,Sm是S的一个划分。 编程:输入n和m的值,输出不同的划分方案数。 要求:输入数据有一行,第一个数是n,第二个数m。 样例: 输入:4 3 输出:6
不同的方案数用S(n,m)表示 从中取出bn,bn的放法有以下两种: S(n-1,m-1) 1、bn独自占一个集合;那么剩下的数只能放在m-1个集合中,方案数为; 2、bn与别的数共占一个集合;那么我们可以先将b1,b2,……bn-1这n-1个数划分为m个 集合,然后再将bn可以任意放入其中一个集合中,方案数为 m*S(n-1,m) 综合以上两种情况可以得出: S(n,m)=m*S(n-1,m)+S(n-1,m-1) (n>1,m1) 边界条件:S2(n,1)=1;S2(n,n)=1;S2(n,k)=0(k>n)。
问题Ⅲ:‘M’分割平面 问题二的扩展:在问题二的基础上进一步考虑:如果‘z’图形扩展为m边的 下列图形:看一下问题的解。
通过上面的分析我们很容易知道:n个上述图形可以将 平面划分的区域的递推关系: f(n)=f(n-1)+m(m(n-1)+1)-(m-1) 初始条件:f(1)=2
3、Catalan数
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]; if (temp < minF4i) then minF4i := temp; end; {*F4[i] = min(2*F4[j] + F3[i-j]);( 1=< j <=i-1) *} F4[i] :=minF4i; end; writeln(F4[n]:0:0); end; begin Init; Run; end.
F(n)=f(n-1)+2(n-1)
问题Ⅱ
问题的提出:一个‘z’形曲线可以把一个平面分割成2部分。如图所示。求n 个‘z’形曲线最多能把平面分割成多少部分。写出递推式f(n)。
【问题分析】: 根据上图容易得出:f(1)=2;f(2)=12。 假设平面上已有n-1个‘z’图形把平面分成了f(n-1)个区域。加入 第n个‘z’后,单独考虑第n个‘z’的3条边,每一条边和前面的n-1个 ‘z’共有3(n-1)个交点,即这条边被分成3(n-1)+1部分,所以增 加3(n-1)+1个区域,3条边共增加3(3(n-1)+1)个区域。但是 第n个‘z’本身有2个交点,故少了2个区域,所以实际增加了3(3 (n-1)+1)-2个区域。 由以上得出:f(n)=f(n-1)+3(3(n-1)+1)-2 即:f(n)=f(n-1)+9n-8 初始条件:f(1)=2
F(n)=
f(i) * f(n - i 1)
i 2
n 1
问题二:二叉树数目 问题描述:求n个结点能构成不同二叉数的数目。
【问题分析】: 设F(n)为n个结点组成二叉树的数目。 容易知道:f(1)=1;f(2)=2,f(3)=5
Байду номын сангаас
选定1个结点为根,左子树结点的个数为i,二叉树数目f(i)种; 右子树结点数目为n-i-1,二叉树数目f(n-i-1)种,I的可取范围[0, n-1]。所以有: F(n)=
二、递推式的求解方法: 1. 递归函数 2.用数组实现 3.求递推式的通项表达式: 3.1、迭加法 3.2、待定系数法 3.3、特征方程法 3.4、生成函数法
一、递推式的建立
1、Hanoi塔问题 问题的提出:Hanoi塔由n个大小不同的圆盘和m根木柱1,2,3…….m 组成。开始时,这n个圆盘由大到小依次套在1柱上,如图所示。
问题Ⅲ:m柱问题
j
【问题分析】: 设F(m,n)为m根柱子,n个盘子时移动的最少次数:
1、先把1柱上的前j个盘子移动到另外其中一个除m柱以外的非目标柱上,移 动次数为:f[m, j];
2、再把原1柱上剩下的n-j个盘子在m-1根柱子之间移动,最后 移动到目标柱m上,移动次数为:f[m-1, n-j]; 3、最后把非目标柱上的j个盘子移动到目标柱没柱上,移动 次数为:f[m, j]。
F(m,n) = min{2*F(m, j)+F(m-1,n-j)} (1<= j < n)
2、平面分割问题
问题Ⅰ
问题的提出:设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且 任何三条封闭曲线不相交于同一点,求这些封闭曲线把平面分割成的区域个数。
【问题分析】: 设f(n)为n条封闭曲线把平面分割成的区域个数。 由图4很容易得出:f(1)=2;f(2)=4。
递推式的建立及其求解方法
山东师大附中 赵宗昌
一、递推式的建立 1、Hanoi塔问题 问题Ⅰ: 三柱问题 问题Ⅱ:四柱问题 问题Ⅲ:m柱问题 2、平面分割问题 问题Ⅰ:封闭曲线分割平面 问题Ⅱ:‘Z’分割平面 问题Ⅲ:‘M’分割平面 3、Catalan数 问题一:凸n边形的三角形剖分 问题二:二叉树数目 问题三:出栈序列 4、第二类Stirling数 问题一:放置小球 问题二:集合划分问题 5、其他 问题一:集合取数问题 问题二:整数划分问题
问题一:凸n边形的三角形剖分 在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若 干三角形,不同的拆分数目用f(n)表之,f(n)即为Catalan数。例如五边形 有如下五种拆分方案,故f(5)=5。求对于一个任意的凸n边形相应的f(n)。
区域①是一个凸k边形,区域②是一个凸n-k+1边形,区域①的拆分方案总数是f(k) 区域②的拆分方案数为f(n-k+1),故包含△P1PkPn的n 边形的拆分方案数为 f(k)* f(n-k+1)种
通过以上步骤我们可以初步得出: f[i] = 2*f[j]+2^(i-j)-1
j可取的范围是1<=j<I,所以对于不同的j,得到的f[i]可能 是不同的,本题要求最少的移动次数
f[i] = min{2*f[j]+2^(i-j)-1},其中1<=j<I
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;
以此类推,当1柱上有n(n>2)个盘子时,我们可以利用下列步骤: 第一步:先借助3柱把1柱上面的n-1个盘子移动到2柱上,所需的移 动次数为f(n-1)。 第二步:然后再把1柱最下面的一个盘子移动到3柱上,只需要1次 盘子。 第三步:再借助1柱把2柱上的n-1个盘子移动到3上,所需的移动次 数为f(n-1)。
假设当前平面上已有的n-1条曲线将平面分割成f(n-1)个区域,现在加 入第n条封闭曲线。第n条曲线每与已有的n-1条曲线相交共有2(n-1)个 交点,也就是说第n条曲线被前n-1条曲线分割成2(n-1)段弧线,而每 一条弧线就会把原来的区域一分为二,即增加一个区域,所以共增加 2(n-1)个区域
相关主题