Poprzednia odpowiedź wskazuje algorytm określający, czy istnieje wiele MST, które dla każdej krawędzi nie w G znajdują cykl utworzony przez dodanie e do wstępnie obliczonego MST i sprawdzają, czy e nie jest unikalną najcięższą krawędzią w tym cyklu. Algorytm najprawdopodobniej zadziała w czasie O ( | E | | V | ) .misolmimiO ( | E| | V.| )
Prostszy algorytm do określania, czy istnieje wiele MST G w złożoności czasowej O ( | E| log( | V| )) .
1. Uruchom algorytm Kruskala na aby znaleźć MST m .solm
2. Spróbuj uruchomić Algorytm Kruskala na ponownie. W tym biegu, ilekroć mamy wybór między krawędziami o równej wadze, najpierw spróbujemy krawędzi nie wm , a następnie spróbujemy krawędzi wm . Ilekroć znaleźliśmy krawędź nie w m, łączy dwa różne drzewa, twierdzimy, że istnieje wiele MST, kończących algorytm.solmmm
3. Jeśli tutaj dotarliśmy, twierdzimy, że ma unikalny MST.sol
Zwykły przebieg algorytmu Kruskala zajmuje czas . Dodatkowego wyboru krawędzi innych niż wm można dokonać w czasie O ( | E | ) . Zatem algorytm osiąga złożoność czasową O ( | E | log ( | V | ) ) .O ( | E| log( | V| ))mO(|E|)O(|E|log(|V|))
Dlaczego ten algorytm może ustalić, czy istnieje wiele MST?
Załóżmy, że mamy MST który nie jest taki sam jak m . Wystarczy pokazać, że algorytm działający na G nie osiągnie kroku 3, ponieważ krawędź znaleziona na końcu kroku 2, która nie znajduje się w mi, a połączenie dwóch różnych drzew byłoby uwzględnione w wynikowym MST, gdybyśmy uruchomili Kruskala algorytm do zakończenia. Niech w będzie największą masą taką, że dla każdej krawędzi o wadze mniejszej niż w jest w m wtedy i tylko wtedy, gdy jest w m ′ . Ponieważ m i m ' mają taką samą liczbę krawędzi masy w , istnieją krawędzie masym′mGmwwmm′mm′w które są w m ′, ale nie w m . Jeśli algorytm zakończył działanie przed przetwarzaniem krawędzi tych krawędzi, jesteśmy skończeni. W przeciwnym razie załóżmy, że algorytm przetworzy teraz pierwszą krawędź e ′ wśród tych krawędzi. Niech S będzie zbiorem wszystkich zachowanych do tej pory krawędzi, które zostaną uwzględnione w wynikowym MST. S ⊂ m . Ponieważ algorytm nie zakończył przetwarzania krawędzi masy w nie w m, takiej jak e ′ , nie mógł rozpocząć przetwarzania krawędzi masy w w m . Więc krawędzie w S.wm′me′SS⊂mwme′wmSważą mniej niż . To znaczy S ⊂ m ′ . Przypomnij sobie, że e ′ jest w m ′ . Ponieważ { e ′ } ∪ S ⊂ m ′ , gdzie m ′ jest drzewem, e ′ musi połączyć dwa różne drzewa w S, a algorytm kończy się w tym momencie.wS⊂m′.e′m′{e′}∪S⊂m′m′e′S
Uwaga na temat dalszego rozwoju
Krok 1 i krok 2 mogą być przeplatane, dzięki czemu możemy zakończyć algorytm tak szybko, jak to możliwe, bez przetwarzania krawędzi o większych wagach.
Jeśli chcesz obliczyć liczbę MST, możesz sprawdzić odpowiedź na to, jak obliczyć liczbę MST .