minimalne drzewo rozpinajaceamroz/dydak/aisd/grafy/wykladiv.pdfalgorytm kruskala. algorytm prima. 17...

72
N

Upload: others

Post on 25-Feb-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 2: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 3: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 4: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 5: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 6: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 7: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 8: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 9: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 10: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 11: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 12: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 13: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 14: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 15: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 16: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 17: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 18: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 19: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 20: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 21: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 22: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 23: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 24: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 25: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 26: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 27: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 28: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 29: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 30: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 31: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 32: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 33: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 34: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 35: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 36: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 37: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 38: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 39: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 40: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 41: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 42: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 43: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 44: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 45: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 46: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 47: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 48: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 49: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 50: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 51: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 52: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 53: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 54: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 55: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 56: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 57: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 58: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 59: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 60: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 61: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 62: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 63: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 64: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 65: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 66: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 67: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 68: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 69: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 70: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 71: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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

Page 72: Minimalne drzewo rozpinajaceamroz/dydak/AiSD/grafy/wykladIV.pdfAlgorytm Kruskala. Algorytm Prima. 17 / 50 Projekt wspóª nansoany ze ±rodkwó Unii Europejskiej w ramach Europejskiego

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