Obecnie badam najkrótsze ścieżki na ukierunkowanych wykresach. Istnieje wiele wydajnych algorytmów do znajdowania najkrótszej ścieżki w sieci, takich jak dijkstra lub bellman-ford. Ale co, jeśli wykres jest dynamiczny? Mówiąc dynamiczny, mam na myśli to, że możemy wstawiać lub usuwać wierzchołki podczas wykonywania programu. Próbuję znaleźć skuteczny algorytm do aktualizowania najkrótszych ścieżek z wierzchołka do każdego innego wierzchołka , po wstawieniu krawędzi , bez potrzeby ponownego uruchamiania algorytmu najkrótszej ścieżki na nowym wykresie. W jaki sposób mogę to zrobić? Z góry dziękuję.u e
- Uwaga: zmiany można wprowadzić po pierwszej iteracji algorytmu
- Uwaga [2]: dwa węzły są podane, źródłem i cel. Muszę znaleźć najkrótszą ścieżkę między tymi węzłami. Gdy wykres jest aktualizowany, że wystarczy zaktualizować , która jest najkrótsza droga między i .t π ( s , t ) s t
- Uwaga [3]: Interesuje mnie tylko obudowa wstawiania krawędzi.
Formalna definicja : biorąc pod uwagę wykres . Zdefiniowania operacji aktualizacji , jak 1) wstawienie krawędzi do lub 2) aa delecji krawędzi z . Celem jest skuteczne znalezienie kosztu wszystkich par najkrótszych ścieżek po operacji aktualizacji. Przez efektywnie rozumiemy co najmniej lepsze niż wykonywanie algorytmu All-Pairs-Shortest-Path, takiego jak algorytm Bellman-Ford, po każdej operacji aktualizacji.E e E
Edycja: Poniżej znajduje się uproszczona wersja problemu:
Podano wykres ważony , składający się z jednokierunkowych krawędzi i dwóch krytycznych wierzchołków i . Podany jest również zestaw kandydujących krawędzi dwukierunkowych . Muszę zbudować krawędź aby zminimalizować odległość od do .s t Cs t