Minimalne drzewo rozpinające
Wykres, który nie ma wskazówek, nazywa się niekierowanym wykresem. Każdy wykres musi mieć ścieżkę z jednego węzła do innego węzła. Drzewo rozpiętości to również niekierżawiony podłączony wykres, na którym wszystkie węzły wykresu są obecne z minimalnymi krawędziami. Jeśli drzewo spinka nie ma wszystkich węzłów wykresu, nie możemy powiedzieć, że jest to drzewo spinka. Całkowite ciężary drzewa spinka będą mniejsze niż oryginalna waga wykresu, ponieważ podłączyliśmy go przez minimalną wagę. Drzewo rozpiętości również nie ma cyklu. Każdy wykres ma więcej niż jedno drzewo spinki, ale tylko jeden z nich będzie wyjątkowy. Nazywamy to minimalnym drzewem rozpinającym, ponieważ próbujemy utworzyć pełny wykres ze wszystkimi węzłami, jednocześnie utrzymując niską wagę.
Zrozumiemy minimalne drzewo rozpinające z przykładem. Tak więc, jak wiemy, minimalne drzewo rozpinające jest częścią wykresu, ale z mniejszymi kosztami. Więc ten scenariusz można zilustrować przykładem. Załóżmy, że mamy taki wykres.
Powyższy wykres może być ułożony na różne sposoby, aby cykl wykresu został usunięty, w przeciwnym razie nie będzie to MST (minimalne drzewo rozpinające). Więc usuniemy cykl z wykresu i policzamy całkowity koszt wykresu. Mamy cztery węzły lub wierzchołki (A, B, C i D).
Przypadek 1:
Po usunięciu cyklu z wykresu powyższy koszt wykresu MST (minimalny drzewo rozpinającego) wynosi 56.
Przypadek -2:
Po usunięciu cyklu z wykresu powyższy koszt wykresu MST (minimalny drzewo rozpinającego) wynosi 53.
Przypadek - 3:
Po usunięciu cyklu z wykresu powyższy koszt wykresu MST (minimum.
Widzimy, że ostatni wykres całkowitego kosztu Case-3 jest znacznie niższy w porównaniu z pozostałymi dwoma wykresami. Tak więc ten wykres jest naszym ostatnim mST (minimalne drzewo rozpinające) dla oryginalnego wykresu. Motywem algorytmów Prim lub Kruskala jest znalezienie kosztu wykresu jak najniższe. To jest nasz motyw w tym artykule do wyjaśnienia tego MST.
Możemy narysować drzewo opinające za pomocą następujących dwóch metod:
W tym artykule omówimy algorytm Kruskala. Algorytm Prim zostanie omówiony w następnym artykule.
Algorytm Kruskala
Algorytm Kruskala jest bardzo łatwy do wdrożenia w porównaniu z algorytmem Prim, ponieważ nie musimy dbać o wierzchołki sąsiedności w tym algorytmie. W tym algorytmie algorytm Kruskala zaczyna się od wszystkich wierzchołków wykresu. Wybieramy minimalną krawędzi masy i zaczynamy tworzyć minimalne drzewo rozpinające. Wybieramy kolejną krawędź o minimalnej masie i dodajemy ją do minimalnego drzewa rozpinającego. Ten proces trwa, dopóki nie dodamy wszystkich oryginalnych węzłów wykresowych. Gdy wszystkie węzły na wykresie zostaną dodane do minimalnego drzewa rozpinającego, algorytm się zatrzyma. Podczas tworzenia minimalnego drzewa rozpinającego wykresu musimy również zająć się tym wykresem, nie tworząc żadnych cykli, ponieważ cykle nie powinny znajdować.
Tak więc, jeśli jakikolwiek węzeł tworzy cykl w minimalnym drzewie rozpinającym, wybieramy drugi węzeł, nawet jeśli waga tego węzła jest większa niż poprzedni węzeł, który tworzy cykl.
Algorytm Kruskala różni się od algorytmu Prim. Algorytm Prim, podczas tworzenia minimalnego drzewa rozpinającego, zaczyna od dowolnego węzła lub wertice, a następnie dodaje kolejny węzeł lub wertice tylko z węzłów sąsiadujących. Ale algorytm Kruskala nie dba o węzeł sąsiedności i zawsze wybiera ten węzeł, który ma mniejszą wagę, ale ten węzeł nie powinien tworzyć cyklu w minimalnym drzewie rozpinającym.
Algorytm Kruskala kroki:
Podczas pisania kodu C ++ dla algorytmu Kruskala są podejmowane następujące kroki.
Teraz zaimplementujemy powyższe kroki algorytmu za pomocą przykładu. Mamy poniższy wykres i dowiemy się minimalnego drzewa rozpinającego się dla tego wykresu.
Zatem, zgodnie z algorytmem, najpierw wybieramy najmniejszą krawędź ciężarów, czyli AB. Więc wybraliśmy tę krawędź i trzymaliśmy ją w macierzy drzew spinka. Waga krawędzi AB wynosi 9.
Teraz wybieramy następną najmniejszą krawędź, CD, i utrzymujemy tę krawędź w minimalnej tablicy drzew obejmujących. Waga krawędzi CD wynosi 12.
Kolejną najmniejszą przewagą, jaką otrzymaliśmy, był BC, którą trzymaliśmy w tablicy. Ważona krawędź BC wynosi 17.
Nasz algorytm zatrzyma się tutaj, ponieważ mamy wszystkie wierzchołki wykresu i mamy nasze minimalne drzewo spinka. Całkowita waga tego MST wynosi 9 + 12 + 17 = 38.
Program: Poniżej to kod C ++ dla algorytmu Kruskala.
#włączaćWyjście:
Edgegraphs MST: [0-2] (1) [3-4] (1) [1-3] (2) [2-3] (2) [1-5] (3)Wniosek:
Badaliśmy minimalne drzewo rozpinające Kruskala, które jest pierwszą preferencją większości ludzi, gdy muszą znaleźć wykres MST z wykresu. Algorytm Kruskala jest łatwy do zrozumienia i wdrożenia w rzeczywistej aplikacji. Podobnie jak algorytm Prima, algorytm Kruskala jest również bardzo przydatny w rzeczywistych aplikacjach. Musimy więc zrozumieć ten algorytm.