文章目录
- 前言
- 最简模型
- 规律分析
- 分析总结
- 结论解读
- 篇尾
前言
大梵天创造世界的时候做了三个金刚石柱子,在一根柱子上从上到下按照大小顺序摞着64骗黄金盘子,大梵天命令婆罗门把圆盘开始按大小顺序重新摆放在另外一个柱子上。在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。64个圆盘移动完毕之日,就是世界毁灭之时。
最简模型
接下来开始分析64个圆盘移动到另外一个柱子上一共需要多长时间,其实这个问题非常的简单,在移动64个盘子之前我们先来尝试一下移动两个盘子
第一步 A to C #代表把A柱子上的移动到B主子上,下边将不再解释
第二步 A to B
第三步 B to C
规律分析
只需要三步就可以把A柱子上的盘子按大小顺序移到C柱子上,只要看懂了这三步那么恭喜你,你已经成功掌握了汉罗塔的秘密。不相信?请继续往下看
现在如果将两个圆盘换成三个步骤该是如何呢?接下来请继续看我分析
第一步 我们只会移动两个圆盘的问题,所以我们第一步永远是将两个圆盘移动到B柱子上
A to C
A to B
B to C
第二步 两个圆盘移动后第二步永远就是加入第三个圆盘,将它移动到第三个柱子上去
A to C
第三步 第二步完成后发现问题又变成了两个圆盘的问题,不过这里只是换了一下位置而已
B to A
B to C
A to C
所用步数 2*3+1
分析总结
移动结束,这里看到不管几个圆盘解决的方法永远只有三步。为了更多的人可以理解,这里我们分两种方式表达(理解一种即可)
从宏观到微观(从大到小)
第一步,除了下边最大的盘子外的所有盘子看成一个盘子,第一步就是将这一个盘子移动到中间柱子上
第二步,将最大的盘子移动到第三个柱子上
第三步,将中间柱子上的盘子移动到第三个柱子上
从微观到宏观(从小到大)
第一步 不管有多少盘子我们第一步永远是解决最上边两个小盘子移动到中间柱子上
第二步 加入下一个盘子,并移动到空柱子上
第三步 将中间柱子上所有盘子看成一个盘子移动到最右边的盘子(相当于重复步骤一,不过只是位置不同罢了)并将右边盘子所有盘子看成一个盘子
结论解读
解读:
能把两个盘子看成一个盘子说明两个盘子移动已经掌握,第三步完成后就已经能解决三个盘子问题
此时三个盘子问题的所有步骤变成【四个盘子的第一步】
【四个盘子第二步】就是将第四个盘子移动到空柱子上
【四个盘子第三步】就是位置换位的【四个盘子的第一步】,完成后说明已经可以解决四个盘子问题
此时四个盘子的所有问题变成【五个盘子问题的第一步】
【五个盘子第二步】就是将第五个盘子移动到空柱子上
【五个盘子第三步】就是位置换位的【五个盘子的第一步】,完成后说明已经可以解决五个盘子问题
、、、、、、
、、、、、、
、、、、、、,完成后说明你已经可以解决n个盘子的问题
最终步骤数 h(x)= 2 h(n-1) + 1 === 2n次方-1
现在回到最开始的问题,婆罗门在移动64个盘子需要用时多少呢?
假设移动一个盘子需要一秒那么最终需要的时间是5800亿年
篇尾
算法的目的是为了让程序提交效率,那么你能否用程序来完成这个函数呢?有兴趣的可以在下方评论交流