递推关系与母函数法.docVIP

  • 51
  • 0
  • 约2.57千字
  • 约 10页
  • 2017-10-03 发布于重庆
  • 举报
递推关系与母函数法

递推关系与母函数法 1.2 递推关系 Hanoi塔问题:这是组合数学中的著名问题。n个圆盘依其半径大小,从下而上套在柱A上,如图1.1所示。每次只允许取一个转移到柱B或柱C上,而且不允许大盘放在小盘上方。若要求把柱A上的n个盘转移到柱C上,请设计一种方法,并估计要移动几个盘次,现在只有A,B,C三根柱子可供使用。 设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则1:每次只能移动1个圆盘; 规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则3:在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。 图1.1 Hanoi塔是个典型的问题,第一步要设计算法,进而估计它的复杂性,即估计工作量。 这一问题有典型的意义,第一步先解决算法问题,即如何完成n个盘的搬动,进一步还要对算法作出复杂性分析,即对要作多少盘次的搬动进行估计。 算法设计: 时,第一步先把最上面一个圆盘套在柱B上;第二步把第二个圆盘转移到柱C上;最后再把柱B上的一个圆盘转移到柱C上,到此转移完毕。 假定个盘子的转移算法已经确定。 对于一般n个圆盘的问题,先把上面的个圆盘转称到柱B上,再把最后一上圆盘转移到柱C上,然后把柱B上的个圆盘转移到柱C上,转移完毕。 上述的算法是递归的连用。时已给出了算法;时,第一步便利用算法把上面两个圆盘移到柱B上,第二步再把第三个圆盘转移到柱C上;最后把柱B上的两个圆盘转移到柱C上,以此类推。图1.1形象地给出的转移过程。 void hanoi(int n, int a, int b, int c) { if (n 0) { hanoi(n-1, a, c, b); move(a,b); hanoi(n-1, c, b, a); } } 算法分析:令表示n个圆盘所需要的转移盘次。根据算法先把前面个圆盘转移到柱B上;然后把第n个圆盘转到柱C上;最后再一次将柱B上的个圆盘转到柱C上。 时,算法是对的,因此,时算法是对的。以此类推。于是有 , (1.8) 令 根据有 即对上面等式分别乘以,作形式化的运算,相加等于 整理得 如何从母函数求得序列,,…?下面提供一种化为部分分数的方法: 令 所以 即 因 所以 例1.2 求n位十进制数中出现偶数个5的数的个数。 先从分析n位十进制数出现偶数5的数的结构入手。是位十进制数,若已含有偶数个5,则取5以外的0,1,2,3,4,6,7,8,9,九个数中的一个,若中只有奇数个5,则取,使成为出现偶数个5的十进制数。 解法1: 令 位十进制数中出现偶数个5的数的个数。 位十进制数中出现奇数个5的数的个数。 故有 (1.9) (1.9)式中的表达了含有偶数个5的n位十进制数的两个组成部分。是由含有偶数个5的位十进制数,(令取5以外的9个数,0,1,2,3,4,6,7,8,9中的一个数)构成的。项表示当是含有奇数个5年位十进制数(令),得到是含偶数个5的n位十进制数。 也有类似的解释。 (1.9)式是关于序列和的联立关系。 设序列的母函数为,序列的母函数为,即 或 所以 又 故得到关于母函数和的联立方程组: 所以 解法2 位的十进制数共9×10n-2个,例如2位的十进制数为90个,3位的十进制数为900个。从中去掉含有偶数个5的数,余下的便是位中含有奇数个5的数,故有 所以 令 所以 所以 所以 例1.3 从n个元素中取r个进行允许重复的组合。假定允许重复的组合数用表示,其结果可能有以下两种情况。 (a)不出现某特定元素(设为),这样的组合数为,相当于排除后从中取r个作允许重复的组合。 (b)至少出现一个,其组合数为,相当于从中取个作允许重复的组合,然后再加上一个,得到从n个元素中取r个作允许重复的组合。 依据加法法则可得 (1.10) 因,,故令。 递推关系式(1.10)带有两个参数n和r。 (1.11) (1.11)式是关于的递推关系,但系数()不是常数,不过 所以 由二项式定理 可得 1.3 Fibonacci数列 1.3.1 Fibonacci数列是典型的递推关系 Fibonacci数列是递推关系的又一典型问题,数列的本身有着许多应用。 问题:有雌雄一对象子,假定过两个月便可繁殖雌雄各一的一对小兔。问过n个月后共有

文档评论(0)

1亿VIP精品文档

相关文档