【问题标题】:Scaling an iterative, bitwise algorithm to solve the Towers of Hanoi using X discs and Y towers使用 X 圆盘和 Y 塔缩放迭代的按位算法来求解河内塔
【发布时间】:2011-02-01 14:48:37
【问题描述】:

我喜欢这个问题中提到的算法:“这是如何工作的?河内奇怪的塔解决方案” How does this work? Weird Towers of Hanoi Solution

有没有办法扩展河内塔的非递归解决方案以使用 X 磁盘和 Y 塔,塔表示为堆栈?

【问题讨论】:

  • 怀疑。你如何用 X 盘和 Y 塔解决河内塔?据我所知,没有经过验证的算法可以用最少的移动次数来解决这个问题。除非您可能不在乎最小的移动次数?
  • @IVlad:如果您不关心最小的移动次数,请忽略除 3 个极点之外的所有极点。工作完成:-)
  • @Steve Jessop - 真的 :)。 @Robb - 你最好的开始可能是这里描述的 Frame-Stewart 算法:en.wikipedia.org/wiki/Tower_of_Hanoi - 不知道该算法是否真的是最优的,但很可能是。我不知道它究竟如何适应打印每一步的非递归解决方案,但其他人可能会弄清楚并希望发布他们的发现:)。
  • 解 X 盘很容易,你只需要知道它是偶数还是奇数。 Y 塔是一个棘手的问题。
  • 对于 > 3 个磁盘来说,“最佳”解决方案并不为人所知 [尽管 Frame Stewart 猜想给出了一些关于如何解决它的提示],并且位解决方案利用了 3 种情况下的假设。跨度>

标签: algorithm stack iteration towers-of-hanoi


【解决方案1】:

Y=3 塔和 X 圆盘的河内塔的迭代解决方案,可以在 Wikipedia 上找到:

对于偶数个磁盘:

  • 在钉子 A 和 B 之间进行合法移动
  • 在钉子 A 和 C 之间进行合法移动
  • 在钉子 B 和 C 之间进行合法移动 重复直到完成

对于奇数个磁盘:

  • 在钉子 A 和 C 之间进行合法移动
  • 在钉子 A 和 B 之间进行合法移动
  • 在钉子 B 和 C 之间进行合法移动 重复直到完成

在每种情况下,总共进行 2^X-1 次移动。 此算法的移动次数仅为minimal for Y=3

此解决方案忽略其他塔,因此它适用于任何 Y >= 3 和任何 X。

虽然三钉版本有 概述的简单递归解决方案 上,最优解为 有四个钉子的河内塔问题 (称为Reve的谜题),更不用说更多了 钉,仍然是一个悬而未决的问题。这 是如何简单的一个很好的例子, 可以解决的问题 困难得多 稍微松动问题之一 约束。

引用自Wikipedia

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2012-09-11
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多