実行時間がO(2 n)未満のハノイの塔のソリューションはありますか?ここで、 nは移動するディスクの数です。私の解決策はO(2 n)時間かかります。
また、以下の解決策は再帰を使用することです。メモ化の概念で動的計画法を使用して、これをより短時間で解決できますか?
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
また、同じ問題のバリエーションはありますか?