汉诺塔问题
来源:互联网 发布:剑三优化补丁 编辑:程序博客网 时间:2024/06/06 10:47
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。--摘自百度百科。
那么现在的问题就是有n片圆盘,问你从第一根柱子搬到第三根柱子需要搬多少次?
答案是:需要搬2^n-1次。
证:首先,为了方便描述,将三根柱子分别编号为A,B,C,A柱子上的盘子号从上往下依次编号为1,2,3,4,,,n.现在的任务就是要把A柱子上的n个盘子搬到C柱子上去,而且在搬的过程中,不能出现有大盘子在小盘子上面的情况。以f(n)表示把A柱子上的n个盘子搬到C柱子上去需要的次数。
下面用数学归纳法证明:
当n=1时:显然此时f(1)=1;
当n=2时:先把A柱子上的1号移到B柱子上,需要一步,然后把A柱子上的2号移到C柱子上,需要一步,最后把B柱子上的1号移到C柱子上。需要一步,共三步,总得来说,可以叙述成,A柱子上的两个盘子借助B柱移动到C柱子上需要3步,故此时有f(2)=3;
当n=3时:先把A柱子上的1,2号借助C柱移到B柱子,需要f(2)步,然后把A柱子上的3号移动到C柱子上,需要1步,最后把B柱子上的1,2,号借助A柱移动到C柱子上,共需f(2)+1+f(2),即f(3)=2*f(2)+1
当n>4时:先把A柱子上的1,2,,,,n-1号借助C柱移到B柱子,需要f(n-1)步,然后把A柱子上的n号移动到C柱子上,需要1步,最后把B柱子上的1,2,,,,n-1号借助A柱移动到C柱子上,共需f(n-1)+1+f(n-1),即f(n)=2*f(n-1)+1
综上:有f(n)=2*f(n-1)+1,n>=1,其中f(1)=1;
接下来求f(n)
由f(n)=2*f(n-1)+1得f(n)+1=2(f(n)+1),f(n)+1是以f(1)+1为首项,2为公比的等比数列
故由等比数列通项公式得f(n)+1=(f(1)+1)*2^(n-1)=(1+1)*2^(n-1)=2^n
故f(n)=2^n-1
证毕!
- 汉诺塔问题 背包问题
- 递归问题,汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题.
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- Objective C中block类型使用注意
- VisualStudio使用vstheme格式主题文件
- ClipChildren属性初识
- 17周(引用做形参 )
- tar,bz2,bzip等格式解压缩命令汇总
- 汉诺塔问题
- JavaWeb错误处理集锦
- 小米与格力的10亿豪赌!
- odoo列表视图下栏位宽度显示问题
- 侵入式和非侵入式的区别
- LaTeX新人教程,30分钟从完全陌生到基本入门
- const指针
- 经典算法学习:排序之冒泡排序
- .profile与 .bashrc