Ich versuche herauszufinden, welche Art von Datenstruktur zur Modellierung einer hypothetischen, idealisierten Netzwerknutzung verwendet werden soll.
In meinem Szenario versuchen mehrere einander feindliche Benutzer, Computernetzwerke zu bilden, in denen alle potenziellen Verbindungen bekannt sind. Die Computer, die ein Benutzer zum Verbinden benötigt, sind möglicherweise nicht mit denen identisch, die ein anderer Benutzer zum Verbinden benötigt. Benutzer 1 muss möglicherweise die Computer A, B und D verbinden, während Benutzer 2 möglicherweise die Computer B, C und E verbinden muss.
Mit Hilfe von NCTM Graph Creator erzeugtes Bild
Ich denke, der Kern davon wird ein ungerichteter zyklischer Graph sein, wobei Knoten Computer und Kanten Ethernet-Kabel darstellen. Aufgrund der Art des Szenarios gibt es jedoch einige ungewöhnliche Merkmale, die Adjazenzlisten und Adjazenzmatrizen ausschließen (zumindest ohne nicht triviale Änderungen):
- Kanten können eingeschränkt genutzt werden; Das heißt, wenn ein Benutzer eine bestimmte Netzwerkverbindung erwirbt, darf kein anderer Benutzer diese Verbindung verwenden
- In diesem Beispiel kann der grüne Benutzer möglicherweise keine Verbindung zu Computer A herstellen, aber der rote Benutzer hat B mit E verbunden, obwohl keine direkte Verbindung zwischen ihnen besteht
- In einigen Fällen wird ein bestimmtes Knotenpaar durch mehr als eine Kante verbunden
- In diesem Beispiel gibt es zwei unabhängige Kabel, die von D nach E verlaufen, sodass sowohl die grünen als auch die blauen Benutzer diese Maschinen direkt anschließen konnten. Rot kann eine solche Verbindung jedoch nicht mehr herstellen
- Wenn zwei Computer über mehr als ein Kabel verbunden sind, darf jeder Benutzer nicht mehr als eines dieser Kabel besitzen
Ich muss mehrere Operationen an diesem Diagramm ausführen, z.
- Bestimmen, ob ein bestimmtes Computerpaar für einen bestimmten Benutzer verbunden ist
- Identifizieren des optimalen Pfads für einen bestimmten Benutzer zum Verbinden von Zielcomputern
- Identifizieren der Computerverbindung mit der höchsten Latenz für einen bestimmten Benutzer (dh längster Pfad ohne Verzweigung)
Mein erster Gedanke war, einfach eine Sammlung aller Kanten zu erstellen, aber das ist für die Suche schrecklich. Das Beste, was ich mir jetzt vorstellen kann, ist, eine Adjazenzliste so zu ändern, dass jedes Element in der Liste nicht nur die Kantenlänge, sondern auch die Kosten und den aktuellen Eigentümer enthält. Ist das ein vernünftiger Ansatz? Unter der Annahme, dass der Speicherplatz kein Problem darstellt, wäre es sinnvoll, mehrere Kopien des Diagramms (eine für jeden Benutzer) anstelle eines einzelnen Diagramms zu erstellen?