Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Reprezentacja grafów i operacje na grafach na przykładzie algorytmu Dijkstry i algorytmu na odnajdywanie Silnych Spójnych Składowych Temat Opracowali:

Podobne prezentacje


Prezentacja na temat: "Reprezentacja grafów i operacje na grafach na przykładzie algorytmu Dijkstry i algorytmu na odnajdywanie Silnych Spójnych Składowych Temat Opracowali:"— Zapis prezentacji:

1 Reprezentacja grafów i operacje na grafach na przykładzie algorytmu Dijkstry i algorytmu na odnajdywanie Silnych Spójnych Składowych Temat Opracowali: Adrian Kuczyński Marcin Wiankowski

2 Graf i jego reprezentacje Pojęcie grafu Macierz sąsiedztwa Lista sąsiedztwa Algorytmy Algorytm Dijkstry Algorytm Silnych Spójnych Składowych

3

4 Graf to – w uproszczeniu – zbiór wierzchołków, które mogą być połączone krawędziami, w taki sposób, że każda krawędź kończy się i zaczyna w którymś z wierzchołków. Ze względu na sposób połączenia wierzchołków grafy dzielimy na : skierowane i nieskierowane. Za pierwszego teoretyka i badacza grafów uważa się Leonarda Eulera, który rozstrzygnął zagadnienie mostów królewieckich. (źródło Wikipedia) Rys1. Graf skierowany (digit)Rys2. Graf nieskierowany Pojęcia: V - oznacza zbiór wierzchołków E - oznacza zbiór krawędzi

5 Wyraz leżący na przecięciu i-tego wiersza i j -tej kolumny informuje o istnieniu krawędzi od wierzchołka i-tego do j-tego, dla grafu ważonego zamiast 1 wpisywana jest waga łączącej je krawędzi Jest macierzą wymiaru V(G) 2 (tyle zajmuje w pamięci RAM O(V 2 )) Stosowana dla grafów gęstych ( E jest bliskie V 2 ) albo w przypadku, gdy istnieje potrzeba szybkiego stwierdzenia czy istnieje krawędź łącząca dane 2 wierzchołki 1 wierzchołek 2 wierzchołek Uwaga: Dla grafów nieskierowanych macierz jest symetryczna względem głównej przekątnej.

6 waga = 2; Dla każdego wierzchołka zapamiętywana jest w tablicy lista sąsiadujących z nim wierzchołków, indeks w tablicy odpowiada liście sąsiedztwa danego wierzchołka Rozmiar zajmowanej przez nią pamięci dla obu typów grafów wynosi O(V+E) Wagi krawędzi są dane przez funkcję wagową w:E->R. Dla przykładu w(1,3) dla krawędzi (1,3) E jest pamiętana z wierzchołkiem 3 (dodatkowe pole) na liście 1. 2 2 3 / / / 2 2 4 / 3 / Uwaga: Ta reprezentacja będzie wykorzystana w algorytmie Dijkstry. waga = 2

7

8 Algorytm opracowany przez holenderskiego informatyka Edsgera Dijkstrę - odnajduje najkrótsze ścieżki z pojedynczego źródła w grafie o nieujemnych wagach krawędzi.

9 Problem: Dany jest ważony graf skierowany G=(V,E) i wyróżniony wierzchołek v o V, nazywany źródłem; dla każdego wierzchołka v V należy znaleźć najkrótszą ścieżkę z v o do v. Wagą ścieżki jest suma wag tworzących ją krawędzi. Najkrótszą ścieżką jest ścieżka o najmniejszej wadze. vovo 6 3 5 7 11 9 3 5 0 2 1 6 2 4 3 Ważony graf skierowanyDrzewo najkrótszych ścieżek vovo 6 3 5 7 9 3 5 0 2 1 6 2 4 3 11 Uwaga: Może być wiele najkrótszych ścieżek prowadzących do danego wierzchołka.

10 Używane struktury danych: d[v] (tablica) - oszacowanie wagi najkrótszej ścieżki od źródła do v p[v] (tablica) - poprzednik v S – zbiór wierzchołków grafu o policzonych już najkrótszych ścieżkach Q - kolejka priorytetowa zawierająca wierzchołki spoza zbioru S (V - S), priorytetem jest parametr d Initialize-Single-Source(G, v o ) // inicjalizacja grafu w czasie O(V) 1for każdy wierzchołek v V[G] 2do d[v] := 3 [v] := NIL 4d[v o ] := 0

11 Relax(u, v, w) 1if d[v] > d[u] + w(u, v) 2then d[v] := d[u] + w(u, v) 3 [v] := u Relaksacja krawędzi - ewentualne zmniejszenie oszacowania wagi najkrótszej ścieżki d[v] 59 57 2 2 RELAX(u,v,w) Uwaga: Wartości w wierzchołkach to d[v],relaksacja może, ale nie musi zmniejszyć d[v].

12 Dijkstra(G, w, v o ) 1Initialize-Single-Source(G, v o ) 2S := 3Q := V[G] 4while Q 5do u := Extract-Min(Q) 6 S := S {u} 7 for każdy wierzchołek v Adj[u] 8do Relax(u, v, w) Gdzie: S – zbiór z wierzchołkami, dla których wagi najkrótszych ścieżek ze źródła s zostały obliczone Q - kolejka priorytetowa zawierająca wierzchołki spoza zbioru S (V - S) v o – wierzchołek od którego budowane są najkrótsze ścieżki G – graf wejściowy Adj[u] – lista sąsiedztwa wierzchołka u

