Problem
Mam nieukierunkowany wykres (z wieloma krawędziami), który z czasem się zmieni, węzły i krawędzie można wstawiać i usuwać. Przy każdej modyfikacji wykresu muszę aktualizować połączone elementy tego wykresu.
Nieruchomości
Dodatkowe właściwości polegają na tym, że żadne dwa składniki nigdy nie zostaną ponownie połączone. Oczywiście wykres może mieć dowolne cykle (w przeciwnym razie rozwiązanie byłoby trywialne). Jeśli krawędź nie zawiera węzła n , nigdy nie przyjmie tego węzła. Jednak jeśli n ∈ e , może zmienić się na n ∉ e .
Podejścia
Do tej pory mam dwa możliwe podejścia, ale jak zobaczycie, są one okropne:
Powolny bez stanu
Mogę za każdym razem przeszukiwać (dfs / bfs) wykres, zaczynając od zmodyfikowanych elementów. Oszczędza to miejsce, ale jest wolne, ponieważ dla każdej modyfikacji mamy O (n + m).
Podejście stanowe szybkie (-er) (?)
Mogę przechowywać wszystkie możliwe ścieżki dla każdego węzła do wszystkich możliwych węzłów, ale jeśli zobaczę to poprawnie, zajmie to pamięć O (n ^ 4). Ale nie jestem pewien, jak poprawia się środowisko wykonawcze (jeśli w ogóle istnieje, ponieważ muszę aktualizować informacje dla każdego węzła w tym samym komponencie).
Pytanie
Czy masz jakieś wskazówki, w jaki sposób mogę dowiedzieć się więcej na temat tego problemu lub może algorytmów, na których mogę bazować?
Uwaga
Jeśli nastąpiłaby znaczna poprawa czasu wykonywania / pamięci, mógłbym żyć z nieoptymalnym rozwiązaniem, które czasami mówi, że dwa składniki są jednym, ale oczywiście wolałbym optymalne rozwiązanie.