Sie veranstalten eine 1-gegen-1-Basketballliga mit einem Spielplan. Am Ende der Liga muss jeder Spieler seinen vermeintlichen Gewinn-Verlust-Rekord melden (es gibt keine Unentschieden), aber Sie möchten überprüfen, ob die vorgeschlagene Platzierung angesichts des Zeitplans tatsächlich möglich war.
Zum Beispiel: Sie haben vier Spieler (Alice + Bob + Carol + Dave) und Ihr Zeitplan ist ein einfaches Round Robin. Die gemeldeten Tabellen [ A: 3-0 B: 1-2 C: 1-2 D: 1-2] und [ A: 2-1 B: 1-2 C: 1-2 D: 2-1] wären möglich, aber das Stehen [ A: 3-0 B: 0-3 C: 0-3 D: 3-0] wäre nicht.
Nehmen wir nun an, der Zeitplan ist stattdessen ein 3-Spiele-Kopf-an-Kopf-Spiel zwischen Alice + Bob und Carol + Dave. Das gemeldete Stehen [ A: 3-0 B: 0-3 C: 0-3 D: 3-0] ist jetzt möglich, aber [ A: 3-0 B: 1-2 C: 1-2 D: 1- 2] wäre nicht mehr.
(Der Zeitplan muss in keiner Weise symmetrisch sein. Sie könnten Alice nur 10 Mal gegen Bob spielen lassen und dann Bob + Carol + Dave 58 Round Robin gegeneinander spielen lassen.)
Problem : Überprüfen Sie bei einem Zeitplan mit k Teilnehmern und n Gesamtspielen effizient, ob aus diesem Zeitplan tatsächlich eine vorgeschlagene Gewinn-Verlust-Wertung hervorgehen könnte.
Die O ( ) Brute-Force-Methode ist offensichtlich. Zählen Sie alle möglichen Spielergebnisse auf und prüfen Sie, ob sie mit der vorgeschlagenen Wertung übereinstimmen. Und wenn k klein ist, erhöht n nicht viel Komplexität - es ist sehr einfach, die Rangliste einer Zwei-Personen-Liga zu überprüfen, unabhängig davon, ob sie zehn oder zehn Milliarden Spiele spielt. Darüber hinaus habe ich bei der Suche nach einer besseren Methode nicht viel Fortschritte gemacht und war neugierig, ob jemand zuvor ein ähnliches Problem gesehen hat.
quelle