递归之河内塔,汉诺塔问题(婆罗贺摩塔:Tower of Brahma)

来源:互联网 发布:网络外教一对一价格 编辑:程序博客网 时间:2024/05/17 23:26

THE TOWER OF HANOL :河内塔问题

   河内塔问题是由法国数学家爱德华·卢卡斯于1883年发明的,给定一个由8个圆组成的塔,这些圆盘按照从大到小递减的方式套在三根桩柱中的一根上。

                                                               

我们的目的是要将整个塔移动到另一个柱子上,每次只能移动一个圆盘,并且较大的圆盘在移动过程中不能放在较小的圆盘上面。这位伟大的数学家还赋予一个罗曼蒂克传说,即婆罗贺摩塔的传说,具体就不再一一讲述这个故事,若有人想知道可以去自己百度,下面我们开始讨论这个汉诺塔问题:


我们可以规定 T[i] 表示当有i个圆盘,完成时移动的最少次数是T[i];

显而易见:

                       T[0]=0;

                       T[1]=1;

                       T[2]=3;

                       T[3]=7;   当i=3的时候最好不要心算了,可以模拟一下的

                       ........

首先的我们可以找规律得出:T[i+1]=2*T[i]+1;(只是对于i(0...3)成立),所以我们需要证明一般式,做出有力的推论,高中时就已经学过,证明某个命题对所有满足n>=n0的整数n都成立的一般方法就是数学归纳法,可是这里我们要怎么去归纳呢?很简单,我们只需要对已经推出来的公式做一下变形,即:

                      以为:T[0]=0;

                      所以:T[0]+1=1;

                      因为:T[i+1]=2*T[i]+1;

                      所以:T[i+1]+1=2*T[i]+2   ->  T[i+1]+1 = 2* (T[i]+1) 

                   是不是很熟悉呢?没错就是我们常见的等比数列了,那么我们再回归到原来的序列可以表示为

                   T[0]=2^0-1=0;

                   T[1]=2^1-1=1;

                   T[2]=2^2-1=3;

                   T[3]=2^3-1=7;

                    ......

                   T[n]=2^n-1;

             然后就开始一波久违的数学归纳吧:

          我们先假设T[n-1]=2^(n-1)-1成立;   则T[n]  =  2*T[n-1]+1  =  2*(2^(n-1)-1)+1  =  2^n-1

 所以我们的推论是正确的,所以当有n个圆盘时,那么最少的移动次数可以直接套这个公式,2^n-1;



我曾经在一本书上看到对于,那个古老的传说:婆罗贺摩塔问题,当n=64的时候,有2^64-1次移动(大约1.8x10^19)

如果按照每微秒移动一次这个不可能实现的速度,也需要5000多个世纪来完成,那么5000个世纪以后人类是否还存在呢......

原创粉丝点击