带着汉诺塔问题强势回归!【关于汉诺塔问题的那些事】

家人们,快一年没更新的我回来更新啦!!!

(差点把号忘了)

已经准备小升初了!!!

我上次比赛,有一道题是关于汉诺塔的,一下就懵了,没玩过也没学过啊

今天研究汉诺塔,上网查了查,弄懂了以后发现特别简单

兴奋,突然想起落灰的CSDN(bushi),跑来更新一篇文章啦


目录

啥是汉诺塔问题?

视频讲解

汉诺塔解法——递归

汉诺塔解法——二进制

 参考文献


 啥是汉诺塔问题?

​ 简单来讲,汉诺塔问题是这样的:

给定三根柱子,记为 A,B,C,其中 A 柱子上有 n 个盘子,从上到下编号为 0 到 n−1 ,且上面的盘子一定比下面的盘子小。问:将 A 柱上的盘子经由 B 柱移动到 C 柱最少需要多少次? 

(这段文字来源于知乎,侵删;这篇文章讲的很不错,有参考,会将所有参考文献放在文末~)

这里放一张百度上的动图给大家看一下:

动图

图源百度,侵删 


视频讲解

这里先给大家附一个bilibili上的视频,讲的非常好,本文灵感来自此视频

用二进制来解汉诺塔问题_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rs411Y76X/大家有精力可以看一下这个视频,本文讲的没有视频好哦


汉诺塔解法——递归

汉诺塔问题其实并不复杂,可以被看成【把大象装进冰箱需要几步】

把大象装进冰箱,第一步打开冰箱门,第二步装大象,第三步关上冰箱门

解决汉诺塔问题是一样的道理

假设现在只有两个圆盘,要想把这两个圆盘从A柱移动到C柱上,需要把0号圆盘先移动到B柱,把1号圆盘移动到C柱,再把0号圆盘移动到C柱1号圆盘上方

先移开0号圆盘就相当于打开冰箱门,移动1号圆盘相当于装大象,再把0号圆盘移到1号圆盘上面相当于关上冰箱门

这样看是不是简单一些了

如果圆盘更多,怎么办?

假设有3个圆盘,分别编号为0,1,2

附上我自己画的丑陋图片(bushi

首先,2号要想动,就得先把1号和0号移走

现在把1号和0号看成一个整体移走,就相当于打开冰箱门

现在再看这个整体,1号和0号移走,就相当于我前面写的移走两个圆盘的方法

这是什么思想?递归!!!

更多的圆盘也是一样的

n号要想移走,就得把0~n-1这个塔移走

移走0~n-1,n-1还得移走,还要把0~n-1-1移走

以此类推……


汉诺塔解法——二进制

二进制是什么?逢二进一!

如果我们用二进制来数数,就会是这样的:

000, 001, 010, 011, 100, 101, 110, 111……

那么用二进制怎么解汉诺塔问题呢?

首先,仍然假设有三个圆盘,我们把每个圆盘看成二进制中的一个数位,然后用二进制数数

000是初始状态;001,移动0号圆盘;010,移动1号圆盘;011,移动0号圆盘;100,移动2号圆盘;101,移动0号圆盘;110,移动1号圆盘;111,移动0号圆盘……

然后,你就会发现,问题解决了!

不信的话,你可以自己去尝试一下,真的是这样的!

参考的知乎文章上面是这样解释的(如果看不懂就去看视频!!!):

 

 二进制的方法不止可以解决汉诺塔,还可以解决其它很多问题哦~


 参考文献

 侵删~关于汉诺塔问题 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/392523306

用二进制来解汉诺塔问题_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rs411Y76X/?vd_source=1309128a129998a43f3c51d87439b6dc

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值