13 V = {1,2,3,4,5,6} E = {(1-2,3),(1-4,3),(2-3,2),(3-1,6),(3-6,1),(4-5,1),(5-3,1),(5-6,2),(6-4,3)} Będziemy wyznaczać najkrótsze ścieżki pomiędzy wyróżnionym wierzchołkiem (źródłem), a wszystkimi pozostałymi wierzchołkami w grafie.

14 Tworzymy dwa zbiory S (wierzchołki, dla których są policzone najkrótsze ścieżki) oraz Q (wierzchołki jeszcze nie przetworzone). Zbiór S jest początkowo pusty. Zbiór Q obejmuje wszystkie wierzchołki grafu.

15 Dla każdego wierzchołka v ustawiamy d(v). Dla wybranego wierzchołka v o ustawiamy d(v o ) 0. Ustawiamy również p(v) 0.

16 W zbiorze Q szukamy wierzchołka o najmniejszym d - wierzchołek 1 - przenosimy go do zbioru S. Następnie sprawdzamy wartość d jego sąsiadów (wierzchołki 2 i 4). Jeśli ich d jest większe od kosztu d(1) + w(1,v), to modyfikujemy d i p dla tych wierzchołków.

17 W zbiorze Q szukamy wierzchołka o najmniejszym d. Są dwa takie wierzchołki: 2 i 4 o d=3. Wybieramy arbitralnie wierzchołek nr 2 i przenosimy go do zbioru S. Wierzchołek 2 posiada tylko jednego sąsiada - 3. Modyfikujemy odpowiednio d[3] i p[3]

18 W zbiorze Q szukamy wierzchołka o najmniejszym d. Teraz jest to wierzchołek 4 o d[4] = 3. Przenosimy go do zbioru S. Wierzchołek 4 posiada tylko jednego sąsiada - 5. Modyfikujemy odpowiednio d[5] i p[5].

19 W zbiorze Q szukamy wierzchołka o najmniejszym d. Jest to wierzchołek 5 o d[5] = 4. Przenosimy go do zbioru S. Wierzchołek 5 posiada dwóch sąsiadów: 3 i 6. Ponieważ d[3]=5 jest takie samo jak d[5] + waga(5-3) = 4+1=5, nie modyfikujemy parametrów d i p dla wierzchołka 3. Do modyfikacji jest tylko wierzchołek 6.

20 W zbiorze Q szukamy wierzchołka o najmniejszym d. Jest to wierzchołek 3 o d[3] = 5. Przenosimy go do zbioru S. Wierzchołek 3 posiada dwóch sąsiadów: 1 i 6. Ponieważ wierzchołek 1 jest już w zbiorze S, to nie bierzemy go pod uwagę. Drugi wierzchołek posiada d[6]=6, czyli takie samo jak d[3]+waga(3-6)=5+1=6. Nie modyfikujemy zatem wierzchołka 6.

21 Do zbioru S przenosimy ostatni wierzchołek z Q. Wierzchołek ten nie posiada sąsiadów w Q połączonych z nim krawędzią, dlatego nic nie modyfikujemy. Ponieważ zbiór Q stał się pusty, algorytm kończymy.

22 wykorzystując "naiwną" implementację poprzez zwykłą tablicę, otrzymujemy algorytm o złożoności O(V 2 ) Złożoność obliczeniowa algorytmu Dijkstry zależy od liczby V wierzchołków i E krawędzi grafu. O rzędzie złożoności decyduje implementacja kolejki priorytetowej: w implementacji kolejki poprzez kopiec, złożoność wynosi O(ElogV) po zastąpieniu zwykłego kopca kopcem Fibonacciego, złożoność zmniejsza się do O(E + VlogV) Uwaga: Pierwszy wariant jest optymalny dla grafów gęstych, drugi jest szybszy dla grafów rzadkich, trzeci jest bardzo rzadko używany ze względu na duży stopień skomplikowania i niewielki w porównaniu z nim zysk czasowy.

23 Algorytm zachłanny (ang. greedy algorithm) – algorytm, który w celu wyznaczenia rozwiązania w każdym kroku dokonuje zachłannego, tj. najlepiej rokującego w danym momencie wyboru rozwiązania częściowego. Innymi słowy algorytm zachłanny, dokonuje decyzji lokalnie optymalnej, dokonuje on wyboru wydającego się w danej chwili najlepszym, kontynuując rozwiązanie podproblemu wynikającego z podjętej decyzji. (źródło Wikipedia)ang.

24 Programy do nawigacji – np. Automapa Przesyłanie pakietów internetowych – routing W grach komputerowych – wyznaczanie trasy komp. przeciwnika I wiele innych.

25

26 DZIĘKUJEMY ZA UWAGĘ ;-) Mamy nadzieję, nasza prezentacja pokazała jak wielki potencjał mają omówione algorytmy i graf jako struktura danych, która umożliwia rozwiązanie dosyć skomplikowanych problemów.

27 http://wikipedia.pl http://edu.i-lo.tarnow.pl Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford Wprowadzenie do algorytmów


Pobierz ppt "Reprezentacja grafów i operacje na grafach na przykładzie algorytmu Dijkstry i algorytmu na odnajdywanie Silnych Spójnych Składowych Temat Opracowali:"

Podobne prezentacje


Reklamy Google