可视化讲解:什么是汉诺塔问题?

431 阅读3分钟

前言

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

概念介绍

1. 汉诺塔问题起源

  • 汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。
  • 上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘。
  • 有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。
  • 当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在

2.什么是汉诺塔问题?

  • 一句话总结就是:将下图中A柱子上的圆盘依靠一定的规则(该规则在“汉诺塔问题起源”部分已说明)原封不动的移动到C柱子上 在这里插入图片描述

原理讲解

  • 下面我们以A柱子上圆盘数N=4为例讲解汉诺塔实现的原理
  • 在初始状态下A,B,C三根柱子上圆盘如下图所示 在这里插入图片描述
  1. 第一步,我们将A柱最上面3个盘子当作“一个整体”借助(怎么借助呢?)C柱子移动到B柱子上,此时效果如下图所示 在这里插入图片描述
  2. 第二步,我们将A柱最下面一个盘子移动到 C柱子上,此时效果如下图所示 在这里插入图片描述
  3. 第三步,我们将B柱3个盘子作为“一个整体”借助(同理,怎么借助呢?)A柱子移动到C柱子上,此时效果如下图所示 在这里插入图片描述
  4. 经过上面3步操作之后,4层汉诺塔问题就减少为3层(第一步被当作一个整体的3个盘子)汉诺塔问题了。下面我们就来处理3层汉诺塔问题
  5. 第四步,我们将A柱最上面2个盘子当作“一个整体”借助C柱子移动到B柱子上,此时效果如下图所示 在这里插入图片描述
  6. 第五步,我们将A柱最下面一个盘子移动到 C柱子上,此时效果如下图所示 在这里插入图片描述
  7. 第六步,我们将B柱2个盘子作为“一个整体”借助(同理,怎么借助呢?)A柱子移动到C柱子上,此时效果如下图所示 在这里插入图片描述
  8. 经过上面3步操作之后,3层汉诺塔问题就减少为2层(第一步被当作一个整体的2个盘子)汉诺塔问题了。下面我们就来处理2层汉诺塔问题
  9. 2层汉诺塔的问题相比聪明的你很容易就自己搞定了。在此,我就不赘叙了。
  10. 所以,通过上面的步骤,我们很容易发现实现汉诺塔算法可以简单分为三个步骤:
    • 把n-1个盘子由A借助C移到B;
    • 把第n个盘子由A移到C;
    • 把n-1个盘子由B借助A移到C;

效果展示

在这里插入图片描述

更多算法学习请关注我的公众号

在这里插入图片描述

说明

  • 在公众号中回复“算法源码”即可获取十大经典算法源码
  • 在公众号中回复“算法书籍”即可获取经典入门算法书籍
  • 在公众号中回复“数据结构”即可获取数据结构相关源码