Considera il seguente problema:
Consenti a una -wheel di essere definita come un elenco indicizzato collegato circolarmente di interi. Per esempio…
{3, 4, 9, -1, 6}
… È una 5 ruote con 3 in posizione 0, 4 in posizione 1 e così via. Una ruota supporta l'operazione di rotazione, in modo che una rotazione di un passo trasformi la ruota sopra in ...
{6, 3, 4, 9, -1}
... ora con 6 in posizione 0, 3 in posizione 1 e così via. Lascia che sia un insieme ordinato di ruote distinte . Dati alcuni e alcuni interi , trova una serie di rotazioni tali che ...
In altre parole, se disponessi le ruote come una matrice, la somma di ogni colonna sarebbe . Supponiamo che sia costruito in modo tale che la soluzione sia unica fino alle rotazioni di ogni elemento (ad esempio, ci sono esattamente soluzioni uniche che consistono nel prendere una soluzione, quindi ruotare ogni ruota in con lo stesso numero di passaggi).
La banale soluzione a questo problema consiste semplicemente nel controllare ogni possibile rotazione. Ecco alcuni pseudocodici per questo:
function solve(wheels, index)
if wheels are solved:
return true
if index >= wheels.num_wheels:
return false
for each position 1..k:
if solve(index + 1) is true:
return true
else:
rotate wheels[index] by 1
solve(wheels, 0)
Questa è una soluzione piuttosto lenta (qualcosa come ). Mi chiedo se è possibile risolvere questo problema più velocemente e anche se esiste un nome per questo.