1 / 20

ALGORYTMY I STRUKTURY DANYCH

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

garvey
Télécharger la présentation

ALGORYTMY I STRUKTURY DANYCH

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 G. Mirkowska, ASD_12 Algorytmy na grafach

  3. Na czym to polega? „Greedy” algorithms ZASADA 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. 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). Definicja Graf i jego drzewa rozpinające G. Mirkowska, ASD_12 Algorytmy na grafach

  5. a b c f d e a b f b f f c e c e e d Jak znaleźć drzewo rozpinające grafu (1)? BFSWłóż 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 c e d Wynik: ab af bc be cd d G. Mirkowska, ASD_12 Algorytmy na grafach

  6. a b c f d e c c b b Jak znaleźć drzewo rozpinające grafu(2)? DFSWłóż 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. e d f c a b b b ab af fe ed Wynik: fc 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 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 SeT c (e) jest najmniejsza. G. Mirkowska, ASD_12 Algorytmy na grafach

  8. 1 1 8 8 10 10 4 4 2 2 7 7 3 3 4 4 4 4 7 7 3 3 6 6 5 5 6 6 5 5 15 15 8 8 7 7 7 7 9 9 Przykład: sieć wodociągowa Jakieś drzewo rozpinające Minimalne drzewo rozpinające G. Mirkowska, ASD_12 Algorytmy na grafach

  9. v’ w’ Lemat {Vi: 1 i  k}= V Ti E dla 1 i  k Vi Vj =  dla i j di - drzewo 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 Niech e = (v,w) będzie krawędzią o minimalnym koszcie, która nie należy do żadnego z drzew di. v 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. w G. Mirkowska, ASD_12 Algorytmy na grafach

  10. Algorytm Kruskala 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żą. 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. Algorytm G. Mirkowska, ASD_12 Algorytmy na grafach

  11. 5 6 7 2 1 1 3 8 4 3 2 6 15 4 5 7 10 7 Przykład 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| 7 + 1, 2, 4| 3| 5| 6| 7 1, 2, 3, 4| 5| 6| 7 + 1, 2, 3, 4, 5| 6| 7 + 1, 2, 3, 4, 5| 6, 7 + 1, 2, 3, 4, 5, 6, 7 Kolejka Priorytetowa + Podział 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. G. Mirkowska, ASD_12 Algorytmy na grafach

  13. A A A B Jak to zaimplementować? Struktura Find-Union Drzewa z balansowaniem i kompresją ścieżek Koszt utworzenia kolejki priorytetowej – O(m lg m) Koszt 2m operacji Find O(lg(n))Koszt m operacji Union O(1) Koszt Razem O(m lg n) G. Mirkowska, ASD_12 Algorytmy na grafach

  14. 1 8 10 4 2 7 3 4 4 7 3 6 5 6 5 15 8 7 7 2 Problem ścieżek Dany jest graf G = <V, E> i jego funkcja kosztu c : E  R +. Problem Znaleźć najkrótsze drogi od ustalonego wierzchołka (źródła) do wszystkich innych wierzchołków. Suma kosztów krawędzi leżących na tej drodze jest najmniejsza 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. 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. Na początku S1 = {s}. Zbiór S2 wierzchołków osiągalnych z S1, S2 = {y : istnieje x  S1, że (x,y)  E}. Na początku S3 = V-{s}. Zbiór wierzchołków S3, których jeszcze nie sklasyfikowano. G. Mirkowska, ASD_12 Algorytmy na grafach

  17. 2 A B 5 6 9 4 A A B B G 5 2 5 C F 1 I H 4 G G 1 2 3 6 F F E D 1 C S1 A B C D E F G H I J d P Przykład A S2 S1 0 2 6 9 5 A B A A G. Mirkowska, ASD_12 Algorytmy na grafach

  18. S2 2 A B 5 C 6 9 4 A A B B S1 G 5 2 5 C F 1 I H 4 H H G G 1 2 3 6 F F I I E D 1 D A B C D E F G H I J d P c.d. przykładu S2 C S1 0 2 6 8 9 5 10 7 A B C A A G G G. Mirkowska, ASD_12 Algorytmy na grafach

  19. 2 A B 5 6 9 4 G 5 2 5 C F 1 I H 4 1 2 3 6 E D 1 D A B C D E F G H I J d P Cd. przykładu S2 C B S1 A G I H F 0 2 6 8 9 5 10 7 Itd............. A B C A A G G 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 Algorytmu Dijkstry O(card(V)2) G. Mirkowska, ASD_12 Algorytmy na grafach

More Related