ALGORYTMY I STRUKTURY DANYCH

20
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 12 Algorytmy na grafach - metoda zachłanna Grażyna Mirkowska PJWSTK, 2002/2003

description

ALGORYTMY I STRUKTURY DANYCH. WYKŁAD 12 Algorytmy na grafach - metoda zachłanna Grażyna Mirkowska PJWSTK, 2002/2003. Plan wykładu. Idea algorytmów zachłannych Problem drzew rozpinających Chodzenie po grafie ze stosem i kolejką Algorytm Kruskala Problem najkrótszych ścieżek - PowerPoint PPT Presentation

Transcript of ALGORYTMY I STRUKTURY DANYCH

Page 1: ALGORYTMY I STRUKTURY  DANYCH

ALGORYTMY I STRUKTURY DANYCH

WYKŁAD 12 Algorytmy na grafach - metoda zachłanna

Grażyna MirkowskaPJWSTK, 2002/2003

Page 2: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 2

Plan wykładu

Idea algorytmów zachłannych Problem drzew rozpinających

– Chodzenie po grafie ze stosem i kolejką– Algorytm Kruskala

Problem najkrótszych ścieżek– Algorytm Dijkstry –

Page 3: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 3

Na czym to polega?

W każdym kroku, w którym trzeba dokonać wyboru, wybierać zawsze rozwiązanie lokalnie optymalne, takie które w danym momencie działania algorytmu jest najlepsze.

ZASADAZASADA„Greedy” algorithms

Page 4: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 4

Drzewa rozpinające

Niech G będzie dowolnym grafem niezorientowanym <V, E>.

Drzewem rozpinającym grafu G = <V, E> nazywamy graf G* =<V*, E*> taki, że

(1) V* = V, E* E(2) G* jest drzewem (tzn. graf spójny i acykliczny).

Graf i jego drzewa rozpinające

Page 5: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 5

Jak znaleźć drzewo rozpinające grafu (1)?

BFSBFSWłóż do kolejki wybrany wierzchołek grafu i zamarkuj go.

Dopóki kolejka nie jest pusta

1. Weź pierwszy element z kolejki i dopisz do kolejki wszystkie wierzchołki z nim incydentne o ile nie były zamarkowane i zamarkuj je.

2. Wypisz krawędzie odpowiadające dopisanym wierzchołkom.3. Usuń pierwszy element z kolejki.

a b

c

de

f

a b fc e

a

Wynik:Wynik: ab af bc

fbc efc e d

bee d

dcd

Page 6: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 6

Jak znaleźć drzewo rozpinające grafu(2)?

DFSDFSWłóż na stos wybrany wierzchołek grafu i zamarkuj go.

Dopóki stos nie jest pusty :

1. Weź element ze szczytu stosu.

2 . Usuń ze stosu ten element .

3. Dopisz do stosu wszystkie wierzchołki z nim incydentne, których jeszcze nie zamarkowano, a dopisane wierzchołki zamarkuj.

4. Wypisz krawędzie odpowiadające dopisanym wierzchołkom.

a b

c

de

f

WynikWynik:

a

ab

bf

bbce

af fc

bcd

fe

bc

ed

Page 7: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 7

Minimalne drzewo rozpinające

Niech będzie dany graf G = <V, E> spójny niezorientowany, skończony i niech c : E R+ będzie funkcją kosztu określoną na krawędziach tego grafu.

Problem Problem Dla danego skończonego grafu G oraz danej funkcji kosztu c, znaleźć minimalne drzewo rozpinające, tzn. takie drzewo <V, T> rozpinające grafu G, że suma kosztów jego krawędzi eT c (e) jest najmniejsza.

Page 8: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 8

Przykład: sieć wodociągowa

14

6

75

3

210

8

4

87

7

3 74

515

6

9

14

6

75

3

210

8

4

87

7

3 74

515

6

9

Jakieś drzewo rozpinające

Minimalne drzewo rozpinające

Page 9: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 9

Lemat

Niech G = <V, E> będzie grafem spójnym skończonym i nich c będzie jego funkcją kosztu.

Niech d1= <V1, T1>, d2= <V2, T2>,......, dk = <Vk, Tk>

będzie danym lasem rozpinającym G

{Vi: 1 i k}= VTi E dla 1 i k Vi Vj = dla i j

di - drzewo

Niech e = (v,w) będzie krawędzią o minimalnym koszcie, która nie należy do żadnego z drzew di.

Nie istnieje drzewo rozpinające <V,T*> grafu G, takie że e T* oraz <V, T*> ma najmniejszy koszt wśród drzew rozpinających zawierających wszystkie Ti.

Vi v

w

w’

v’

Page 10: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 10

Algorytm Kruskala

Utworzyć kolejkę priorytetową PQ z wszystkimi krawędziami grafu, uporządkowanymi ze względu na koszt.

Utworzyć początkowy podział Po zbioru V (tzn. rodzinę jednoelementowych zbiorów {x}, gdzie x V}.

Przeglądać kolejno elementy kolejki i jeżeli końce rozważanej krawędzi należą do różnych zbiorów podziału, to krawędź dołączamy do tworzonego drzewa, a zbiory podziału łączymy.

