【发布时间】:2012-05-21 02:18:14
【问题描述】:
对于运行时间小于 O(2n) 其中 n 是磁盘数量的 Hanoi Towers 是否有解决方案移动?我的解决方案需要 O(2n) 时间。
此外,以下解决方案是递归的。我们可以使用带有记忆概念的动态规划在更短的时间内解决这个问题吗?
public void towersOfHanoi(
int num,
MyStack<Integer> from,
MyStack<Integer> to,
MyStack<Integer> spare
) {
if (num == 1) {
int i = from.pop();
to.push(i);
System.out.println("Move "+i+" from "+from.getName()+" to " + to.getName());
return;
}
towersOfHanoi(num - 1, from, spare, to);
towersOfHanoi(1, from, to, spare);
towersOfHanoi(num - 1, spare, to, from);
}
MyStack 是 Java 中 Stack 类的扩展版本,它添加了 name 字段和访问器。
另外,同一个问题是否有任何变体?
【问题讨论】:
-
"对于运行时间小于 O(2^n) 其中 n 是要移动的磁盘数量的河内塔有解决方案吗? - 是的。这叫作弊:-)
-
...您拿起整个堆栈并立即将其全部移动。不,没有比 2^n 更好的遵循规则的方法了。
标签: java algorithm towers-of-hanoi