Teraz chciałbym zaproponować zadanie wykorzystujące algorytm Proma. Nie trzeba do niego znać teorii grafów, wystarczy przeczytać zasadę działania na tej stronie i na kolejnej prześledzić przykład.
Algorytm Prima
Dla grafu G oznaczmy przez V (G) zbiór wierzchołków, a przez E(G) zbiór krawędzi.
Mamy dany graf F nieskierowany spójny (tzn. że każdej krawędzi można dotrzeć do innej krawędzi) z wagami (tzn.
z krawędziami z danymi wartościami)
Mamy utworzyć minimalne drzewo spinające D, czyli graf spójny bez cykli (tzn. dróg o tym samym poczatku i końcu).
Drzewo spinające grafu o n wierzchołkach ma wszystkie wierzchołki grafu i n − 1 krawędzi.
Schemat działania:
Bedziemy budować graf docelowy D dodając kolejno wierzchołki i krawędzie. Grafy pośrednie oznaczmy Gi, i = 1, 2, ....
1. Utwórz drzewo G1zawierające jeden wierzchołek, dowolnie wybrany z grafu.
2. Przypuśćmy, że mamy już drzewo Gn. Jeśli drzewo En zawiera już wszystkie wierzchołki V (F ), to D = Gn i kończymy pracę. Jeśli Gn nie zawiera wszytkich wierzchołków, to spośród krawędzi o początku a w V (Gn) i końcu b poza V (Gn) wybieramy krawędź (a, b) o najniższej wadze. Jeśli takich krawędzi jest kilka, to wszystko jedno, którą wybierzemy. Drzewo Gn+1powstaje poprzez dołączenie do Gn wierzchołka b oraz krawędzi (a, b).
Ładna prezentacja tego algorytmu jest pod adresem:
https://www.youtube.com/watch?v=fjMSreoCb7c
1
2
Odpowiedź.
Drzewo D: E(D) = {A, B, C, D, E}, V (D) = {AE, ED, AC, CB}. Sumaryczna waga drzewa D jest równa 5 + 4 + 5 + 6 = 20.
3