Betrachten Sie das folgende Problem:
Ein Rad sei als indizierte kreisförmig verknüpfte Liste von ganzen Zahlen definiert. Zum Beispiel…
{3, 4, 9, -1, 6}
… Ist ein 5-Rad mit 3 an Position 0, 4 an Position 1 und so weiter. Ein Rad unterstützt den Drehbetrieb, so dass eine einstufige Drehung das obige Rad in…
{6, 3, 4, 9, -1}
… Jetzt mit 6 an Position 0, 3 an Position 1 und so weiter. Sei eine geordnete Menge von verschiedenen Rädern. Finden Sie bei gegebenem und einer ganzen Zahl eine Reihe von Rotationen, so dass…
Mit anderen Worten, wenn Sie die Räder als Matrix auslegen, wäre die Summe jeder Spalte . Angenommen, ist so konstruiert, dass die Lösung bis zu Umdrehungen jedes Elements eindeutig ist (dh es gibt genau eindeutige Lösungen, die darin bestehen, eine Lösung zu nehmen und dann jedes Rad in um die gleiche Anzahl von Schritten zu drehen ).
Die triviale Lösung für dieses Problem besteht darin, einfach jede mögliche Drehung zu überprüfen. Hier ist ein Pseudocode dafür:
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)
Dies ist eine ziemlich langsame Lösung (so etwas wie ). Ich frage mich, ob es möglich ist, dieses Problem schneller zu lösen und ob es einen Namen dafür gibt.