是否有河內構成的運行時間小於O(2 Ñ)其中Ñ是磁盤的數量來移動的塔的溶液?我的解決方案需要O(2 n)時間。河內的解決方案比O(2^n)好?
此外,下面的解決方案是遞歸。我們可以使用動態規劃與memoization的概念來解決這個在較短的時間?
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
是Stack
類Java中的擴展版,它增加了一個name
領域和存取。
另外,是否有同樣的問題的任何變化?
「有溶液河內塔的運行時間小於O(2^n),其中n是要移動的磁盤數量?「 - 是的。這就是所謂的作弊:-) –
我們該怎麼做? – dharam
...你拿起整個堆棧,並立即移動它。不,沒有任何方法遵循比2^n更好的規則。 –