【算法】【河内塔问题】

问题描述:给定一个由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

 

转载于:https://www.cnblogs.com/dreamer123/p/5679258.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值