汉诺塔 THE TOWER OF HANOI

本文介绍了汉诺塔问题的历史、规则,并通过数学分析揭示了解决该问题的递归公式Tn = 2^n - 1。此外,还提供了Java代码实现来验证解法,展示了64个盘子的移动需要约584942417355年才能完成。
摘要由CSDN通过智能技术生成

THE TOWER OF HANOI

问题描述

汉诺塔(也称河内塔)是有法国数学家爱德华·卢卡斯于1883年发明的一道智力题。它源于印度的一个古老传说:大梵天创造世界的时候做了三根钻石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令一组牧师把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。据说牧师们夜以继日地工作,当他们完成任务时,那座塔就将坍塌,世界也将毁灭。

汉诺塔问题是这样规定的:如下图,一个由8个圆盘组成的塔,这些圆盘从下向上按照大小递减的方式套在一根柱子上,我们的目的是要将这根柱子上的所有圆盘移动到另一根柱子上,每次只能移动一个圆盘,且在移动过程中较大的圆盘不能放置在较小的圆盘上面。

在这里插入图片描述

已经证明这个智力题有解,现在问题来了:我们能做到的最好的解法是什么?也就是说,要完成这项任务至少移动多少次才是必须且足够的?

解决这样的问题的最好方法是对它稍加推广,印度传说中的塔有64个圆盘,汉诺塔问题中的塔有8个圆盘,我们将这个问题推广为有n个圆盘,这样我们简化一下这个问题。如下图,n个圆盘套在A柱上,按照与汉诺塔相同的规则移动到C柱上,至少需要移动多少次。

在这里插入图片描述

数学分析

我们假设Tn 是根据规则将n个圆盘从一根柱子移动到另一根柱子所需要的最少移动次数。那么T0显然是0,T1 = 1,T2 = 3。

现在我们改变一下视角,来考虑大的情形:怎样才能移动一个大的塔呢?将n个圆盘从A柱移动到C柱可以分三步来完成,首先将A柱上面的n-1个圆盘从A柱移动到B柱上,这一步需要移动Tn-1次。然后将A柱上剩下的那个最大的盘移动到C柱上,这一步需要移动1次。最后将B柱上的n-1个盘移动到C柱上,这一步也需要移动Tn-1次。所以n(n>0)个圆盘移动2Tn-1+1次是足够了的,但是我们并没有证明2Tn-1+1是最少的移动次数,因此:
T n ≤ 2 T n − 1 + 1 , n > 0 T_n \leq 2T_{n-1} + 1, n > 0 Tn2Tn1+1,n>0
那么还有更好的办法吗?实际上没有,因为我们迟早必须移动最大的那个圆盘。当我们这样做的时候,那n-1个圆盘必须已经在另外某根柱子上,而这一步至少需要移动Tn-1次,这样我们才能把最大的那个盘移动到第三根柱子上(大盘不能放在小盘上面),移动完最大的盘之后,我们必须把n-1个小的圆盘(此时它们全部处于同一根柱子上)移到最大的盘的上面,这也至少需要移动Tn-1次,因此:
T n ≥ 2 T n − 1 + 1 , n > 0 T_n \geq 2T_{n-1} + 1,n > 0 Tn2Tn1+1,n>

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值