You are on page 1of 5

Zagadnienie SST

Algorytm Dijkstry-Prima - używany do rozwiązywania zagadnienia najkrótszego drzewa rozpinającego


(ang. SST - Shortest Spanning Tree), jest oparty o metodę zachłanną, wynaleziony 1930 przez Jarnika,
potem w 1957 przez Prima i 1959 przez Dijkstrę
- mając do dyspozycji graf nieskierowany i spójny, tzn. taki w którym krawędzie grafu nie mają ustalonego
kierunku oraz dla każdych dwóch wierzchołków grafu istnieje droga pomiędzy nimi, algorytm oblicza
podzbiór E′ zbioru krawędzi E, dla którego graf nadal pozostaje spójny, ale suma kosztów wszystkich
krawędzi zbioru E′ jest najmniejsza możliwa
Drzewo rozpinające - drzewo, które zawiera wszystkie wierzchołki grafu G, zaś zbiór krawędzi drzewa jest
podzbiorem zbioru krawędzi grafu. Konstrukcja drzewa rozpinającego polega na usuwaniu z grafu tych
krawędzi, które należą do cykli. Najmniejszą liczbę krawędzi jaką trzeba usunąć z grafu, aby graf stał się
acykliczny (stał się drzewem) nazywa się rzędem acykliczności grafu lub liczbą cyklometryczną.
Minimalne drzewo rozpinające (ang. MST, minimum spanning tree) – drzewo rozpinające danego grafu o
najmniejszej z możliwych wag, tj. takie, że nie istnieje dla tego grafu inne drzewo rozpinające o mniejszej
sumie wag krawędzi.
Schemat:
· Utwórz drzewo zawierające jeden wierzchołek, dowolnie wybrany z grafu.
· Utwórz kolejkę priorytetową, zawierającą wierzchołki osiągalne z MDR (w tym momencie
zawiera jeden wierzchołek, więc na początku w kolejce będą sąsiedzi początkowego wierzchołka), o
priorytecie najmniejszego kosztu dotarcia do danego wierzchołka z MDR.
· Powtarzaj, dopóki drzewo nie obejmuje wszystkich wierzchołków grafu:
· wśród nieprzetworzonych wierzchołków (spoza obecnego MDR) wybierz ten, dla którego koszt
dojścia z obecnego MDR jest najmniejszy.
· dodaj do obecnego MDR wierzchołek i krawędź realizującą najmniejszy koszt
· zaktualizuj kolejkę priorytetową, uwzględniając nowe krawędzie wychodzące z dodanego
wierzchołka

Przykład

Graf symbolizuje sieć komputerową z wielkością kosztu przepływu


informacji, daną w postaci wag grafu. W ten sposób minimalne drzewo rozpinające będzie
odzwierciedleniem takiej organizacji sieci, gdzie wszystkie komputery są połączone z minimalizacją
kosztów przesyłania informacji. Graf może być oczywiście schematem innych, dających się "usieciowić"
zagadnień: połączeń drogowych, kolejowych, kanalizacyjnych i wielu innych. Graf spójny, nieskierowany
T – zbiór, do którego wpisywać będziemy wierzchołki włączone do drzewa
A – zbiór, do którego wpisywać będziemy krawędzie włączone do drzewa

Krok 1. Zaczynamy od wyboru wierzchołka początkowego (startowego) - zgodnie z krokiem początkowym


algorytmu, najczęściej będzie to wierzchołek oznaczony numerem 1. Ten wierzchołek włączamy do
zbioru T, a następnie wypełniamy cechy w alfa, wiersz z numerem 1 wykreślamy, ponieważ wierzchołek 1
już włączyliśmy do zbioru T.
W kolumnie cechy alfa wpisujemy (początkowe cechowanie):
- 0 - gdy dany wierzchołek nie jest bezpośrednim następnikiem wierzchołka 1
- 1 - gdy dany wierzchołek jest bezpośrednim następnikiem tego wierzchołka
W kolumnie cechy beta wpisujemy wagę połączenia (dla wierzchołków niepołączonych bezpośrednio
wpisujemy nieskończoność)

T = {1}
A={}
βi min = 2

Krok 2. Minim wartość w kolumnie cechy beta wynosi 2 i odpowiada wadze połączenia z wierzch. 6. To
jest zatem nasz wierzchołek j*. Włączamy go do T, a krawędź do A.
Wykreślamy wiersz 6 i zmieniamy cechy traktując wierzchołek 6, jako poprzednik. Należy pamiętać, że
stosujemy się do kroku 4 algorytmu, zawierającego zasadę zmiany cechowania. Cechy zmieniamy tylko w
wypadku, gdy nowa wartość beta jest mniejsza (droga jest mniejsza).
Zmiana cechowania następuje tylko przy wierzchołku 5: stara wartość beta = ∞; nowa wartość wynika z
faktu, że wierzchołek 5 jest bezpośrednim następnikiem wierzchołka 6 (jedynym). Nowa cecha beta

przyjmuje wartość połączenia, czyli 0, co jest wartością mniejszą od


nieskończoności. W kolumnie alfa wpisujemy 6,
ponieważ jest to poprzednik wierzchołka 5.
T = {1,6]
A = {(1,6)}

Krok 3. Minim wartość w kolumnie cechy beta wynosi 0 i odpowiada wadze połączenia z wierzch 5 -
wierzchołek j*. Włączamy go do T, a krawędź połączenia do A. Wykreślamy wiersz 5 i zmieniamy cechy
traktując wierzchołek 5, jako poprzednik. Zmiana cechowania następuje tylko przy wierzchołkach 4 i 2.

T = {1, 6, 4}
A = {(1,6); (6,5)}

Krok 4. Minim wartość w beta, wynosi 1 i odpowiada wadze połączenia z wierzch 2 → wierzchołek j*.
Włączamy do T, a krawędź do A. Wykreślamy wiersz 2 i zmieniamy cechy traktując wierzchołek 2, jako
poprzednik. Zmiany cechowania następuje tylko przy wierzchołku 4.
T = {1, 6, 5, 2}
A = {(1,6); (6,5); (5,2)}

Krok 5. Minim wartość beta, wynosi 1 i odpowiada wadze połączenia z wierzch 4 → wierzch j*. Włączamy
do T, a krawędź do A. Wykreślamy wiersz 4 i zmieniamy cechy traktując wierzchołek 4, jako poprzednik.
Zmiana cechowania następuje przy wierzchołku 3.

T = {1, 6, 5, 2, 4}
A = {(1,6); (6,5); (5,2); (2,4)}

Krok 6. Włączając wierzchołek 3 do zbioru T, osiągnęliśmy warunek stopu - wszystkie wierzchołki grafu
znalazły się w drzewie, jak również n-1 krawędzi (gdzie n = 6 jest liczbą wierzchołków grafu)
Waga tego drzewa jest sumą wag krawędzi włączonych do drzewa (sumujemy zakreślone pola w tabeli) i
wynosi 7.

Najkrótsze drzewo rozpinające:


T = {1, 6, 5, 2, 4, 3}
A = {(1,6); (6,5); (5,2); (2,4); (4,3)}

You might also like