如何理解汉诺塔

视频观察

汉诺塔永远只有三步:
1184092-20180726154645112-1537042307.png

1184092-20180726154649903-1238210305.png

1184092-20180726154657227-1896901347.png

1184092-20180726154701099-757020418.png
1184092-20180726154704443-1633074215.png
图中是最常见的五层(五珠)汉诺塔,其实几层都是一样,这里设为n,冰箱门永远是汉诺塔上面的m=n-1层。那么问题来了,怎样把冰箱门打开?即:怎样把图中的1至4号串珠从A柱移动到B柱?(三根柱子从左至右依次为A、B、C,五颗串珠从小到大依次为1到5)这又变成了一道m层汉诺塔的问题(m=n-1)。你可以继续用把大象装冰箱分几步的思路去考虑m层汉诺塔的解法。推导下去最终就得到了一个两层汉诺塔该怎么移动的问题,

关于汉诺塔的公式:1184092-20180726155618971-1973357642.png
可以这样理解:1184092-20180726155638615-1814130311.png
其中1184092-20180726155655878-131741157.png代表把冰箱门打开又合上,即完成两次n-1层汉诺塔的过程,
+1 代表移动汉诺塔最下面一层,即把大象装冰箱的过程。

冰箱门打开或者合上需要的步数都是一样的,
都是完成一个m=n-1层汉诺塔的过程。

----------------- 为什么 F(n) = 2 F(n-1) + 1,F(1) = 1 是最优的 -----------------
1184092-20180726160210999-443015130.png

其实用数学归纳法就行了。最基本的情况,即n为1,就不用说了。
现在F(n-1)确实是把n-1个盘子集体挪动的最小步数,我们要证明F(n)是把n个盘子集体挪动的最小步数。
1)在把n个盘子从A移动到C的过程中,必然存在一步,是把最大的盘子从A拿出来。要想把最大的盘子从A移动到别的某个柱子上(B或C),就必须保证剩下的n-1个盘子不能碍事,得好好堆在剩下那个柱子(C或B)上。要保证n-1个盘子都在剩下那个柱子上,至少得付出F(n-1)次移动。


2)在把n个盘子从A移动到C的过程中,必然存在一步,是最大的盘子被放到了C上,而且此后再也没动过。在这步实行之前,最大的盘子要么在A要么在B上,而相应地别的n-1个盘子要么在B要么在A上。在这步实施之后,我们只要花至少F(n-1)的步数把n-1个盘子从要么B要么A挪动到C上就行了。这些步数必然和1)中的步数不重叠,因为这时候最大盘子在C上,而1)中最大盘子在A上。


3)最大的盘子至少被挪动了一次。而且这一次肯定没被算在1)或2)的“至少F(n-1)步”中,因为后者只挪动较小的那n-1个
盘子。


把1),2),3)加起来,就是至少F(n-1) + F(n-1) + 1步。不能再少了。

转载于:https://www.cnblogs.com/Roni-i/p/9372200.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值