【算法】【河内塔问题】

问题描述:给定一个由8个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根木桩中的一根上,将整个塔移动在另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小圆盘上。

思路分析:先研究小的情形:当圆盘数n=1时,显然移动次数T[1]=1;n=2时,移动次数T[2]=3;若想将n个圆盘移动到另一根桩柱上,则可以先移动前n-1个到中间桩柱上,再移动最大的圆盘至目标桩柱,最后将前n-1个圆盘移动到目标桩柱上:T[n]<=2T[n-1]+1 ---(a);

由于移动最大圆盘的时候,前n-1个圆盘必须在某根桩柱上,这至少需要T[n-1]次移动,移动最大圆盘之后,必须把前n-1个圆盘移动到目标桩柱上:T[n]>=2T[n-1]+1 ---(b)   

由(a)、(b)两式得:T[0]=0,T[n]=2T[n-1]+1

问题求解:(1)观察可知T[n]=2^n-1 n>=0;证明:n=0时 T[n]=2^0-1=0  不妨设T[k]=2^k-1 那么对于k+1 T[k+1]=2T[k]+1=2(2^k-1)+1=2^(k+1)+1 故得证

(2)令U[n]=T[n]+1 则U[n]=2U[n-1] U[0]=1 故U[n]=2^n T[n]=2^n-1

 

posted @ 2016-07-17 20:06  dreamer123  阅读(658)  评论(0编辑  收藏  举报