Raggruppamento dell'Unione in grafici bipartiti?


8

Sto cercando di trovare una buona (e veloce) soluzione al seguente problema:

Ho due modelli con cui sto lavorando, chiamiamoli giocatori e squadre. Un giocatore può far parte di più squadre e una squadra può avere più giocatori). Sto lavorando alla creazione di un elemento dell'interfaccia utente in un modulo che consente a un utente di selezionare più team (caselle di controllo). Man mano che l'utente seleziona (o deseleziona) le squadre, vorrei visualizzare le squadre raggruppate per giocatore.

Quindi per esempi:

  1. Se le squadre selezionate non hanno giocatori che si intersecano, ogni squadra avrebbe la propria sezione.

  2. Se l'utente seleziona due squadre e hanno gli stessi giocatori, ci sarebbe una sezione contenente i nomi delle due squadre e di tutti i giocatori.

  3. Se TEAM_A ha giocatori [1, 2, 4, 5] e TEAM_B ha giocatori [1, 3, 5, 6]. Ci sarebbero le seguenti sezioni: SECTION_X = [TEAM_A, TEAM_B, 1, 5], SECTION_Y = [TEAM_A, 2, 3], SECTION _Z = [TEAM_B, 3, 5]

Spero sia chiaro. In sostanza, voglio trovare le squadre che i giocatori hanno in comune e raggruppare. Stavo pensando che forse c'è un modo per farlo navigando in un grafico bipartito? Non sono esattamente sicuro di come e potrei pensare troppo. Speravo di farlo creando un qualche tipo di struttura di dati sul server e utilizzandolo sul client. Mi piacerebbe sentire i tuoi suggerimenti e apprezzo qualsiasi aiuto tu possa dare!


Sei sicuro di non poter codificare quella logica usando una relazione molti-a-molti tra i tuoi modelli. Spero che, quando inizi a scrivere il tuo codice lato server, il tuo framework preferito ti permetterà di dichiarare i modelli con alcuni campi. Pertanto, sarai in grado di indicare che il modello Teamdovrebbe avere un campo chiamato playersche richiede una relazione molti-a-molti con l'altro modello Player. Ciò consente di recuperare quali giocatori sono presenti in ciascuna squadra e quali squadre sono associate a ciascun giocatore.
Robert Smith,

Hai scelto qualche tecnologia particolare? Questo potrebbe essere fatto con Neo4J e Cypher.
sheldonkreger,

Risposte:


2

Hai sentito parlare del grafico delle intersezioni ? Puoi provare a disegnare i giocatori come punti, connessioni (compagni di squadra) come bordi e squadre come chiazze colorate trasparenti in cima.

Per quanto riguarda la tua domanda originale, non riesco a capire il tuo obiettivo. Penso che la tua formulazione non sia ben definita / incompleta. Supponiamo di avere le squadre A [1,2] B [2,3] e C [1,3]. Cosa vuoi mostrare? Vuoi elencare le parti del diagramma di Venn? Penso che per più di 3 set questo possa diventare più ingombrante del grafico bipartito stesso = semplice elenco delle composizioni di squadra.


1

Memorizza i bordi (relazioni) nel tuo server:

(TeamID, playerID)

Quando vuoi trovare elementi comuni, filtra tutti i bordi dove:

TeamID="TeamA" or TeamID="TeamB"

(È possibile utilizzare gli indici per aumentare la velocità, ecc.)

Quindi raggruppa per ID giocatore e controlla quanti elementi ci sono in ciascun gruppo. I gruppi con due elementi appartengono a entrambe le squadre e sono condivisi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.