Jaka jest złożoność czasowa znalezienia średnicy wykresu ?
Średnica wykresu jest maksymalnym zbiorem najkrótszych odległości ścieżki między wszystkimi parami wierzchołków na wykresie.
Nie mam pojęcia, co z tym zrobić, potrzebuję pełnej analizy, jak rozwiązać taki problem.
Odpowiedzi:
Aktualizacja:
To rozwiązanie jest nieprawidłowe.
Rozwiązanie jest niestety prawdziwe (i proste) dla drzew! Znalezienie średnicy drzewa nawet tego nie potrzebuje. Oto kontrprzykład dla wykresów (średnica wynosi 4, algorytm zwraca 3, jeśli wybierzesz to ):v
Jeśli wykres jest skierowany, jest to dość skomplikowane, oto część papieru, która twierdzi, że wyniki w gęstym przypadku są szybsze niż stosowanie algorytmów dla najkrótszych ścieżek wszystkich par.
Jednak moja główna uwaga dotyczy przypadku, w którym wykres nie jest skierowany, a przy wagach nieujemnych kilkakrotnie słyszałem o fajnej sztuczce:
Jego złożoność jest taka sama, jak dwa kolejne pierwsze wyszukiwania¹, tzn. jeśli wykres jest połączony².O(|E|)
Wydawało się to folklorem, ale w tej chwili wciąż staram się zdobyć referencję lub udowodnić jej poprawienie. Zaktualizuję, kiedy osiągnę jeden z tych celów. Wydaje się to takie proste, że teraz zamieszczam swoją odpowiedź, być może ktoś dostanie ją szybciej.
¹ jeśli wykres jest ważony, wikipedia wydaje się mówić ale jestem pewien co do .O ( | E | log | V | )O(|E|+|V|log|V|) O(|E|log|V|)
² Jeśli wykres nie jest połączony, otrzymujesz ale może być konieczne dodanie aby wybrać jeden element z każdego podłączonego komponentu. Nie jestem pewien, czy jest to konieczne, a mimo to możesz zdecydować, że średnica jest w tym przypadku nieskończona.O(|V|+|E|) O(α(|V|))
źródło
Zakładam, że masz na myśli średnicę od , który jest najdłuższy najkrótsza ścieżka znaleźć w .GG G
Znalezienie średnicy można wykonać, znajdując najpierw wszystkie najkrótsze ścieżki i określając maksymalną znalezioną długość. Algorytm Floyda-Warshalla robi to w czasie . Algorytm Johnsona można zaimplementować, aby osiągnąć czas.O ( | V | 2 log | V | + | V | ⋅ | E | )Θ(|V|3) O(|V|2log|V|+|V|⋅|E|)
Wydaje się, że trudniejszy do osiągnięcia jest mniejszy limit czasu działania w najgorszym przypadku, ponieważ istnieją odległości do rozważenia i obliczenia tej odległości w podliniowym (zamortyzowanym) czasie każdy będzie trudny; zobacz tutaj powiązane powiązanie. Zwróć uwagę na ten artykuł, który stosuje inne podejście i uzyskuje (nieco) szybszy algorytm.O(|V|2)
źródło
Można również rozważyć teoretyczne podejście do grafu algebraicznego. Średnica jest najmniejsza liczba całkowita ul matrycy ma tę właściwość, że wszystkie wpisy są niezerowe. Możesz znaleźć według iteracji mnożenia macierzy. Algorytm średnicy wymaga wtedy czasu , gdzie jest granicą mnożenia macierzy. Na przykład, przy uogólnieniu algorytmu Coppersmith-Winograd przez Vassilevska Williams, algorytm średnicy działałby w . Krótkie wprowadzenie znajduje się w rozdziale 3 w książce Fan Chung tutaj .diam(G) t M=I+A Mt t O(logn) O(M(n)logn) M(n) O(n2.3727logn)
Jeśli ograniczysz swoją uwagę do odpowiedniej klasy grafu, możesz rozwiązać problem APSP w optymalnym czasie . Te klasy obejmują co najmniej wykresy interwałowe, wykresy łuków kołowych, wykresy permutacji, dwustronne wykresy permutacji, wykresy silnie akordowe, wykresy akordowe dwuczęściowe, wykresy dziedziczne odległości i wykresy podwójnie akordowe. Na przykład patrz Dragan, FF (2005). Szacowanie wszystkich par najkrótszych ścieżek w ograniczonych rodzinach grafów: ujednolicone podejście. Journal of Algorytmy, 57 (1), 1-21 i odnośniki tam zawarte.O(n2)
źródło
Założenia:
1. Wykres jest nieważony
2. Wykres jest skierowany
Złożoność czasowa O (| V || E |).
Algorytm:
Objaśnienie:
Sprawdzamy cykl. jeśli wykres zawiera cykl, poruszamy się w pętli, więc będziemy mieli nieskończoną odległość. Sprawdzamy połączenie. Jeśli wykres nie jest połączony, oznacza to wierzchołek u od G1 do wierzchołka v w G2. Gdzie G1 i G2 to dowolne dwa podgrupy, które nie są połączone. Więc znów będziemy mieć nieskończony dystans. Użyjemy BFS do obliczenia maksymalnej odległości między danym węzłem (u) do wszystkich innych węzłów (v), które są osiągalne z u. Następnie weźmiemy maksimum poprzednio obliczonej średnicy i wynik zwrócony przez BFS. Będziemy mieć aktualną maksymalną średnicę.
Analiza czasu pracy:
Czas całkowity = O (| v || E |) + O (| E |) + O (| E |)
Ponieważ | V || E | > | E |
więc mamy czas działania jako O (| v || E |).
BFS
DFS
Uwaga: To nie jest eleganckie rozwiązanie tego problemu.
źródło