Algorytmy i Struktury Danych.Grafy. Drzewo rozpinajace. Minimalne drzewo rozpinajace.
Bozena [email protected]
Jan Długosz University, Poland
Wykład 9
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 42
Plan wykładu
Drzewo rozpinajace
Algorytm Kruskala
Algorytm Prima
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 2 / 42
Drzewo rozpinajace grafu
DefinicjaDrzewem rozpinajacym grafu G nazywamy spójny i acyklicznypodgraf grafu G zawierajacy wszystkie jego wierzchołki.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 3 / 42
Drzewo rozpinajace grafu
DefinicjaDrzewem rozpinajacym grafu G nazywamy spójny i acyklicznypodgraf grafu G zawierajacy wszystkie jego wierzchołki.
TwierdzenieKazdy graf spójny zawiera drzewo rozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 3 / 42
Drzewo rozpinajace grafu
DefinicjaDrzewem rozpinajacym grafu G nazywamy spójny i acyklicznypodgraf grafu G zawierajacy wszystkie jego wierzchołki.
TwierdzenieKazdy graf spójny zawiera drzewo rozpinajace.
TwierdzenieW grafie spójnym G = (V ,E) krawedz e ∈ E jest krawedzia cieciawtedy i tylko wtedy, gdy e nalezy do kazdego drzewa rozpinajacegografu G.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 3 / 42
Drzewo rozpinajace grafu
Generowanie drzewa rozpinajacego danego grafu spójnego Gmozna realizowac biorac kolejno krawedzie z pewnej listy iakceptujac je po sprawdzeniu, czy nie tworza one cyklu zdotychczas zaakceptowanymi krawedziami.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 4 / 42
Drzewo rozpinajace grafu
Generowanie drzewa rozpinajacego danego grafu spójnego Gmozna realizowac biorac kolejno krawedzie z pewnej listy iakceptujac je po sprawdzeniu, czy nie tworza one cyklu zdotychczas zaakceptowanymi krawedziami.
Generowanie wszystkich drzew rozpinajacych danego grafu jestzłozone obliczeniowo, poniewaz drzew rozpinajacych moze bycbardzo duzo.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 4 / 42
Drzewo rozpinajace grafu - przykład
v1a
b
v2
d
v3e
v4
c
Pokazemy, ze graf ten zawiera 8róznych drzew rozpinajacych.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 5 / 42
Drzewo rozpinajace grafu - przykład
v1a
b
v2
d
v3e
v4
c
Pokazemy, ze graf ten zawiera 8róznych drzew rozpinajacych.
Łatwo zauwazyc, ze kazde drzeworozpinajace tego grafu ma 3krawedzie.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 5 / 42
Drzewo rozpinajace grafu - przykład
v1a
b
v2
d
v3e
v4
c
Pokazemy, ze graf ten zawiera 8róznych drzew rozpinajacych.
Łatwo zauwazyc, ze kazde drzeworozpinajace tego grafu ma 3krawedzie.
Uporzadkujmy wszystkie krawedziegrafu, tworzac liste krawedzi.Rozwazac bedziemy nastepujacaliste krawedzi: (a, b, c, d, e) .
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 5 / 42
Drzewo rozpinajace grafu - przykład
v1a
b
v2
d
v3e
v4
c
Pokazemy, ze graf ten zawiera 8róznych drzew rozpinajacych.
Łatwo zauwazyc, ze kazde drzeworozpinajace tego grafu ma 3krawedzie.
Uporzadkujmy wszystkie krawedziegrafu, tworzac liste krawedzi.Rozwazac bedziemy nastepujacaliste krawedzi: (a, b, c, d, e) .
Kazdy podzbiór krawedzi bedziemyprzedstawiac w postaci listyuporzadkowanej, zgodnie zporzadkiem w liscie krawedzi;
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 5 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Do generowania wszystkich drzewrozpinajacych zastosujemy algorytmz nawrotami .
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Do generowania wszystkich drzewrozpinajacych zastosujemy algorytmz nawrotami .Zgodnie z algorytmem z nawrotami,bedziemy tworzyc kolejne listy.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Do generowania wszystkich drzewrozpinajacych zastosujemy algorytmz nawrotami .Zgodnie z algorytmem z nawrotami,bedziemy tworzyc kolejne listy.
lista czerwona oznacza, zekrawedzie te zawieraja cykl i trzebasie wycofac.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Do generowania wszystkich drzewrozpinajacych zastosujemy algorytmz nawrotami .Zgodnie z algorytmem z nawrotami,bedziemy tworzyc kolejne listy.
lista czerwona oznacza, zekrawedzie te zawieraja cykl i trzebasie wycofac.lista podkreslona oznaczaja drzeworozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Do generowania wszystkich drzewrozpinajacych zastosujemy algorytmz nawrotami .Zgodnie z algorytmem z nawrotami,bedziemy tworzyc kolejne listy.
lista czerwona oznacza, zekrawedzie te zawieraja cykl i trzebasie wycofac.lista podkreslona oznaczaja drzeworozpinajace.
Listy (drzewa) generowane sa wporzadku leksykograficznym(alfabetycznym).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
(), (a), (a,b), (a,b, c) – Mamypierwsze drzewo rozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 7 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
(), (a), (a,b), (a,b, c) – Mamypierwsze drzewo rozpinajace.
Usuwamy ostatnia krawedz z (a,b, c),dodajemy kolejna krawedz z listy iotrzymujemy: (a,b,d) - zawiera cykl.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 7 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
(), (a), (a,b), (a,b, c) – Mamypierwsze drzewo rozpinajace.
Usuwamy ostatnia krawedz z (a,b, c),dodajemy kolejna krawedz z listy iotrzymujemy: (a,b,d) - zawiera cykl.
Usuwamy zatem d i generujemynastepna liste: (a,b,e) –Otrzymalismy drugie drzeworozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 7 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz e, nie mozemyjednak kontynuowac bo e jestostatnia krawedzia na liscie.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 8 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz e, nie mozemyjednak kontynuowac bo e jestostatnia krawedzia na liscie.
Usuwamy kolejna krawedz - b igenerujemy: (a, c), (a, c,d). Mamykolejne drzewo rozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 8 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz e, nie mozemyjednak kontynuowac bo e jestostatnia krawedzia na liscie.
Usuwamy kolejna krawedz - b igenerujemy: (a, c), (a, c,d). Mamykolejne drzewo rozpinajace.
Usuwamy ostatnia krawedz d ikontynuujemy: (a, c,e). Znalezlismykolejne drzewo rozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 8 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz e, nastepniekrawedz c, po czym generujemykolejno: (a,d), (a,d ,e). Mamykolejne drzewo rozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 9 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz e, nastepniekrawedz c, po czym generujemykolejno: (a,d), (a,d ,e). Mamykolejne drzewo rozpinajace.
Usuwamy krawedz e, potem dtworzymy nowa liste: (a,e). Niemozemy jednak kontynuowac wiecusuwamy krawedzie e oraz a.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 9 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz e, nastepniekrawedz c, po czym generujemykolejno: (a,d), (a,d ,e). Mamykolejne drzewo rozpinajace.
Usuwamy krawedz e, potem dtworzymy nowa liste: (a,e). Niemozemy jednak kontynuowac wiecusuwamy krawedzie e oraz a.
Kolejnymi utworzonymi listami sawiec: (b), (b, c), (b, c,d).Otrzymalismy kolejne drzeworozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 9 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz d , ale kolejnalista: (b, c,e) zawiera cykl. Usuwamywiec kolejno krawedz e, potem c igenerujemy listy (b,d) i (b,d ,e).Znalezlismy kolejne drzeworozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 10 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz d , ale kolejnalista: (b, c,e) zawiera cykl. Usuwamywiec kolejno krawedz e, potem c igenerujemy listy (b,d) i (b,d ,e).Znalezlismy kolejne drzeworozpinajace.
Usuwamy kolejno krawedzie e i d akolejna lista jest: (b,e). Usuwamy e,a nastepnie b i tworzymy listy: (c),(c,d), (c,d ,e). Mamy kolejne drzeworozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 10 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy krawedz d , ale kolejnalista: (b, c,e) zawiera cykl. Usuwamywiec kolejno krawedz e, potem c igenerujemy listy (b,d) i (b,d ,e).Znalezlismy kolejne drzeworozpinajace.
Usuwamy kolejno krawedzie e i d akolejna lista jest: (b,e). Usuwamy e,a nastepnie b i tworzymy listy: (c),(c,d), (c,d ,e). Mamy kolejne drzeworozpinajace.
Usuwamy kolejno e i d , a nastepniegenerujemy las (c,e). Usuwamy e,nastepnie c i generujemy kolejnelisty: (d), (d ,e), (e). Nie ma juzjednak wiecej drzew rozpinajacych.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 10 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy kolejno krawedzie e i d , akolejna lista jest: (b,e). Usuwamy e,a nastepnie b i tworzymy listy: (c),(c,d), (c,d ,e). Mamy kolejne drzeworozpinajace.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 11 / 42
Drzewo rozpinajace grafu - przykład
(a, b, c, d, e)
v1a
b
v2
d
v3e
v4
c
Usuwamy kolejno krawedzie e i d , akolejna lista jest: (b,e). Usuwamy e,a nastepnie b i tworzymy listy: (c),(c,d), (c,d ,e). Mamy kolejne drzeworozpinajace.
Usuwamy kolejno e i d , a nastepniegenerujemy las (c,e). Usuwamy e,nastepnie c i generujemy kolejnelisty: (d), (d ,e), (e). Nie ma juzjednak wiecej drzew rozpinajacych.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 11 / 42
Drzewo rozpinajace grafu - przykład
v1a
b
v2
d
v3e
v4
c
Drzewa rozpinajace
v1 v2
v3v4
v1 v2
v3v4
v1 v2
v3v4
v1 v2
v3v4
(a,b,c) (a,b,e) (a,c,d) (a,c,e)
v1 v2
v3v4
v1 v2
v3v4
v1 v2
v3v4
v1 v2
v3v4
(a,d,e) (b,c,d) (b,d,e) (c,d,e)Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 12 / 42
Generowanie drzew rozpinajacych grafu - załozenia
Kazdemu wierzchołkowi grafu przyporzadkujemy dwa atrybuty:Korzen[r ] - tzw. korzen drzewa, w którym znajduje sie wierzchołekr .Poprzednik [v ] - poprzednik wierzchołka v na jedynej sciezcełaczacej v z korzeniem.
Poprzednik korzenia jest nieokreslony; w algorytmach zakładamy,ze jest równy 0 lub NIL.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 13 / 42
Załozenia - przykład
a b c
d
e
f
g
h
i
j
k
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 14 / 42
Załozenia - przykład
a
(g,g)
b
(g,g)
c
(g,b)
d
(g,g)
e
(g,g)
f
(g,d)
g
(g,NIL)
h
(g,b)
i
(g,b)
j (g,g)
k
(g,e)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 15 / 42
Generowanie drzew rozpinajacych grafu - idea
Proces generowania wszystkich drzew rozpinajacych wymaga dwóchoperacji:
Jezeli kolejna krawedz z listy nie zamyka cyklu (jestzaakceptowana), to dodanie jej powoduje połaczenie dwóch drzewT 1 i T 2 w jedno nowe drzewo T i w zwiazku z tym nalezy dokonacodpowiedniej zmiany etykiet wierzchołków T (Procedura A i B) .
Po otrzymaniu drzewa rozpinajacego lub wyczerpaniu sie listykrawedzi w procesie generowania drzew, wykonujemy krok“powrotu” polegajacy na wyrzuceniu ostatnio dodanej krawedzi.Powoduje to rozbicie pewnego drzewa T na dwa poddrzewa T 1 iT 2 (Procedura C) .
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 16 / 42
Procedura A - pseudokod
Zamiana etykiet wierzchołków drzewa T o korzeniu r , pooperacji zamiany r na nowy korzen v.
Algorytm NowyKorze n(v):1: StaryKorzen := Korzen[v ]2: if StaryKorzen = v then3: return;4: end if5: v1 := 0; v2 := v ;6: repeat7: p := v1; v1 := v2; v2 := Poprzednik [v1]; Poprzednik [v1] := p;8: until v1 = StaryKorzen9: for each w ∈ V do
10: if Korzen[w ] = StaryKorzen then11: Korzen[w ] = v ;12: end if13: end for
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 17 / 42
Procedura A - przykład
operacja zamiany korzenia g na nowy korzen i .
a
(g,g)
b
(g,g)
c
(g,b)
d
(g,g)
e
(g,g)
f
(g,d)
g
(g,NIL)
h
(g,b)
i
(g,b)
j (g,g)
k
(g,e)
a
(g,g)
b
(g,g)
c
(g,b)
d
(g,g)
e
(g,g)
f
(g,d)
g
(g,NIL)
h
(g,b)
i
(g,b)
j (g,g)
k
(g,e)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 18 / 42
Procedura A - przykład, cd.
zmieniamy skierowanie krawedzi na sciezce z g do i .zmieniamy drugie etykiety wierzchołków (6=i) tej sciezki. Etykietypozostałych wierzchołków w drzewie T pozostaja bez zmian.
a
(g,g)
b
(g,g)
c
(g,b)
d
(g,g)
e
(g,g)
f
(g,d)
g
(g,NIL)
h
(g,b)
i
(g,b)
j (g,g)
k
(g,e)
a
(g,g)
b
(g, i)
c
(g,b)
d
(g,g)
e
(g,g)
f
(g,d)
g
(g,b)
h
(g,b)
i
(g,b)
j (g,g)
k
(g,e)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 19 / 42
Procedura A - przykład, cd.
Wszystkie wierzchołki drzewa T otrzymuja pierwsza etykiete(okreslajaca korzen) równa i , a wierzchołek i dostaje drugaetykiete postaci (i ,NIL).
a
(g,g)
b
(g,g)
c
(g,b)
d
(g,g)
e
(g,g)
f
(g,d)
g
(g,NIL)
h
(g,b)
i
(g,b)
j (g,g)
k
(g,e)
a
(i ,g)
b
(i , i)
c
(i ,b)
d
(i ,g)
e
(i ,g)
f
(i ,d)
g
(i ,b)
h
(i ,b)
i
(i ,NIL)
j (i ,g)
k
(i ,e)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 20 / 42
Procedura B - pseudokod
Zamienia etykiety wierzchołków dwóch drzew T 1 i T 2, okorzeniach odpowiednio r1 i r2, r1 < r2, po operacji ichpołaczenia przez dodanie krawedzi e = (u, v), gdzieu ∈ V (T 1), v ∈ V (T 2).
Algorytm DodajKrawedz ( e = (u, v)):1: v1 := Korzen[u]; v2 := Korzen[v ];2: if v2 < v1 then3: zamien(v1, v2); zamien(u, v);4: end if5: NowyKorzen(v);6: Poprzednik [v ] := u;7: for each w ∈ V do8: if Korzen[w ] = v2 then9: Korzen[w ] = v1;
10: end if11: end for
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 21 / 42
Procedura B - Przykład
Połaczenie dwóch drzew T 1 i T 2, o korzeniach odpowiednio d i m,przez dodanie krawedzi e = (g,b), gdzie g ∈ V (T 1), b ∈ V (T 2).
a
(d , g)
b
(m, c)
c
(m,m)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(m, b)
i
(m, b)
j
(d , g)
k
(d , e)
m
(m,NIL)
a
(d , g)
b
(m, c)
c
(m,m)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(m, b)
i
(m, b)
j
(d , g)
k
(d , e)
m
(m,NIL)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 22 / 42
Procedura B - Przykład, cd.
wierzchołkom w drzewie T 2 zmieniamy drugie etykiety tak jakprzy zamianie korzenia z m na b (Procedura A); w drzewie T1drugie etykiety wierzchołków pozostaja bez zmian.
a
(d , g)
b
(m, c)
c
(m,m)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(m, b)
i
(m, b)
j
(d , g)
k
(d , e)
m
(m,NIL)
a
(d , g)
b
(b,NIL)
c
(b, b)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(b, b)
i
(b, b)
j
(d , g)
k
(d , e)
m
(b, c)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 23 / 42
Procedura B - Przykład, cd.
wierzchołkowi b jako druga etykiete przypisujemy g.wszystkie wierzchołki drzewa T 2 otrzymuja pierwsza etykieterówna d ; w drzewie T1 pierwsze etykiety wierzchołków pozostajabez zmian.
a
(d , g)
b
(b,NIL)
c
(b, b)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(b, b)
i
(b, b)
j
(d , g)
k
(d , e)
m
(b, c)
a
(d , g)
b
(d , g)
c
(d , b)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(d , b)
i
(d , b)
j
(d , g)
k
(d , e)
m
(d , c)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 24 / 42
Procedura C - pseudokod
Zamiania etykiet wierzchołków drzewa T o korzeniu r pousunieciu z niego krawedzi e = (u, v), czyli rozbiciu T na dwadrzewa T 1 i T 2, gdzie u ∈ V (T 1), v ∈ V (T 2) i r ∈ V (T 1).
UWAGA! W naszym przypadku zawsze usuwamy ostatnio dodanakrawedz, wiec wierzchołek u jest wierzchołkiem wiszacym i pousunieciu krawedzi stanie sie drzewem trywialnym(jednowierzchołkowym). Zatem proces usuniecia krawedzi polegajedynie na zmianie atrybutów wierzchołka u. Realizuje to algorytmUsunKrawedz .Algorytm Usu nKrawedz(e=(u,v)):
1: if Poprzednik [u] = v then2: zamien(u, v)3: end if4: Poprzednik [v ] := 0;5: Korzen[v ] = v ;
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 25 / 42
Procedura C - Przykład
W drzewie T 1 obie etykiety wierzchołków pozostaja bez zmian.
Wierzchołkowi b przypisujemy etykiete (b, 0) (staje sie korzeniemdrzewa T 2). Drugie etykiety pozostałych wierzchołków w drzewie T 2pozostaja bez zmian, ale otrzymuja pierwsza etykiete równa b.
a
(d , g)
b
(d , g)
c
(d , b)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(d , b)
i
(d , b)
j
(d , g)
k
(d , e)
m
(d , c)
a
(d , g)
b
(b,NIL)
c
(b, b)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(b, b)
i
(b, b)
j
(d , g)
k
(d , e)
m
(b, c)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 26 / 42
Procedura C - Przykład, cd.
Usuniecie krawedzi (g, b).
a
(d , g)
b
(b,NIL)
c
(b, b)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(b, b)
i
(b, b)
j
(d , g)
k
(d , e)
m
(b, c)
a
(d , g)
b
(b,NIL)
c
(b, b)
d
(d ,NIL)
e
(d , g)
f
(d , d)
g
(d , d)
h
(b, b)
i
(b, b)
j
(d , g)
k
(d , e)
m
(b, c)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 27 / 42
Algorytm generowania wszystkich drzewrozpinajacych grafu
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 28 / 42
Znalezc wszystkie drzewa rozpiete grafu
v1a
v2
cd e
v3
b
v4f
v5g
a, ab, abc, abd, abde, abdf,abdg, abef, abeg, abfg, abg,ac, acd, acde, acdf, acdg, ace,acef, aceg, acf, acfg, acg, ad,ade, adef, adeg, adf, adfg,adg, aef, aefg, aeg, af, afg, ag,
b, bc, bcd, bcde, bcdf, bcdg,bce, bcef, bceg, bcf, bcfg, bcg,bd, bde, bdef, bdeg, bdf, bdfg,bdg, be, bef, befg, beg, bf, bfg,bg, c.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 29 / 42
Drzewa rozpinajace o minimalnej wadze
Jezeli mamy do czynienia z grafem z wagami, to najczesciejinteresuje nas znalezienie drzewa rozpinajacego o minimalnejwadze, tzn., drzewa z najmniejsza suma wag jego krawedzi.Aby znalezc drzewo o zadanych własnosciach mozna zastosowacdwa algorytmy:
Kruskala (algorytm zachłanny)Prima (algorytm najblizszego sasiada).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 30 / 42
Algorytmy Kruskala
Algorytm jest oparty o metode zachłanna i polega nałaczeniu wielu poddrzew w jedno za pomoca krawedzi onajmniejszej wadze.
Wybierz krawedz (która nie jest petla) e1 tak, by waga tej krawedzibyła najmniejsza.Jezeli krawedzie e1, e2, . . ., ek zostały juz wybrane, to zpozostałych E \ {e1,e2, . . . ,ek} wybierz krawedz ek+1 w takisposób aby:
graf, który składa sie tylko z krawedzi e1, e2, . . ., ek , ek+1 byłacykliczny, orazwaga krawedzi ek+1 była najmniejsza.
Jesli nie mozna wykonac kroku 2, to STOP.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 31 / 42
Algorytm Kruskala - Złozonosc obliczeniowa
Algorytm mozna podzielic na dwa etapy:w pierwszym etapie sortujemy krawedzie według wag w czasieO(m · log(m)).w drugim etapie budujemy rozpiete drzewo poprzez wybórnajkrótszych krawedzi ze zbioru krawedzi E(G); ten etap moznawykonac w czasie O(m · log(n)).
Sumaryczny czas pracy algorytmu Kruskala wynosi: O(m · log(n))
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 32 / 42
Algorytm Kruskala - Przykład
a4
2
b2
2
c
8
d3
e
1
7f
6
Po posortowaniu krawedzi wg.wag otrzymujemy:ae=1 , af=2 , bc=2 , be=2 ,de=3 , ab=4 , fd=6 , ef=7 ,cd=8
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 33 / 42
Algorytm Kruskala - Przykład
Krok 1.
a4
2
b2
2
c
8
d3
e
1
7f
6
Krok 2.
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 34 / 42
Algorytm Kruskala - Przykład
Krok 3.
a4
2
b2
2
c
8
d3
e
1
7f
6
Krok 4 - scalenie.
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 35 / 42
Algorytm Kruskala - Przykład
Krok 5.
a4
2
b2
2
c
8
d3
e
1
7f
6
Minimalne drzewo.
a
2
b2
2
c
d3
e
1
f
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 36 / 42
Algorytm Prima
Algorytm ten jest, podobnie jak algorytm Kruskala oparty ometode zachłanna.
Budowe minimalnego drzewa rozpinajacego zaczynamy oddowolnego wierzchołka, np. od pierwszego. Dodajemywierzchołek do drzewa, a wszystkie krawedzie incydentneumieszczamy na posortowanej wg. wag liscie.
Nastepnie zdejmujemy z listy pierwszy element (o najmniejszejwadze) i jezeli wierzchołek, który łaczy nie nalezy do drzewa,dodajemy go do drzewa a na liscie znów umieszczamy wszystkiekrawedzie incydentne z wierzchołkiem, który dodalismy.
Jednym zdaniem: zawsze dodajemy do drzewa krawedz onajmniejszej wadze, osiagalna (w przeciwienstwie do Kruskala) zjakiegos wierzchołka tego drzewa.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 37 / 42
Algorytm Prima - Przykład
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 38 / 42
Algorytm Prima - Przykład
Krok 1.
a4
2
b2
2
c
8
d3
e
1
7f
6
Krok 2.
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 39 / 42
Algorytm Prima - Przykład
Krok 3.
a4
2
b2
2
c
8
d3
e
1
7f
6
Krok 4
a4
2
b2
2
c
8
d3
e
1
7f
6
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 40 / 42
Algorytm Prima - Przykład
Krok 5.
a4
2
b2
2
c
8
d3
e
1
7f
6
Minimalne Drzewo
a
2
b2
2
c
d3
e
1
f
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 41 / 42
Algorytm Prima a Algorytm Kruskala - Przykład
Minimalne Drzewo wg. AlgorytmuKruskala.
a
2
b2
2
c
d3
e
1
f
Minimalne Drzewo wg. AlgorytmuPrima
a
2
b2
2
c
d3
e
1
f
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 42 / 42
Top Related