Minimalne drzewa rozpinające

9
Minimalne drzewa rozpinające Podgraf T spójnego grafu G nazywa się jego drzewem rozpinającym, jeśli T jest acykliczny i łączy wszystkie wierzchołki G. Jeśli krawędziom przypisane są wagi, i suma wag krawędzi T jest minimalna, T nazywamy minimalnym drzewem rozpinającym. 4 8 7 9 14 10 2 1 11 2 7 8 4 6 Przykład minimalnego drzewa rozpinającego

description

8. 7. 4. 9. 2. 14. 11. 7. 4. 6. 10. 8. 1. 2. Minimalne drzewa rozpinające. - PowerPoint PPT Presentation

Transcript of Minimalne drzewa rozpinające

Page 1: Minimalne drzewa rozpinające

Minimalne drzewa rozpinające

Podgraf T spójnego grafu G nazywa się jego drzewem rozpinającym, jeśli T jest acykliczny i łączy wszystkie wierzchołki G. Jeśli krawędziom przypisane są wagi, i suma wag krawędzi T jest minimalna, T nazywamy minimalnym drzewem rozpinającym.

48 7

9

14

10

21

11 2

7

8

46

Przykład minimalnego drzewa rozpinającego

Page 2: Minimalne drzewa rozpinające

Minimalne drzewa rozpinające (algorytm ogólny)

Podczas wykonywania algorytmu jest utrzymywany zbiór A – podzbiór minimalnego drzewa rozpinającego. W każdym kroku algorytmu jest wyznaczana krawędź, którą można dodać do A bez naruszenia tego niezmiennika. Taką krawędź nazywamy krawędzią bezpieczną.

Generic-MST

1 A :=

2 while A nie tworzy drzewa rozpinającego

3 do znajdź krawędź (u, v), która jest bezpieczna dla A

4 A := A {(u, v)}

5 return A

Page 3: Minimalne drzewa rozpinające

Przekroje

Przekrojem (S, V-S) grafu nieskierowanego nazywamy podział V na zbiory S i V-S. Krawędź (u, v) E krzyżuje się z przekrojem (S, V-S), jeśli jeden z jej końców należy do S, a drugi do V-S. Przekrój uwzględnia zbiór krawędzi A, jeśli żadna z krawędzi A nie krzyżuje się z tym przekrojem. Krawędź krzyżująca się z przekrojem jest krawędzią lekką, jeśli jej waga jest najmniejsza sposród wszystkich wag krawędzi krzyżujących się z tym przekrojem.

Page 4: Minimalne drzewa rozpinające

4

8 79

14

10

21

112

7

8

46

u

v

x

y

Page 5: Minimalne drzewa rozpinające

Twerdzenie o bezpiecznej krawędzi

Niech G = (V, E) będzie spójnym grafem nieskierowanym z funkcją wagową w i o wartościach rzeczywistych określoną na E. Niech A będzie podzbiorem E zawartym w pewnym minimalnym drzewie rozpinającym grafu G, niech (S, V-S) będzie dowolnym przekrojem G uwzględniającym A i niech (u, v) będzie krawędzią lekką krzyżującą się z (S, V-S). Wtedy krawędź (u, v) jest bezpieczna dla A.

Page 6: Minimalne drzewa rozpinające

Algorytm Kruskala

MST-Kruskal(G, w)

1 A := 2 for każdy wierzchołek vV[G]

3 do Make-Set(v)

4 posortuj krawędzie z E niemalejąco względem wag w

5 for każda krawędź (u,v) E, w kolejności niemalejących wag

6 do if Find-Set(u) Find-Set(v)

7 then A := A {(u,v)}

8 Union(u,v)

9 return A

Page 7: Minimalne drzewa rozpinające

Algorytm Kruskala (przykład)4

8 79

14

10

21

11 27

8

46

48 7

9

14

10

21

11 27

8

46

48 7

9

14

10

21

11 27

8

46

48 7

9

14

10

21

11 27

8

46

21

48 7

9

10

11 27

8

46

48 7

9

14

10

21

11 27

8

46

Page 8: Minimalne drzewa rozpinające

Algorytm PrimaMST-Prim(G, w, r)

1 Q := V[G]

2 for każdy uQ

3 do key[u] := 4 key[r] := 0

5 [r] := NIL

6 while Q 7 do u := Extract-Min(Q)

8 for każdy v Adj[u]

9 do if vQ i w(u,v) < key[v]

10 then [v] := u

11 key[v] := w(u,v)

Page 9: Minimalne drzewa rozpinające

Algorytm Prima (przykład)8 7

4 9

14

10

21

11 27

8

46

48 7

9

14

10

21

11 27

8

46

48 7

9

14

10

21

11 27

8

46

48 7

9

14

10

21

11 27

8

46

21

48 7

9

10

11 27

8

46

8 7

21

4 9

14

10

11 27

8

46