Datenstruktur für das Double Elimination Turnier

8

Ich bin dabei, meine Tournament Organizer-Software, die das Erstellen und Bearbeiten von Double Elimination Turnieren ermöglicht, in das MVVM-Designmuster zu konvertieren, damit es einfacher getestet werden kann. Dadurch entkomme ich das "Modell" von einem Code in der Benutzeroberfläche, der die Klammerstruktur direkt manipuliert.

Dies wird die dritte Iteration von Software sein, die ich für Turniere geschrieben habe. Die erste wurde in PHP geschrieben und die Daten in einer Datenbank gespeichert. Die zweite Version ist die von mir erstellte WPF-Version. Sie speichert die Daten im Speicher und serialisiert sie dann in eine XML-Datei. Allerdings gibt es in beiden Versionen Aspekte der Implementierung, die meiner Meinung nach nicht sauber sind und anscheinend das DRY-Gesetz verletzen.

Wenn Sie eine Datenstruktur von Grund auf neu erstellen, um doppelte Eliminierungsklammern zu behandeln, wie würden Sie das tun?

Beachten Sie, dass es nicht in der Lage sein muss, die Klammern automatisch algorithmisch zu erzeugen (Laden von einer vorgefertigten Doppel-Eliminierung mit 4/8/16/32 Leuten ist, wie ich es jetzt mache), nur die Hauptanwendungsfall ist es, die Gewinner der Spiele zu ermitteln und durch die Bracket "voranzubringen".

Edit: Um es klar zu machen, muss die Datenstruktur doppelte Eliminierungsturniere behandeln, also könnte der Gewinner eines Matches möglicherweise gegen den Verlierer eines anderen Matches antreten.

    
FryGuy 26.02.2009, 09:46
quelle

4 Antworten

1

Meine Lösung war, zwei Sätze von Datenstrukturen zu haben. Eine für die Halterung und eine für die Sitze.

%Vor%

Und dann, um es einzurichten, machte ich einige Hilfsfunktionen, die die Klammer Informationen und baute die Strukturen.

%Vor%

Dann, wenn die Samen und Gewinner / Verlierer ausgefüllt sind, wird der Wert nur an einer Stelle gesetzt.

    
FryGuy 24.04.2012, 01:33
quelle
2

An den Endpunkten haben Sie also 64 Teams. Es gibt also eine Sammlung von 64 Teams.

Aber sie sind paarweise und für jedes Paar gibt es einen Gewinner. Und in den mittleren Klammern ist dieser Gewinner tatsächlich aus einer Klammer herausgekommen, also denke ich, dass dein Bracket-Objekt tatsächlich wie folgt aussieht:

%Vor%

... und wenn du deine Enden instanziierst, würdest du die zwei Unter-Klammern mit nur einem Gewinner auf null setzen.

Um Double-Elimination zu behandeln, gibt es eine zweite Klammer, die eine Verliererklammer ist. Es wäre schön, wenn Sie automatisch das Hinzufügen von Verlierern in diese Klammer übernehmen könnten (entwerfen Sie eine Klammer, die mit 32 beginnt, die auf 16 herunterspielt, fügen Sie die 16 Verlierer aus Runde 2 der Siegerklammer hinzu), aber das ist alles Umsetzung. Die Datenstruktur muss nicht geändert werden, um dies zu berücksichtigen, Sie brauchen nur mehr von ihnen.

    
dnord 26.02.2009 21:52
quelle
0

Was ist mit einem vollen Binärbaum, wo die erste Runde an den Blattknoten beginnt und dann nach oben geht.

    
Pete 26.02.2009 21:00
quelle
0

Ich bemerkte gerade diese Frage in der Seitenleiste einer anderen Frage, auf der ich war, und dachte, ich würde hineinspielen:

Ich bin dabei, ein voll funktionsfähiges Turnier-API zu entwickeln, und ich erstelle es als Open-Source.

Es gibt noch keine Double-Elimination-Turniere, aber die Datenstruktur für die Single-Elimination-Turniere wurde kürzlich überarbeitet, um die Double-Elimin-Baumstruktur zu unterstützen.

Ссылка

    
John Gietzen 06.10.2009 19:17
quelle