【问题标题】:Recursive Towers of Hanoi Python Solution using Stacks使用堆栈的河内 Python 递归塔解决方案
【发布时间】:2015-10-08 08:28:06
【问题描述】:

我试图使用堆栈解决河内塔问题。这是我的代码:

Init_stack = [0,1,2,3]
Buffer_stack = []
Final_stack = []
n = len(Init_stack)
def move_disks(Init_stack, Buffer_stack, Final_stack, n):
    if n == 0:
        return
    elif n == 1:
        Final_stack.append(Init_stack.pop())
    elif n == 2:
        Buffer_stack.append(Init_stack.pop())
        Final_stack.append(Init_stack.pop())
        Final_stack.append(Buffer_stack.pop())
    else:
        move_disks(Init_stack, Final_stack, Buffer_stack, n-1)
        Final_stack.append(Init_stack.pop())
        move_disks(Buffer_stack, Init_stack, Final_stack,n-1)

当 Init_stack 的大小很小(例如

【问题讨论】:

  • 使用 100 个磁盘意味着您必须进行 2^100 - 1 = 1.27e30 移动。这对 Python 来说可能太多了?
  • 河内塔问题具有指数时间复杂度 O(2^n) 具体它需要 2^n - 1 次移动。这可能是 stackoverflow.com/questions/12383044/… 的副本

标签: python algorithm stack


【解决方案1】:

你也可以使用递归解决

这需要时间,因为问题的复杂性是指数型的,需要大量时间来解决。

Click here for recursive code

【讨论】:

  • 此示例不长,请在您的回答中包含它。
【解决方案2】:

河内塔需要(2^n)-1 移动,其中 n 是环数。即使是极其高效的解决方案也需要很长时间才能在 Python 中完成这么多操作。

(2^10)-1 等于 1023(每个计算机科学家都知道),但 (2^100)-1 是 31 位十进制数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-31
    • 2023-03-12
    • 2016-01-27
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多