In meinem örtlichen Squashclub gibt es eine Leiter, die wie folgt funktioniert.
- Zu Beginn der Saison erstellen wir eine Tabelle mit dem Namen jedes Clubmitglieds in einer separaten Zeile.
- Wir schreiben dann die Anzahl der gewonnenen Spiele und die Anzahl der gespielten Spiele neben jeden Namen (in der Form: Spieler gewinnt / Spiele).
Zu Beginn der Saison sieht die Tabelle also so aus:
Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0
Zwei beliebige Spieler können ein Match spielen, wobei ein Spieler gewinnt. Wenn der Spieler gewinnt, der dem unteren Ende des Tisches am nächsten ist, wird die Position der Spieler gewechselt. Wir wiederholen dann Schritt 2. und aktualisieren die Anzahl der Siege und Spiele neben jedem Spieler. Zum Beispiel, wenn Alice Billy schlägt, haben wir
Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0
Diese Spiele finden die ganze Saison über statt und führen schließlich dazu, dass die Spieler in der ungefähren Reihenfolge ihrer Stärke aufgelistet werden.
Leider geschieht die Aktualisierung auf eine eher zufällige Weise, so dass Fehler gemacht werden. Im Folgenden sind einige Beispiele für ungültige Tabellen aufgeführt, d. H. Tabellen, die nicht korrekt erstellt werden konnten, wenn die obigen Schritte für eine Startreihenfolge (wir haben die zu Beginn der Saison verwendete Reihenfolge vergessen) und die Reihenfolge der Übereinstimmungen und Ergebnisse befolgt wurden:
Alice 0/1
Billy 1/1
Carol 0/1
Daffyd 0/0
Alice 2/3
Billy 0/1
Carol 0/0
Daffyd 0/0
Alice 1/1
Billy 0/2
Carol 2/2
Daffyd 0/1
Wie können wir anhand einer Tabelle effizient feststellen, ob sie gültig ist? Wir könnten damit beginnen, Folgendes zu bemerken:
Die Reihenfolge der Namen spielt keine Rolle, da wir die ursprüngliche Startreihenfolge vergessen haben.
Die Gesamtzahl der Siege sollte die Hälfte der Anzahl der gespielten Spiele betragen. (Dies zeigt, dass das erste obige Beispiel ungültig ist.)
- Angenommen, die Tabelle ist gültig. Dann gibt es eine Multigraph - eine grafische Darstellung mehrere Kanten Einlassen aber keine Schleifen - mit jedem Scheitelpunkt mit einem Spiel mit einem Spieler und jede Kante entsprechenden gespielt. Dann entspricht die Gesamtzahl der von jedem Spieler gespielten Spiele dem Grad des Scheitelpunkts des Spielers im Multigraph. Wenn also kein Multigraph mit den entsprechenden Scheitelpunkten vorhanden ist, muss die Tabelle ungültig sein. Beispielsweise gibt es keine Multigraphie mit einem Scheitelpunkt des ersten und dritten Grades, so dass das zweite Beispiel ungültig ist. [Wir können effizient prüfen, ob ein solcher Multigraph existiert.]
Wir haben also zwei Überprüfungen, mit denen wir beginnen können, dies lässt jedoch weiterhin ungültige Tabellen zu, wie beispielsweise das dritte Beispiel. Um zu sehen, dass diese Tabelle ungültig ist, können wir rückwärts arbeiten und alle möglichen Möglichkeiten ausschöpfen, wie die Tabelle entstanden sein könnte.
Ich habe mich gefragt, ob jemand an einen Polynomzeit-Algorithmus denken kann (in Bezug auf die Anzahl der Spieler und die Anzahl der Spiele), der dieses Entscheidungsproblem löst.