Mam wykres, na którym często potrzebuję znać wszystkie najkrótsze ścieżki (lub raczej ich długości). Ponieważ nie chcę ich ponownie obliczać, przechowuję je w prostej tablicy i po prostu je od nich ściągam. Ponieważ wykres może się również zmieniać z biegiem czasu, będę musiał je ponownie obliczyć w wyznaczonym czasie.Dynamiczne aktualizowanie najkrótszych ścieżek
Teraz następujące zmiany mogą się zdarzyć:
Dodanie węzłem i krawędziowej do wykresu
Zmiana długości krawędzi
Dodanie nowej krawędzi wykresu
Usuwanie krawędzi lub usuwanie węzła
We wszystkich przypadkach wszystkie węzły będą zawsze połączone, a wszystkie krawędzie mają dodatnie masy. Również wykres jest nieukierunkowany. Sekwencja operacji jest taka, że wszystkie węzły zawsze będą pochodziły z tego samego komponentu wykresu. Jeśli węzeł lub krawędź zostanie usunięty przed dodaniem innych węzłów i krawędzi, wykres nie zostanie rozdzielony.
Na razie planuję po prostu robić aktualizacje, a następnie propagować wszystkie zmiany poprzez strukturę wykresu. Jednak nie jestem jeszcze pewien, jak poprawnie to znieść. W jaki sposób próbowałbyś osiągnąć te aktualizacje pamięci podręcznej?
EDIT:
Jak niektórzy z was zauważył to może być niezbędna do przeliczyć wszystko, gdy węzeł jest dodawany lub link zostanie zmieniony. Może to być na przykład, gdy wszystkie odległości zmieniają się poprzez aktualizację. Jeśli jednak po prostu propaguję zmiany za pomocą wykresu i relaksuję się podobnie do sposobu, w jaki jest to wykonywane dijkstras, być może będę musiał wielokrotnie odprężyć ten sam węzeł, ponieważ może nie wybrać optymalnej kolejności. Pytanie brzmi, jak zamówić kroki relaksacyjne, więc unikam wielu aktualizacji tak dobrze, jak to możliwe.
Nie jestem pewien, czy to ma sens, bez faktycznego pomysłu, który mam na myśli, ale mam nadzieję, że to wyjaśnia więcej.
Masz jeden węzeł główny i wszystkie najkrótsze ścieżki z niego lub wszystkie ścieżki są najkrótsze między wszystkimi węzłami? –
Nie, nie ma węzła głównego, ale wszystkie pary najkrótszych ścieżek. – LiKao
Na każde 2 punkty, które mogą być połączone ścieżką, na którą ma wpływ modyfikacja, będziesz musiał przeliczyć najkrótszą ścieżkę –