minimalne drzewo rozpinajaceamroz/dydak/aisd/grafy/wykladiv.pdfalgorytm kruskala. algorytm prima. 17...
TRANSCRIPT
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Minimalne drzewo rozpinaj¡ce
Autor projektu: dr Andrzej Mróz (UMK)
Projekt pn. �Wzmocnienie potencjaªu dydaktycznego UMK w Toruniu w dziedzinachmatematyczno-przyrodniczych� realizowany w ramach Poddziaªania 4.1.1 Programu Operacyjnego
Kapitaª Ludzki
1 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Problem
Ustalmy spójny niezorientowany graf G = (V ,E ) z funkcj¡ wagiw : E → R+.
Rozwa»my nast¦puj¡c¡ interpretacj¦ grafu G :
wierzchoªki V = {1, 2, . . . , n} = miasta,
kraw¦dzie = potencjalne bezpo±rednie drogowe poª¡czeniapomi¦dzy miastami,
waga w(i , j) kraw¦dzi {i , j} ∈ E = koszt budowy poª¡czeniapomi¦dzy miastami i i j .
2 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Problem
Zagadnienie optymalizacyjne. Zbudowa¢ tylko te drogi spo±ródopisanych przez graf G (czyli wybra¢ podgraf G ′ grafu G ) tak, by:
1 pomi¦dzy ka»d¡ par¡ miast (wierzchoªków) istniaªo drogowepoª¡czenie (niekoniecznie bezpo±rednie),
2 koszt budowy tej sieci dróg byª najni»szy spo±ród wszystkichrozwi¡za« speªniaj¡cych punkt 1.
3 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Problem�atwo zauwa»y¢, »e je»eli podgraf G ′ speªnia te wªasno±ci, to
1 zawiera wszystkie wierzchoªki grafu G ,
2 jest spójny,
3 nie zawiera cykli.
W szczególno±ci 2 i 3 oznaczaj¡, »e
G ′ powinien by¢ drzewem.
Tzw. minimalnym drzewem rozpinaj¡cym, które za chwil¦zde�niujemy w sposób bardziej formalny.
Problem ten pojawia si¦ w wielu innych kontekstach informatycz-nych, cz¦sto znalezienie minimalnego drzewa rozpinaj¡cego jestpierwszym krokiem w rozwi¡zaniach innych problemów.Czasem stosuje si¦ te» nazw¦ minimalne drzewo spinaj¡ce.
4 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Drzewo rozpinaj¡ce
Niech G = (V ,E ) b¦dzie spójnym grafem niezorientowanym.
De�nicja
Drzewo rozpinaj¡ce (ang. spanning tree) grafu G = drzewoT = (V ,E ′) takie, »e E ′ ⊆ E .
Tzn. T jest drzewem zawieraj¡cym wszystkie wierzchoªki G , za±jego zbiór kraw¦dzi jest podzbiorem zbioru kraw¦dzi G .
Drzewo rozpinaj¡ce powstaje z grafu G poprzez usuni¦ciekraw¦dzi nale»¡cych do cykli.
Ka»de drzewo rozpinaj¡ce grafu G ma |V | − 1 kraw¦dzi.
5 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Drzewo rozpinaj¡ce � przykªad
Drzewo rozpinaj¡ce nie jest poj¦ciem jednoznacznym.
Dla grafu G :
@@@@�
���
vf vf vfvf vf vf
Drzewem rozpinaj¡cym jest podgraf T :
@@@@�
���
vf vf vfvf vf vf
6 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Drzewo rozpinaj¡ce � przykªad
Drzewo rozpinaj¡ce nie jest poj¦ciem jednoznacznym.
Dla grafu G :
@@@@�
���
vf vf vfvf vf vf
Drzewem rozpinaj¡cym jest podgraf T2:
vf vf vfvf vf vf
7 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Drzewo rozpinaj¡ce � przykªad
Drzewo rozpinaj¡ce nie jest poj¦ciem jednoznacznym.
Dla grafu G :
@@@@�
���
vf vf vfvf vf vf
Drzewem rozpinaj¡cym jest podgraf T3:
����
vf vf vfvf vf vf
8 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Minimalne drzewo rozpinaj¡ce
Niech G = (V ,E ) b¦dzie spójnym grafem niezorientowanymz wag¡ w : E → R+.
Dla dowolnego drzewa rozpinaj¡cego T = (V ,E ′) grafu G
de�niujemy jego wag¦
w(T ) =∑
(u,v)∈E ′
w(u, v).
De�nicja
Minimalne drzewo rozpinaj¡ce (ang. minimal spanning tree
� MST) grafu G = drzewo rozpinaj¡ce T o minimalnej wadzew(T ) (spo±ród wszystkich drzew rozpinaj¡cych grafu G ).
9 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Minimalne drzewo rozpinaj¡ce � przykªad
Dla grafu z wagami:
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
przykªadowe wagi drzew rozpinaj¡cych:
T : w(T ) = 35@@@@�
���
13 10
1
2 9
vf vf vfvf vf vf
10 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Minimalne drzewo rozpinaj¡ce � przykªad
Dla grafu z wagami:
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
przykªadowe wagi drzew rozpinaj¡cych:
T2 : w(T2) = 4815
2
13 10
8
vf vf vfvf vf vf
11 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Minimalne drzewo rozpinaj¡ce � przykªad
Dla grafu z wagami:
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
przykªadowe wagi drzew rozpinaj¡cych:
T3 : w(T3) = 33
����
2
13
81
9
vf vf vfvf vf vf
12 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Minimalne drzewo rozpinaj¡ce � przykªad
Dla grafu z wagami:
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
minimalnym drzewem rozpinaj¡cym jest
T3 : w(T3) = 33
����
2
13
81
9
vf vf vfvf vf vf
ale nie jest to jedyne MST:
T4 : w(T4) = 33@@@@�
���
13
81
2 9
vf vf vfvf vf vf
13 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Cel - poszukiwanie MST
Rozwi¡zanie naiwne: Wygenerowa¢ wszystkie drzewa rozpinaj¡cei wybra¢ te o najmniejszej wadze.
Oczywista wada: Drzew rozpinaj¡cych jest na ogóª bardzo du»o.
Ponadto, wcale nie jest to takie proste pod wzgl¦demimplementacyjnym.
Cel: Opracowa¢ efektywn¡ metod¦ znajdowania (jakiegokolwiek)MST.
14 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Strategia
Ogólna strategia zachªanna � rozrastanie si¦ podgrafu T
o zbiorze kraw¦dzi A, który na ko«cu b¦dzie MST.
Dane: Spójny graf niezorientowany G = (V ,E ) z funkcj¡ wagow¡w : E → R+.
Cel: Znalezienie MST dla G .
Podgraf T rozrasta si¦ w wyniku dodawania kolejnych kraw¦dzi.
W czasie algorytmu trzymamy zbiór A, który zawsze jestpodzbiorem zbioru kraw¦dzi pewnego MST.
W ka»dym kroku wyznaczamy kraw¦d¹, któr¡ mo»na doda¢ do A
bez straty jego wªasno±ci (kraw¦d¹ bezpieczn¡ dla A).
15 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Strategia
B¦dziemy zatem realizowa¢ strategi¦ opisan¡ przez bardzo ogólnypseudokod:
GenericMST(G, w)1 begin
2 A := ∅;3 while A nie tworzy drzewa rozpinaj¡cego do
4 begin
5 znajd¹ kraw¦d¹ {u, v} ∈E\A bezpieczn¡ dla A;
6 A := A ∪ { {u, v} }7 end
8 end;
Poprawno±¢ � ogólnie:
Niezmiennik �A jest podzbiorem zbioru kraw¦dzi pewnego MST�jest zachowany w ka»dym kroku.
Kraw¦d¹ bezpieczna w ka»dym kroku istnieje � gwarantuje toniezmiennik.
16 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Problem
Gªówny problem
Jak rozpoznawa¢ bezpieczn¡ kraw¦d¹?
Omówimy dwa ró»ne rozwi¡zania tego problemu, tj. dwie ró»nerealizacje ogólnej strategii GenericMST:
Algorytm Kruskala.
Algorytm Prima.
17 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Idea algorytmu Kruskala
Nieformalny opis
W ka»dym kroku rozrastaj¡cy si¦ podgraf T = (V ,A) grafu G
jest lasem (tj. jego skªadowe s¡ drzewami).
Na pocz¡tku A = ∅, tj. skªadowe T to jednowierzchoªkowedrzewa.
Dodaj¡c bezpieczn¡ kraw¦d¹ do A �scalamy� dwie skªadowe T
w jedn¡.
Na ko«cu T scali si¦ w jedno drzewo.
18 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Idea algorytmu Kruskala
Nieformalny opis c.d.
W poszukiwaniu kraw¦dzi bezpiecznych w kolejnych krokachprzetwarzamy kraw¦dzie w kolejno±ci ich rosn¡cych(niemalej¡cych) wag.
Kraw¦d¹ e jest bezpieczna, gdy dodanie jej do A nie spowodujepojawienia si¦ cyklu (jest to równowa»ne z tym, »e e ª¡czy dwieró»ne dotychczasowe skªadowe w T ).
Nale»y zatem umie¢ rozpoznawa¢ ró»ne skªadowe w gra�e T .Do tego wykorzystamy now¡ struktur¦ danych, tzw. struktur¦zbiorów rozª¡cznych.
19 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Idea algorytmu Prima
Nieformalny opis
W odró»nieniu od algorytmu Kruskala, tu T zawsze stanowijedno drzewo.
Na pocz¡tku T ma 1 wierzchoªek (dowolnie wybrany z G ).
W ka»dym kroku kraw¦d¹ bezpieczna to kraw¦d¹ o najmniejszejwadze spo±ród kraw¦dzi �wystaj¡cych� z T (tj. ª¡cz¡cychwierzchoªek z T z wierzchoªkiem spoza T ).
Nale»y zatem umie¢ efektywnie wybiera¢ kraw¦dzie bezpiecznej.w. Do tego wykorzystamy odpowiedni¡ kolejk¦ priorytetow¡.
20 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Struktury danych dla zbiorów rozª¡cznych
W algorytmie Kruskala wykorzystamy nast¦puj¡c¡ dynamiczn¡struktur¦ danych.
Kontekst: n ró»nych elementów pogrupowanych w pewn¡ liczb¦zbiorów rozª¡cznych.
Cel: zde�niowanie i zarz¡dzanie strukturami danychumo»liwiaj¡cymi operacje m.in.:
ª¡czenia dwóch zbiorów,
stwierdzania, do którego zbioru nale»y element x ,
stwierdzania, czy dwa elementy x , y nale»¡ do tego samegozbioru.
21 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Struktury danych dla zbiorów rozª¡cznych
Zarz¡dzanie rodzin¡ S = {S1, S2, . . . , Sk} rozª¡cznych zbiorówdynamicznych.
Pomysª: ka»dy zbiór Si identy�kujemy poprzez jegoreprezentanta, czyli wyró»niony element x ∈ Si .
Warunki nakªadane na reprezentanta:
na ogóª nie ma znaczenia, który element jest reprezentantem,
wa»ne jest, by zadaj¡c dwukrotnie pytanie o reprezentantadanego zbioru, otrzyma¢ tak¡ sam¡ odpowied¹, o ile zbiór w tymczasie si¦ nie zmieniaª,
czasami ustala si¦ na pocz¡tku pewn¡ zasad¦ wyborureprezentanta (np. element z najmniejszym kluczem...).
22 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Struktury danych dla zbiorów rozª¡cznych
Podstawowe operacje:
MakeSet(x) � tworzy nowy jednoelementowy zbiór S = {x}(o reprezentancie x); x nie mo»e by¢ elementem innego zbioru.
Union(x , y) � ª¡czy dwa rozª¡czne zbiory Sx , Sy zawieraj¡ceodpowiednio x i y w nowy zbiór Sx ∪ Sy .
Jego reprezentantem mo»e by¢ dowolny element Sx ∪ Sy , naogóª reprezentant Sx lub Sy .
FindSet(x) � zwraca wska¹nik do reprezentanta (jedynego)zbioru zawieraj¡cego x .
⇒ stwierdzanie, czy dwa elementy x , y nale»¡ do tego samegozbioru: test FindSet(x) = FindSet(y).
23 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Proste zastosowaniePrzykªad zastosowania: rozpoznawanie spójnych skªadowychw gra�e (niezorientowanym) G = (V ,E ).
ConnectedComponents(G)1 begin
2 for ka»dy v ∈ V do
3 MakeSet(v);4 for ka»da (u, v) ∈ E do
5 if FindSet(u) <> FindSet(v) then6 Union(u, v);7 end;
Po wykonaniu podziaª wierzchoªków na zbiory rozª¡czne odpowiadapodziaªowi na skªadowe spójno±ci.
W podobnym kontek±cie wykorzystamy zbiory rozª¡cznew algorytmie Kruskala (który jest de facto pewn¡ mody�kacj¡powy»szej procedury).
24 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Proste zastosowanie
SameComponent(u, v)1 begin
2 if FindSet(u) = FindSet(v) then3 return true
4 else return false
5 end;
Wiemy: do wyznaczania skªadowych mo»na wykorzysta¢przegl¡danie grafu.
Gdy do grafu kraw¦dzie s¡ dodawane w czasie dziaªaniaalgorytmu (czyli trzeba uaktualnia¢ spójne skªadowe), toimplementacja przy pomocy zbiorów rozª¡cznych mo»e by¢efektywniejsza.
25 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Heurystyka
W dalszej cz¦±ci przeprowadzimy prost¡ analiz¦ heurystyczn¡.
Przez heurystyk¦ rozumiemy tu takie projektowanie operacji, byzmniejszy¢ ich koszt zamortyzowany (niekoniecznie kosztpesymistyczny = zªo»ono±¢ pesymistyczn¡).
De�nicja
Koszt zamortyzowany = koszt ±redni operacji P w ci¡gu n
wykona« operacji P .
Uwaga
Sªowo heurystyka ma w informatyce równie» inne znaczenia.
26 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Heurystyka
Przykªad.
Wykonujemy kolejno n sortowa« algorytmem sortowania b¡-belkowego P na tym samym zbiorze danych X . Wówczas
tylko za pierwszym razem wykonywane s¡ nietrywialnemody�kacje na X ,
st¡d tu koszt zamortyzowany jest znacznie ni»szy ni» kosztpesymistyczny algorytmu P.
Oczywi±cie koszt zamortyzowany istotnie zale»y od kontekstuwykonywania danej operacji.
27 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � listy
Implementacja zbiorów rozª¡cznych w postaci list.
Ka»dy zbiór przechowywany jako (dynamiczna) lista.
Pierwszy skªadnik listy = reprezentant zbioru.
Ka»dy skªadnik listy posiada pola:
element zbioru,wska¹nik do nast¦pnego skªadnika listy,wska¹nik (prowadz¡cy wstecz) do reprezentanta.
28 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � listy
MakeSet(x) � stworzenie nowej listy o jedynym skªadniku x .Zªo»ono±¢: O(1).
FindSet(x) � zwrócenie wska¹nika od x do reprezentanta zbioru.Zªo»ono±¢: O(1).
Union(x , y) � doª¡czenie listy Ly z elementem y na koniec listy Lxz elementem x .
Reprezentantem nowego zbioru jest element b¦d¡cy wcze±niejreprezentantem zbioru zawieraj¡cego x .
Trzeba uaktualni¢ wska¹nik do reprezentanta we wszystkichskªadnikach znajduj¡cych si¦ pierwotnie na li±cie Ly .
Zªo»ono±¢: O(s), gdzie s = |Ly | (gdy mamy dost¦p do ostatniegoelementu Lx).
29 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � listy
Usprawnienie: heurystyka ª¡czenia z wywa»aniem.
Zawsze doª¡czamy krótsz¡ list¦ do dªu»szej.
Trzeba przechowywa¢ (np. w reprezentancie) i uaktualnia¢rozmiar listy.
Asymptotyczna zªo»ono±¢ pojedynczej operacji Union pozostajetaka sama, lecz koszt zamortyzowany jest mniejszy.
Wykonanie ci¡gu m operacji MakeSet, Union i FindSet, spo±ródktórych n to MakeSet zajmuje przy wywa»aniu czas O(m+ nlog n).
Bez wywa»ania: O(m2).
30 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
Implementacja w postaci drzew z korzeniem.
Ka»dy zbiór przechowywany jako drzewo z korzeniem.
Korze« drzewa = reprezentant zbioru.
Ka»dy wierzchoªek drzewa posiada pola:
element zbioru,wska¹nik do ojca w drzewie (korze« wskazuje na siebie).
Struktur¦ drzewa mo»na tak»e zaimplementowa¢ przywykorzystaniu tablicy ojców indeksowanej elementami, któregrupujemy w zbiory.
31 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
Przykªad. Trzy zbiory rozª¡czne grupuj¡ce 10 elementów,reprezentowane poprzez drzewa:
��@
@wg wg wg1
2
5 ��@
@
��
@@
wg wg wgwg wg wg3
6
4
7 10 9
wg8
s¡ jednoznacznie zakodowane przy pomocy tablicy ojców:
i 1 2 3 4 5 6 7 8 9 10
ojciec[i] 2 2 6 6 2 6 4 8 4 4
32 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
MakeSet(x) � stworzenie nowego drzewa o jedynym wierzchoªku x .Zªo»ono±¢: O(1).
FindSet(x) � przej±cie po wska¹nikach od x do ojca itp. a» dokorzenia.Zªo»ono±¢: O(h), gdzie h = wysoko±¢ drzewa.
Union(x , y) � zmiana wska¹nika w korzeniu drzewa Tx
(zawieraj¡cego x) tak aby wskazywaª na korze« drzewa Ty
(zawieraj¡cego y).Zªo»ono±¢: O(1) (gdy mamy dost¦p do korzeni).
33 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
Dwie heurystyki:
1 �¡czenie wg wysoko±ci: drzewo o mniejszej wysoko±ci doª¡czamydo drzewa o wi¦kszej wysoko±ci (+ uaktualnienie wysoko±ci).
2 Kompresja drogi: stosowana przy operacji FindSet(x) � polegana zmianie wska¹ników we wszystkich wierzchoªkach na drodzeod x do korzenia tak, by wskazywaªy na korze«.
34 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
Implementacja z uwzgl¦dnieniem heurystyk.
Oznaczenia:
h(x) = wysoko±¢ wierzchoªka x (∈ N),ojciec(x) = ojciec wierzchoªka x (wska¹nik lub odwoªanie dotablicy ojców).
MakeSet(x)1 begin
2 ojciec(x) := x;3 h(x) := 04 end;
35 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
Implementacja z uwzgl¦dnieniem heurystyk � ª¡czenie wg wysoko±ci:
Link(x, y)1 begin
2 if h(x) > h(y) then3 ojciec(y) := x4 else begin
5 ojciec(x) := y;6 if h(x) = h(y) then7 h(y) := h(y) + 18 end
9 end;
Union(x, y)1 begin
2 Link(FindSet(x), FindSet(y))3 end;
36 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
Implementacja z uwzgl¦dnieniem heurystyk � kompresja drogi:
FindSet(x)1 begin
2 if x <> ojciec(x) then3 ojciec(x) := FindSet( ojciec(x) );4 return ojciec(x)5 end;
Uwaga
Zauwa»my, »e po FindSet wysoko±¢ drzewa mo»e ulec zmianie(zmniejszeniu). Mimo to, nie uaktualniamy warto±ci h dla »ad-nego wierzchoªka. Utrzymywanie poprawnych warto±ci wysoko±cidrzew byªoby niepotrzebnie kosztowne. Zatem warto±ci h nale»ytak naprawd¦ interpretowa¢ jako górne ograniczenia wysoko±cidrzew.
37 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja � drzewa z korzeniem
Zaªó»my, »e wykonujemy ci¡g m operacji MakeSet, Unioni FindSet, spo±ród których n to MakeSet.
Twierdzenie (Hopcroft, Ullman)
Zªo»ono±¢ wykonania ci¡gu powy»szych operacji z uwzgl¦dnie-
niem heurystyk 1 i 2 wynosi O(m log∗n).
log∗ = logarytm iterowany.
log∗ jest funkcj¡ bardzo wolno rosn¡c¡.
log∗n ≤ 5 dla wszystkich 1 ≤ n ≤ 265536.
Liczba atomów we wszech±wiecie ≈ 1080 < 265536.
38 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Poprawno±¢
Zanim przedstawimy konkretny pseudokod, wprowadzimy kilkapoj¦¢ i faktów pozwalaj¡cych zrozumie¢, dlaczego idea algorytmuKruskala przedstawiona wcze±niej zawsze daje poprawnerozwi¡zanie.
Poj¦cia te wyst¦puj¡ te» w innych kontekstach algorytmówgrafowych.
Bardziej szczegóªowy dowód poprawno±ci mo»na znale¹¢ np.w ksi¡»ce [1] ze spisu literatury do wykªadu (T. H. Cormen et al.).
39 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Przekroje
De�nicje:
Ka»dy podzbiór S ⊆ V wyznacza przekrój (S ,V \ S) grafuG = (V ,E ).
Kraw¦d¹ {u, v} krzy»uje si¦ z przekrojem (S ,V \ S), je±li jedenz jej ko«ców nale»y do S , a drugi do V \ S .
Przekrój (S ,V \ S) uwzgl¦dnia zbiór kraw¦dzi A, je±li »adnakraw¦d¹ z A nie krzy»uje si¦ z tym przekrojem.
Kraw¦d¹ e ∈ E krzy»uj¡ca si¦ z przekrojem jest kraw¦dzi¡ lekk¡,je±li w(e) jest najmniejsza spo±ród wag wszystkich kraw¦dzikrzy»uj¡cych si¦ z tym przekrojem.
40 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Przekroje
G = (V ,E ) � spójny graf niezorientowany z funkcj¡ wagow¡w : E → R+
Twierdzenie
NiechE ⊇ A � podzbiór zbioru kraw¦dzi pewnego MST dla G,
(S ,V \ S) � dowolny przekrój grafu G uwzgl¦dniaj¡cy A,
{u, v} � kraw¦d¹ lekka krzy»uj¡ca si¦ z (S ,V \ S).
Wówczas kraw¦d¹ {u, v} jest bezpieczna dla A.
41 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Przypomnienie idei algorytmu
GenericMST(G, w)1 begin
2 A := ∅;3 while A nie tworzy drzewa rozpinaj¡cego do
4 begin
5 znajd¹ kraw¦d¹ {u, v} ∈E\A bezpieczn¡ dla A;
6 A := A ∪ { {u, v} }7 end
8 end;
Rozwa»my graf T = (V ,A). W ka»dym kroku jest on acykliczny ⇒ka»da jego spójna skªadowa jest drzewem.
na pocz¡tku A = ∅ ⇒ T skªada si¦ z |V |jednowierzchoªkowych drzew,
poniewa» A ∪ { {u, v} } musi by¢ acykliczny, ka»da bezpiecznakraw¦d¹ {u, v} dla A ª¡czy ró»ne skªadowe z T ,
w ka»dym kroku kolejne skªadowe T ª¡cz¡ si¦ (liczba drzewmaleje), na ko«cu las T zawiera tylko 1 drzewo ⇒ jest MST.
42 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Przekroje
Wniosek
NiechE ⊇ A � podzbiór zbioru kraw¦dzi pewnego MST dla G,
C = spójna skªadowa w lesie T = (V ,A),
{u, v} � kraw¦d¹ o najmniejszej wadze spo±ród ª¡cz¡cych C
z pewn¡ inn¡ skªadow¡ w T.
Wówczas kraw¦d¹ {u, v} jest bezpieczna dla A.
Dowód. Przekrój (C ,V \ C ) uwzgl¦dnia A.{u, v} jest kraw¦dzi¡ lekk¡ krzy»uj¡c¡ si¦ z tym przekrojem.Na mocy twierdzenia {u, v} jest kraw¦dzi¡ bezpieczn¡ dla A. �
43 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm
Podsumowanie: szczegóªowa wersja algorytmu GenericMST �algorytm Kruskala (por. ConnectedComponents).
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
Zªo»ono±¢: O(|E | · log|E |) (przy najszybszych implementacjachzbiorów rozª¡cznych i sortowania, por. Tw. Hopcroft�Ullman).
44 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
@@@@�
���
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm � przebieg
MST-Kruskal(G, w)1 begin
2 A := ∅;3 for ka»dy v ∈ V do
4 MakeSet(v);5 posortuj E niemalej¡co wzgl¦dem wag w;6 for ka»da {u, v} ∈ E, w kolejno±ci niemalej¡cych wag do
7 if FindSet(u) <> FindSet(v) then8 begin
9 A := A ∪ { {u, v} };10 Union(u, v)11 end
12 return A13 end;
����@
@@@
vf vf vfvf vf vf15
2
13 10
81
2 9
45 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Poprawno±¢
Inna realizacja ogólnego algorytmu GenericMST �algorytm Prima
W przeciwie«stwie do algorytmu Kruskala, kraw¦dzie z A tworz¡zawsze pojedyncze drzewo.
Pocz¡tkowo drzewo to skªada si¦ z dowolnie wybranegowierzchoªka-korzenia r ∈ V ; nast¦pnie ro±nie do chwili, w którejrozpina wszystkie wierzchoªki z V .
Rozwa»any przekrój: (V (A),V \ V (A))(V (A) := zbiór ko«ców kraw¦dzi z A).
W ka»dym kroku dodajemy kraw¦d¹ lekk¡ krzy»uj¡c¡ si¦ z tymprzekrojem (tj. kraw¦d¹ o najmniejszej wadze spo±ród tych�wystaj¡cych� z A).
Przekrój (V (A),V \ V (A)) uwzgl¦dnia A, zatem kraw¦d¹ ta jestbezpieczna dla A (patrz twierdzenie).
46 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja
Jak wyznacza¢ kraw¦d¹ lekk¡ krzy»uj¡c¡ si¦ z przekrojem(V (A),V \ V (A))?
Wierzchoªki spoza rozrastaj¡cego si¦ drzewa trzymamyw kolejce priorytetowej Q (por. poprzedni wykªad).
Dla ka»dego v ∈ V kluczem klucz(v) (tzn. priorytetemwyznaczaj¡cym pozycj¦ w kolejce Q) jest najmniejsza wagaspo±ród wag kraw¦dzi ª¡cz¡cych v z wierzchoªkami drzewa.
W zmiennej π[v ] pami¦tamy �ojca� v w obliczanym drzewie.
47 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Implementacja
Podczas wykonywania algorytmu zbiór A jest pami¦tany �niejawnie�jako
A = { {π[v ], v} : v ∈ (V \ {r}) \ Q}.
Po zako«czeniu algorytmu Q = ∅, zbiorem kraw¦dzi MST w G jestwi¦c
A = { {π[v ], v} : v ∈ V \ {r}}.
Przypomnijmy, »e symbolem Adj[u] oznaczamy zbiór s¡siadówwierzchoªka u.
48 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
Algorytm
Inna realizacja ogólnego algorytmu � algorytm Prima.
MST-Prim(G, w, r)1 begin
2 Q := V;3 for ka»dy u ∈ Q do klucz(u) := ∞;
4 klucz(r) := 0;5 π[r] := ∞;
6 while Q <> ∅ do7 begin
8 u := ExtractMin(Q);9 for ka»dy v ∈ Adj[u] do10 if (v ∈ Q) and (w(u, v) < klucz(v)) then11 begin
12 π[v] := u;13 klucz[v] := w(u, v)14 end
15 end;
16 return π17 end;
Zªo»ono±¢: O(|E | · log|V |) (gdy kolejka implementowana nakopcu). 49 / 50
Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
MST-Prim(G, w, r)1 begin
2 Q := V;3 for ka»dy u ∈ Q do klucz(u) := ∞;
4 klucz(r) := 0;5 π[r] := ∞;
6 while Q <> ∅ do7 begin
8 u := ExtractMin(Q);9 for ka»dy v ∈ Adj[u] do10 if (v ∈ Q) and (w(u, v) < klucz(v)) then11 begin
12 π[v] := u;13 klucz[v] := w(u, v)14 end
15 end;
16 return π17 end;
@@@@�
���
vf vf vfvf vf vf
r
15
2
13 10
81
2 9
50 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
MST-Prim(G, w, r)1 begin
2 Q := V;3 for ka»dy u ∈ Q do klucz(u) := ∞;
4 klucz(r) := 0;5 π[r] := ∞;
6 while Q <> ∅ do7 begin
8 u := ExtractMin(Q);9 for ka»dy v ∈ Adj[u] do10 if (v ∈ Q) and (w(u, v) < klucz(v)) then11 begin
12 π[v] := u;13 klucz[v] := w(u, v)14 end
15 end;
16 return π17 end;
@@@@�
���
vf vf vfvf vf vf
r
15
2
13 10
81
2 9
50 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
MST-Prim(G, w, r)1 begin
2 Q := V;3 for ka»dy u ∈ Q do klucz(u) := ∞;
4 klucz(r) := 0;5 π[r] := ∞;
6 while Q <> ∅ do7 begin
8 u := ExtractMin(Q);9 for ka»dy v ∈ Adj[u] do10 if (v ∈ Q) and (w(u, v) < klucz(v)) then11 begin
12 π[v] := u;13 klucz[v] := w(u, v)14 end
15 end;
16 return π17 end;
@@@@�
���
vf vf vfvf vf vf
r
15
2
13 10
81
2 9
50 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
MST-Prim(G, w, r)1 begin
2 Q := V;3 for ka»dy u ∈ Q do klucz(u) := ∞;
4 klucz(r) := 0;5 π[r] := ∞;
6 while Q <> ∅ do7 begin
8 u := ExtractMin(Q);9 for ka»dy v ∈ Adj[u] do10 if (v ∈ Q) and (w(u, v) < klucz(v)) then11 begin
12 π[v] := u;13 klucz[v] := w(u, v)14 end
15 end;
16 return π17 end;
@@@@�
���
vf vf vfvf vf vf
r
15
2
13 10
81
2 9
50 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
MST-Prim(G, w, r)1 begin
2 Q := V;3 for ka»dy u ∈ Q do klucz(u) := ∞;
4 klucz(r) := 0;5 π[r] := ∞;
6 while Q <> ∅ do7 begin
8 u := ExtractMin(Q);9 for ka»dy v ∈ Adj[u] do10 if (v ∈ Q) and (w(u, v) < klucz(v)) then11 begin
12 π[v] := u;13 klucz[v] := w(u, v)14 end
15 end;
16 return π17 end;
@@@@�
���
vf vf vfvf vf vf
r
15
2
13 10
81
2 9
50 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N
Wst¦p Idee Zbiory rozª¡czne Kruskal Prim
MST-Prim(G, w, r)1 begin
2 Q := V;3 for ka»dy u ∈ Q do klucz(u) := ∞;
4 klucz(r) := 0;5 π[r] := ∞;
6 while Q <> ∅ do7 begin
8 u := ExtractMin(Q);9 for ka»dy v ∈ Adj[u] do10 if (v ∈ Q) and (w(u, v) < klucz(v)) then11 begin
12 π[v] := u;13 klucz[v] := w(u, v)14 end
15 end;
16 return π17 end;
@@@@�
���
vf vf vfvf vf vf
r
15
2
13 10
81
2 9
50 / 50Projekt wspóª�nansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
N