C'è una soluzione per torri di Hanoi cui tempo di esecuzione è inferiore a O (2 n) dove n è il numero di dischi di muoversi? La mia soluzione richiede O (2 n) ora.Soluzione Towers of Hanoi migliore di O (2^n)?
Inoltre, la soluzione di seguito è con ricorsione. Possiamo utilizzare la programmazione dinamica con il concetto di memoizzazione per risolvere questo problema in un tempo minore?
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
è una versione estesa di Stack
di classe in Java che aggiunge un campo name
e di accesso.
Inoltre, ci sono variazioni dello stesso problema?
"Esiste una soluzione per Tower of Hanoi il cui tempo di esecuzione è inferiore a O (2^n) dove n è il numero di dischi da spostare? " - Si. Si chiama barare :-) –
E come lo facciamo? – dharam
... Raccogli tutto lo stack e spostalo tutto in una volta. No, non c'è modo che segua le regole che sia meglio di 2^n. –