河内塔
有三根柱子,其中一个柱子上有从上到下从小到大若干个空心圆环,现在需要将该柱子上的所有圆环还是按照从上到下从小到大的顺序,放置到另外一根柱子上。如图所示:
每次移动的规则如下:
- 一次只能移动一个圆环;
- 有叠加时,序号小的圆环只能放在序号大的圆环上,比如4号只能放在5号上,3号可以放在4号或者5号上,2号不能放在1号上;
这里以三个圆环为例进行一个简单移动实例,比如我们将柱一上的所有圆环移动到柱二上,则整个流程如下:
最后只需要将柱一上面的1号圆环放到柱二上即可。
从整个过程上看,很多的移动是固定的。比如说从步骤a到步骤b,当1号圆环移动后,2号圆环只能移动到柱三,并且下一个步骤c中,柱二上面的1号圆环只能移动到柱三上面的2号圆环上,不然3号圆环无法移动到柱二上。所以移动之后,很多步骤都是固定的,需要注意的只是第一次移动时,上面的圆环移动到哪个柱子上。
比如现在考虑有五个圆环,那么在开始移动时,最上面的1号圆环是移动到柱二,还是移动到柱三?如果不后悔地往下移动,第一次将1号圆环移动到柱二和移动到柱三,结果是不一样的。为了避免移动步骤不反悔,需要很确定知道1号圆环是移动到柱三还是柱二。
现在反过来思考,如果我要将所有的圆环从柱一全部移动到柱二,那么,肯定会有如下所示的一个步骤:
因为目的是将所有的圆环移动到柱二,所以为了尽量少的移动圆环,最大的5号圆环肯定只用移动一次,也就是这个时候,柱一上面只有5号圆环,柱二上面没有圆环,柱三上面按照顺序排好1-4号圆环。上面这个图的步骤是肯定存在的,对吧,不然最底下的5号圆环移动不了。既然这一个步骤肯定存在,那么如何达到这个步骤呢?也就是必须要将1-4号所有圆环按照顺序都放到柱三上面。现在继续从后往前推。
如果要使得1-4的所有圆环在柱三上排列好,那么也必然会存在如下的一个步骤:
这个图中就是清空柱三,好让4号圆环放到柱三上面,而此时柱二就需要保证1-3号圆环的顺序排列。
现在来分析一下:类似于1、2、3号圆环,因为比较小,没有什么说话的权利,所以一般要移动很多步骤;而最大的5号圆环很厉害,大家都要让路,所以移动5号圆环时,柱二是需要清空的,并且4号圆环需要到柱三上面躲避。序号越大,移动的次数越少。5号圆环整体来说只移动了一次,就是从柱一到柱二;4号圆环移动了两次,就是先从柱一移动到柱三,再移动到柱二,其中一次是需要躲避5号圆环。
总结而言就是:最大的5号圆环从柱一移动到柱二时,4号圆环是需要在柱三上面的;而4号圆环从柱一移动到柱三时,次一点的3号圆环是需要在柱二的。因为4号圆环是从柱一移动过来的,所以1-3号圆环必定整齐排放在柱二上面。继续往下推,就是3号圆环当初从柱一移动到柱二时,2号圆环必定在柱三上面。那么2号圆环从柱一移动到柱三时,1号圆环就一定是在柱二上面。故可以断定,如果要将所有的圆环从柱一全部移动到柱二,最开始移动时,是将1号圆环移动到柱二,而不是柱三。
上面的分析是确定最开始移动时最小圆环的移动方向。那么如何完成所有的步骤?
分为两步,第一步是先确定较大的圆环需要放在哪个柱子上,第二步是每一次移动一个圆环,就需要将小于该圆环的所有圆环在该圆环上依次排序好。
以5个圆环为例:首先,确定较大圆环需要放到哪个柱子,5号圆环需要放在柱二,4号柱三,3号柱二,2号柱三;然后将2号圆环放到柱三,并把序号小于2的排好序放在2号圆环上;接着将3号放到柱二,并把序号小于3的排好序放在3号上;接着将4号放到柱三,并把序号小于4的圆环按顺序放到4号上;接着将5号放到柱二,并将序号小于5的按顺序放到5号上,完成。在第二部分把小序号圆环按顺序拍好时就需要用到上文中的分析结果。
圆环增加时,步骤基本都是相类似的,只需要知道哪个圆环对应哪个柱子,如何移动圆环就可以。
移动的最少步骤数 f 和圆环个数 n 的关系是:f(n) = 2^n - 1
希望对你有帮助。
相关阅读
现在我们正在早期主要是建立音图映射的阶段,罗塞塔是一个很好的英语材料也是我们从早期到提高期的中间阶段,让我们从以前的儿童词典
本文来自 网易云社区 。为大家分享一篇网易教育产品部韩坤芳关于金字塔原理的文章。希望一起交流探讨,共同进步提升。工作的时候
宝塔搭建项目时出现No input file specified现象
把之前码云上面的项目打包下载下来准备搭建到本地上重新熟悉熟悉,但是将代码解压到正确的文件夹下,并使用相关域名出现No input
作为用户金字塔模型的提出者类类,对其公众号文章中的用户运营的思路进行整理归纳,可作为社区运营的指导。并以知乎为案例,对其用户金
本网站是一个开源的学术论文翻译网站,论文链接如下: http://tongtianta.site/ 一般可以先查看自己的论文是否在网站上已有翻译,