《具体数学》习题试解1.10~1.12

1.10 设Q(n)是把n个盘从A移到B所需的最小移动次数,这次的限制条件是所有移动必须是顺时针方向,即只能从A到B,或从B到另一杆C,或从另一杆C到A,设R(n)是在同样的限制下从B移到A所需的最小次数,证明

当n = 0时,Q(n) = 0
当n > 0时,Q(n) = 2 * R(n-1) + 1
当n = 0时, R(n) = 0
当n > 0时,R(n) = Q(n) + Q(n-1) + 1

解 答:Q(n)的比较容易理解,把n个盘从A移到B,只需把上面n-1个盘从A移到C(需R(n-1)步),把大盘从A移到B(1步),把n-1个盘从C移 到B(需R(n-1)步),因此Q(n) <= 2R(n-1) + 1。关于下界的证明,我觉得似乎是和R(n)的实现有关,反正另外一个方案Q(n) = 2R(n),是肯定要比2R(n-1)+1要大的,呵呵……就当是证出来了……

R(n)开始的时候我只能想到R(n)<=2Q(n),看了答案才知道R(n)可以是R(n-1)+1+Q(n-1)+1+R(n-1)(意思很容易明白),又因为上面Q(n)=2R(n-1)+1,所以可得R(n)=Q(n)+Q(n-1)+1

1.11 一个加倍的hanoi塔包含n种不同大小的2n个盘子,每种2个,同样要求不能把大盘放在小盘上
a.若相同大小的盘没有区别,最小移动次数是多少?
b.若相同大小的盘有区别,要求最后仍然形成原来的次序,最小移动次数是多少?(提示:这个问题比较难,是一个Bonus Problem)

解答:a. 这一问还算简单啦,因为不加区分,所以把最下面两个相等大小的盘子移过去只需要两次,递归移动所有的盘子即可。

F(0) = 0
F(n) = 2 * F(n-1) + 2
写成闭形式:F(n) = 2^(n+1)-2;

b.首先看a中的移动会产生什么后果:所有相同大小的盘子序号全部都凡了。

现在要移动2n个盘子,且最后的序号要与开始相同,可以这样:

先将2n-2个按照a中的方式移动到c塔(序号反了),然后花一次移动把最大的盘子的第1个移动到b塔,然后再按照a中的方式将c塔上的2n-2个移动到b塔上(这样序号再反了一次,恢复了原样).

然后再把a塔剩余的一个最大的盘子移动到c塔上,然后再把b塔上面的2n-2个盘子移动到a塔(序号反了),最下面的移动到c塔上,再把a塔的2n-2个盘子移动到c塔上,这样序号就又恢复过来了。

于是G(n)=4*F(n-1)+3

1.12 进一步推广1.11(a)的问题,如果有m种不同的盘,且恰好有nk个盘的大小为k。如果相等大小的盘不加区别,求最小移动次数A(n1,n2...nm)。

解答:看着挺吓人,实际上是一样的:

A(0) = 0
A(k) = 2 * A(k-1) + nk (k>0)

闭形式么……观察这个递归式有什么特点……展开后……

A(k) = 2(k-1)n1 + 2(k-2)n2 + ... + 2nk-1 + nk

哈哈,实际上是把n1n2...nm看成二进制后的值(n1n2...nm)2,有意思……

posted on 2007-10-06 23:30  woodfish  阅读(970)  评论(3编辑  收藏  举报

导航