Ich studiere derzeit die kürzesten Wege in gerichteten Graphen. Es gibt viele effiziente Algorithmen, um den kürzesten Weg in einem Netzwerk zu finden, wie zum Beispiel die von dijkstra oder bellman-ford. Was aber, wenn der Graph dynamisch ist? Mit "dynamisch" meine ich, dass wir während der Ausführung des Programms Scheitelpunkte einfügen oder entfernen können. Ich versuche, einen effizienten Algorithmus zum Aktualisieren der kürzesten Pfade von einem Scheitelpunkt zu jedem anderen Scheitelpunkt nach dem Einfügen einer Kante , ohne den Algorithmus für kürzeste Pfade erneut im neuen Diagramm ausführen zu müssen. Wie kann ich das machen? Danke im Voraus.u
- Hinweis: Die Änderungen können nach der ersten Iteration des Algorithmus vorgenommen werden
- Anmerkung [2]: Es werden zwei Knoten angegeben, die Quelle und das Ziel. Ich muss den kürzesten Weg zwischen diesen Knoten finden. Wenn der Graph aktualisiert wird, muss ich nur aktualisieren , was der kürzeste Weg zwischen und .t π ( s , t ) s t
- Anmerkung [3]: Ich interessiere mich nur für den Randeinfügungsfall.
Eine formale Definition : Gegeben sei ein Graph . Definieren eine Aktualisierungsoperation als 1) , um ein Einsetzen einer Kante zu bzw. 2) aa Löschen einer Kante von . Ziel ist es, die Kosten aller Paare auf kürzestem Weg nach einer Aktualisierungsoperation effizient zu ermitteln. Mit effizient ist gemeint, dass mindestens ein All-Pairs-Shortest-Path-Algorithmus, wie z. B. der Bellman-Ford-Algorithmus, nach jeder Aktualisierungsoperation besser ausgeführt werden sollte.e E e E
Bearbeiten: Unten gibt es eine vereinfachte Version des Problems:
Es ist ein gewichteter Graph gegeben, der aus unidirektionalen Kanten und zwei kritischen Eckpunkten und . Ein Satz von bidirektionalen Kandidatenkanten ist ebenfalls gegeben. Ich muss eine Kante um den Abstand von zu zu minimieren .s t C ( u , v ) ∈ C s t