THE TOWER OF HANOI
2016-05-20 21:47
316 查看
2016.5.20
从 a 柱移动 n-1 个盘子到 b 柱
将第 n 个盘子从 a 移动到 c 柱
将 b 柱的 n-1 个盘子移动到 c 柱
由上面的假设我们可以得到公式:Tn <= 2 * Tn-1 +1
下面再证明:Tn = 2 * Tn-1 +1
由于 Tn 是最小的移动步数,而我们要将 a 柱上第 n 个盘子移动到 c 柱上面时,必须将前面的 n-1 个盘子移动到 b 柱上(最少移动步数为 Tn-1),那么我们上面的公式就得以证明了。
再由 T0 = 0,T1 = 0 和 Tn 的公式可以推出:Tn=2n−1T_n = 2^n -1
问题描述:
将一根柱子上的盘子(盘子从下往上是由大到小的顺序)移动到另一根柱子上,总共有三跟柱子。移动过程中每次只能移动一个盘子,而且每根柱子上面的盘子都必须小盘子在大盘子上面,求移动过程中移动的最小次数和移动方案。解决方案
假设移动 n 个盘子到另一个柱子至少需要 Tn 次移动步数,那么我们采取移动方案为:从 a 柱移动 n-1 个盘子到 b 柱
将第 n 个盘子从 a 移动到 c 柱
将 b 柱的 n-1 个盘子移动到 c 柱
由上面的假设我们可以得到公式:Tn <= 2 * Tn-1 +1
下面再证明:Tn = 2 * Tn-1 +1
由于 Tn 是最小的移动步数,而我们要将 a 柱上第 n 个盘子移动到 c 柱上面时,必须将前面的 n-1 个盘子移动到 b 柱上(最少移动步数为 Tn-1),那么我们上面的公式就得以证明了。
再由 T0 = 0,T1 = 0 和 Tn 的公式可以推出:Tn=2n−1T_n = 2^n -1
代码:
后面在补,不着急。相关文章推荐
- 在一个数组中找差值最大数对,输出最大差值
- Swift-构造过程(Initialization)(十二)
- nyoj 715相邻的计数(dp)
- char *a和 char a[]
- MySQL入门——修改数据表2:往指定的表中添加多列数据(字段)
- linux awk命令详解
- poj 2356 Find a multiple(鸽巢原理)
- HDU3727 Jewel(主席树)
- 习题 8-18 UVA - 1619 Feel Good 感觉不错 (容斥定理)
- 漂亮的servlet-2,后台记录
- ubuntu16.04为firefox添加pepperflash插件
- ThinkPHP表单操作(未加验证)
- sql盲注及其相关方法
- 构建高性能 ASP.NET应用的12点建
- 芯片新知识
- Java 设计模式 -- 职责链模式
- tomcat 设置CATALINA_PID, shutdown失败后,会kill pid
- Android之Bundle类
- TCP/IP中MSL详解
- 哈理工OJ 1029 Function Run Fun(记忆思想)