【发布时间】:2017-07-29 18:34:50
【问题描述】:
河内塔
假设我必须为 hanoi 函数的递归塔找到最有效的方法,除了 4 个钉子。
显然应该比普通的河内塔快
我的算法如下:
如果我们有 5 张光盘,它会是这样的
-
---
-----
-------
---------
___________ ___________ ___________ ___________
我想将 n // 2 张光盘移动到两个备用凳子之一
-----
------- -
--------- ---
___________ ___________ ___________ ___________
现在使用剩下的 3 个凳子,我想使用 n - 1 方法(河内的普通塔)将剩余部分送到目的地(我意识到我把 n//2 放在了备用 1 而不是备用 2 中,但是总体相同)
-----
- -------
--- ---------
___________ ___________ ___________ ___________
现在只需将原来的 n//2 放到目的地
-
---
-----
-------
---------
___________ ___________ ___________ ___________
如果光盘是 1 到 8,这将获得最有效的运行时间,但在 9 之后显然有更好的方法。有什么办法可以拆分 n 以获得更好的运行时间?
运行时间:
显然是最佳运行时间(来源:http://service.scs.carleton.ca/sites/default/files/tr/TR-04-10.pdf)
8: 33 步
9: 41 步
我的
8: 33 步
9: 49 步
【问题讨论】:
-
欢迎来到 SO,请使用 tour 并查看如何使用 How to Ask 以及如何使用 minimal reproducible example 呈现代码
标签: python algorithm computer-science