algorytmy i struktury danych.algorytm kruskala algorytm prima bo˙zena woz´na-szcze sniak (ajd)´...

Post on 25-Feb-2020

24 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Algorytmy i Struktury Danych.Grafy. Drzewo rozpinajace. Minimalne drzewo rozpinajace.

Bozena Wozna-Szczesniakbwozna@gmail.com

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