Gewerkschaftsgruppierung in zweigeteilten Graphen?

8

Ich versuche eine gute (und schnelle) Lösung für das folgende Problem zu finden:

Ich habe zwei Modelle, mit denen ich arbeite. Nennen wir sie Spieler und Teams. Ein Spieler kann in mehreren Teams sein und ein Team kann mehrere Spieler haben. Ich arbeite daran, ein UI-Element in einem Formular zu erstellen, mit dem ein Benutzer mehrere Teams auswählen kann (Kontrollkästchen). Da der Benutzer Teams auswählt (oder die Auswahl aufhebt), möchte ich die von den Spielern gruppierten Teams anzeigen.

Also zum Beispiel:

  1. Wenn die ausgewählten Teams keine Spieler haben, die sich überschneiden, hätte jedes Team einen eigenen Abschnitt.

  2. Wenn der Benutzer zwei Teams auswählt und dieselben Spieler hat, gibt es einen Abschnitt, der die Namen der beiden Teams und aller Spieler enthält.

  3. Wenn TEAM_A Spieler [1, 2, 4, 5] und TEAM_B Spieler [1, 3, 5, 6] hat. Es würde die folgenden Abschnitte geben: SECTION_X = [TEAM_A, TEAM_B, 1, 5], SECTION_Y = [TEAM_A, 2, 3], SECTION _Z = [TEAM_B, 3, 5]

Ich hoffe das ist klar. Im Wesentlichen möchte ich die Teams finden, die die Spieler gemeinsam haben, und mich danach gruppieren. Ich dachte, vielleicht gibt es eine Möglichkeit, dies durch Navigieren in einem zweigeteilten Diagramm zu tun? Ich bin mir nicht ganz sicher, wie und ich könnte es überdenken. Ich hatte gehofft, dies zu tun, indem ich eine Art Datenstruktur auf dem Server erstellte und auf dem Client verwendete. Ich würde gerne Ihre Vorschläge hören und freue mich über jede Hilfe, die Sie geben können!

Ian
quelle
Sind Sie sicher, dass Sie diese Logik nicht mithilfe einer Viele-zu-Viele-Beziehung zwischen Ihren Modellen codieren können? Wenn Sie mit dem Schreiben Ihres serverseitigen Codes beginnen, können Sie mit Ihrem bevorzugten Framework hoffentlich Modelle mit einigen Feldern deklarieren. Daher können Sie anweisen, dass das Modell Teamein Feld mit dem Namen haben soll players, das eine Viele-zu-Viele-Beziehung zu Ihrem anderen Modell erfordert Player. Auf diese Weise können Sie abrufen, welche Spieler in jedem Team sind und welche Teams jedem Spieler zugeordnet sind.
Robert Smith
Haben Sie eine bestimmte Technologie gewählt? Dies könnte mit Neo4J und Cypher geschehen.
Sheldonkreger

Antworten:

2

Haben Sie von der Schnittgrafik gehört ? Sie können versuchen, Spieler als Punkte, Verbindungen (Teamkollegen) als Kanten und Teams als transparente farbige Blobs oben zu zeichnen.

Was Ihre ursprüngliche Frage betrifft, kann ich Ihr Ziel nicht verstehen. Ich denke, Ihre Formulierung ist nicht gut definiert / unvollständig. Angenommen, Sie haben Teams A [1,2] B [2,3] und C [1,3]. Was möchten Sie anzeigen? Möchten Sie die Teile des Venn-Diagramms auflisten? Ich denke, dass dies für mehr als 3 Sätze umständlicher werden kann als das zweigeteilte Diagramm selbst = einfache Auflistung der Teamzusammensetzungen.

Valentas
quelle
1

Speichern Sie die Kanten (Relationen) auf Ihrem Server:

(TeamID, playerID)

Wenn Sie gemeinsame Elemente finden möchten, filtern Sie einfach alle Kanten, wobei:

TeamID="TeamA" or TeamID="TeamB"

(Sie können Indizes verwenden, um die Geschwindigkeit zu erhöhen usw.)

Gruppieren Sie dann nach Spieler-ID und überprüfen Sie, wie viele Elemente sich in jeder Gruppe befinden. Die Gruppen mit zwei Elementen gehören zu beiden Teams und werden gemeinsam genutzt.

Juan Leni
quelle