Jeśli drzewo rozpinające ma mieć koszt minimalny i ma zawierać dany las drzew , to musi też zawierać krawędź e o minimalnym koszcie wsród krawędzi, które do tego lasu nie należą.

Page 11: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 11

Przykład

5

2

3

4

7

1

6

6

3

15

75

71

42

8

10

1. (1,2)

2. (1,4)

3.(2,3)

4. (1,3)

5.(4,5)

6. (3,5)7. (1,5)7. (6,7)

8. (1,6)

10. (7,4)15. (4,3)

1| 2| 3| 4| 5| 6| 7

1, 2| 3| 4| 5| 6| 71, 2, 4| 3| 5| 6| 71, 2, 3, 4| 5| 6| 71, 2, 3, 4, 5| 6| 7

1, 2, 3, 4, 5| 6, 7

1, 2, 3, 4, 5, 6, 7Kolejka Kolejka

PriorytetowaPriorytetowa PodziałPodział+

++

+

+

+

+

Page 12: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 12

Algorytm

Zakładam, że 1. pq jest kolejką priorytetową wszystkich krawędzi danego grafu G = <V, E>,

2. P jest początkowym podziałem zbioru V, 3. T pustym stosem (będą tam krawędzie drzewa).

{ while (not empty (pq) and card(P)>1) do kr := min(pq); pq := delmin(pq); A := Find(P,kr.początek); B := Find(P,kr.koniec); if A B then P := Union(P,B,A); T := push(T,kr) fi od }

Find (P,x) = ten zbiór podziału P do którego

należy x

Union(P,B,A) = podział powstający z P przez

połączenie zbiorów A i B.

Page 13: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 13

Jak to zaimplementować?

Koszt utworzenia kolejki priorytetowej – O(m lg m)

Koszt 2m operacji Find O(lg(n))Koszt m operacji Union O(1)

Razem Razem O(m lg n)

Drzewa z balansowaniem i kompresją ścieżek

Struktura Struktura Find-UnionFind-Union

BA A A

Page 14: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 14

Problem ścieżek

Dany jest graf G = <V, E> i jego funkcja kosztu c : E R +.

Znaleźć najkrótsze drogi od ustalonego wierzchołka (źródła) do wszystkich innych wierzchołków.

14

6

75

3

210

8

4

87

7

3 74

515

6

2

Suma kosztów krawędzi leżących na tej drodze jest

najmniejsza

Page 15: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 15

Metoda Dijkstry

W kolejnych etapach algorytmu zbiór wierzchołków osiągalnych ze źródła jest powiększany o wierzchołki incydentne z ostatnio dołączonymi.

Zawsze staramy się by dołączać te wierzchołki, których osiągnięcie wymaga najmniejszego kosztu (które znajdują się „najbliżej” zbioru już wcześniej wybranych wierzchołków.

Page 16: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 16

Struktura danych

Tablica d (1: n) d[i] = długość najkrótszej ścieżki miedzy źródłem a wierzchołkiem i Na początku d[i] = c(s,i) jeśli (s,i) E,

d[i] = + w p.p.Tablica P(1:n) P[i] = ojciec wierzchołka i na najkrótszej ścieżce od s do i.

Zbiór wierzchołków S1 osiągalnych z s.

Zbiór S2 wierzchołków osiągalnych z S1, S2 = {y : istnieje x S1, że (x,y) E}.

Zbiór wierzchołków S3, których jeszcze nie sklasyfikowano.

Na początku S1 = {s}.

Na początku S3 = V-{s}.

Page 17: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 17

Przykład

A B

C

DE

F

G

HI

2 5

4

2

4

2

1

1

5

659

6

1

3

A B C D E F G H I JdP

AS1 A

S2

FG

B

0 2 9 5A A A

S1 A

FG

B C

6B

Page 18: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 18

c.d. przykładu

A B

C

DE

F

G

HI

2 5

4

2

4

2

1

1

5

659

6

1

3

S1 A

F

G

BS2

C

A B C D E F G H I JdP

0 2 9 5A A A

6B

I

H

GG10 7

S1 A

F

G

B C

I

H

S2

D

8C

Page 19: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 19

Cd. przykładu

A B C D E F G H I JdP

0 2 9 5A A A

6B GG

10 7

S1 A

F

G

B C

I H

S2

D

8C

A B

C

DE

F

G

HI

2 5

4

2

4

2

1

1

5

659

6

1

3

Itd.............

Page 20: ALGORYTMY I STRUKTURY  DANYCH

styczen 2003 G. Mirkowska, ASD_12 Algorytmy na grafach 20

Algorytm

{x :=s;While niepusty (S3) doDla wszystkich wierzchołków y incydentnych z x do case y S2 if d(x) +c(x,y) <d(y) then P(y) := x; d(y) := d(x) +c(x,y) fi ; case y S3 S3 := S3 –{y}; S2 := S2 +{y}; P(y) := x; d(y) := d(x) +c(x,y);od;Wybierz taki element w zb. S2, że d(z) jest minimalnex := z;od}

Koszt Koszt Algorytmu Algorytmu DijkstryDijkstry

O(card(V)2)