博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6-4汉诺塔问题
阅读量:6291 次
发布时间:2019-06-22

本文共 789 字,大约阅读时间需要 2 分钟。

将所有盘子从木桩1移到木桩3,移动规则如下:

1、每次只能移动一个盘子,而且只能从最上面的盘子搬动。

2、任何盘子可以搬到任何一根木桩。

3、必须维持盘子的大小是由上而下依次递增。

解决思路: 数学归纳法,即盘子n=1,n=2,n=3情况下的盘运过程。

从中你可以总结出一个数学公式或通用搬运过程。

使用数学公式,你会直接得出次数。这和老老实实去搬相比得出搬运次数。是一个捷径。最后结果是殊路同归,但缺少愚公移山的过程。

所以,通用搬运过程,可以展示具体的搬运过程,可以从过程得出结果。这就是算法,也就是计算机科学与数学的区别。

通用搬运过程:

Step1.将上面n-1个盘子从木桩1搬移到木桩2.

Step2.将盘子从木桩1搬移到木桩3.
Step3将木桩2的n-1个盘子搬移到木桩3.  

是不是有点如何把大象塞进冰箱的味道呢?

代码是不是有点迷惑呢?

第15行是第一步骤,也就是将上面n-1个盘子从木桩1搬移到木桩2.

hanoi(dishs - 1,peg1,peg3,peg2);/* 第一步骤 */

第17行是第三步骤,也就是将木桩2的n-1个盘子搬移到木桩3.

hanoi(dishs - 1,peg2,peg1,peg3);/* 第三步骤 */

这样不去理解代码,而去记住代码,是不是方便些?

如果汉诺塔的问题变异了:  

如果再变异成有n个盘子和n根柱子,求出最少移动次数,最多移动次数,指定移动次数的移动过程。你能写吗?

能。从汉诺塔的本质出发。汉诺塔的本质就是一个过程:首先算固定盘子和固定柱子的移动次数,从中推导出n个盘子和固定柱子的移动次数,从中推导出n个柱子和固定盘子的移动次数。继而推导出n个盘子和n跟柱子的移动次数。至于指定移动次数的移动过程,就有点九阴真经的味道了。

我们可以看到,汉诺塔的本质有点宏观上的数学归纳法。

以上纯属我扯淡,大家娱乐下就行。  

转载地址:http://xycta.baihongyu.com/

你可能感兴趣的文章
树莓派3链接wifi
查看>>
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>
DWR实现服务器向客户端推送消息
查看>>
js中forEach的用法
查看>>
Docker之功能汇总
查看>>
!!a标签和button按钮只允许点击一次,防止重复提交
查看>>
(轉貼) Eclipse + CDT + MinGW 安裝方法 (C/C++) (gcc) (g++) (OS) (Windows)
查看>>
还原数据库
查看>>
作业调度框架 Quartz.NET 2.0 beta 发布
查看>>