← Back to Terminal

汉诺塔与轮回

李宸宇
汉诺塔与轮回 学过算法的朋友在学递归的时候肯定听过汉诺塔的例子,其中有挺多神秘之处。为什么移动最底下的盘子之前和之后的步骤看起来是完全镜像的?为什么会有僧人将所有盘子都移动到另外一根柱子上的时候世界就会毁灭的设定? 回答第一个问题。 因为这个问题的约束是小盘子不能叠在大盘子上,所以搬动最大的盘子是最难的一步。同时,最大的那个盘子最后才能动,所以在此之前可以把它忽略。整个问题就变成了怎么移动上面的N-1个盘子。这样的推导逻辑可以每往上爬一层来一次,一直持续到最上层的那一个,于是构成了一种递归。也就是说,我们在把一个层层嵌套的大问题不停得分解成小问题,解决大问题之前必须解决里面的小问题。汉诺塔的约束导致必须要用层层拆解的方式解决,所以毁灭是必须的。 而我们在每一个N-1子问题里搬动最大盘子的时候,目的地的柱子一定得是空的,因为最大的盘子一定得放在最下面一层。同时,搬动最大盘子之后,它原来所在的柱子也应该是空的(与N-1无关的大盘子被忽略了)。所以其余的盘子一定在第三根柱子上,又由于大盘子不能放在小盘子上的约束条件,这跟柱子上一定是一个完整的塔。所以我们发现每一个N-1小塔的重建都是为了移动第N个大盘子所必须的(最优的)。 我们最后看到的是每一个N-1个大盘子被移动之前,上面的小塔需要被毁灭再重建一次。在每一次上层小塔的毁灭重建的过程中,更加上层的更小的塔需要分别在毁灭、重建中被毁灭、重建。整个结构像是在时间轴上分叉的树,从最大盘子的搬动开始作为树根,一支分叉成上层小塔的毁灭,另一支分叉成重建。一直分到最小盘子的移动。 第二个问题其实是关于汉诺塔所表示的世界观。 汉诺塔是这样一个世界。在最大的世界毁灭重生之前,每一个小世界都需要毁灭重生一次。想要解开最大的因果,小的因果需要成倍地经历解开、结上的轮回。缘起缘空循环往复,直到最大的缘起缘空,整个因果结构终止。