Sto cercando di capire quale tipo di struttura dati utilizzare per modellare un utilizzo ipotetico e idealizzato della rete.
Nel mio scenario, un certo numero di utenti che sono ostili l'un l'altro stanno tutti cercando di formare reti di computer in cui sono note tutte le potenziali connessioni. I computer che un utente deve connettere potrebbero non essere uguali a quelli che un altro utente ha bisogno di connettere, però; l'utente 1 potrebbe aver bisogno di collegare i computer A, B e D mentre l'utente 2 potrebbe aver bisogno di collegare i computer B, C ed E.
Immaginegenerataconl'aiutodi
Penso che il nucleo di questo sarà un grafico ciclico non orientato, con nodi che rappresentano computer e spigoli che rappresentano cavi Ethernet. Tuttavia, a causa della natura dello scenario, ci sono alcune caratteristiche non comuni che escludono le liste di adiacenza e le matrici di adiacenza (almeno, senza modifiche non banali):
-
I bordi
- possono diventare limitati: utilizzare; cioè, se un utente acquisisce una determinata connessione di rete, nessun altro utente può utilizzare quella connessione
- nell'esempio, l'utente verde non può connettersi al computer A, ma l'utente rosso ha collegato B a E pur non avendo un collegamento diretto tra loro
- in alcuni casi, una data coppia di nodi sarà collegata da più di un bordo
- nell'esempio, ci sono due cavi indipendenti che vanno da D a E, quindi gli utenti verdi e blu erano entrambi in grado di connettere direttamente quelle macchine; tuttavia, il rosso non può più effettuare tale connessione
- se due computer sono collegati da più di un cavo, ciascun utente può possedere non più di uno di quei cavi
Avrò bisogno di fare diverse operazioni su questo grafico, come ad esempio:
- determinare se una determinata coppia di computer è connessa per un determinato utente
- identificare il percorso ottimale per un determinato utente per connettere computer di destinazione
- che identifica la connessione del computer a latenza più elevata per un determinato utente (ovvero il percorso più lungo senza diramazione)
Il mio primo pensiero è stato semplicemente creare una collezione di tutti i bordi, ma è terribile per la ricerca. La cosa migliore che posso pensare di fare ora è modificare un elenco di adiacenza in modo che ogni elemento dell'elenco contenga non solo la lunghezza del bordo ma anche il suo costo e il suo attuale proprietario. È un approccio sensato? Supponendo che lo spazio non sia un problema, sarebbe ragionevole creare più copie del grafico (una per ogni utente) piuttosto che un singolo grafico?