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

Slides:



Advertisements
Podobne prezentacje
Algorytmy sortowania i porządkowania
Advertisements

Algorytmy – c.d. złożoność algorytmów struktury danych
Algorytmy – c.d. struktury danych złożoność algorytmów
DOMINOWANIE W GRAFACH Magdalena Lemańska.
Grafy spełniające nierówność Γ(G) < IR(G)
Grafy o średnicy 2 i dowolnej liczbie dominowania
Zaawansowane techniki algorytmiczne
ALGORYTMY GRAFOWE.
METODY ANALIZY PROGRAMÓW
Grażyna Mirkowska PJWSTK 15 listopad 2000
Grafy inaczej, czyli inne modele grafów
ELEMENTY TEORII GRAFÓW
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Minimalne drzewa rozpinające
Algorytm Dijkstry (przykład)
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Elementarne struktury danych Piotr Prokopowicz
Sztuczna Inteligencja 2.1 Metody szukania na ślepo
Ciągi de Bruijna generowanie, własności
-skeletony w przestrzeniach R 2 i R 3 Mirosław Kowaluk Wydział Matematyki, Informatyki i Mechaniki Uniwersytet Warszawski.
ALGORYTMY GEOMETRYCZNE.
WYKŁAD 5. Skojarzenia – ciąg dalszy
WYKŁAD 2. Kolorowanie wierzchołków
WYKŁAD 7. Spójność i rozpięte drzewa
WYKŁAD 1. Grafy są wokół nas. Pojęcia wstępne.
WYKŁAD 8. Siła spójności Wierzchołek v nazywamy wierzchołkiem cięcia grafu G, gdy podgraf G-v ma więcej składowych spójności niż G. Krawędź e nazywamy.
WĘDRÓWKI PO GRAFACH Obchody Eulera Cykle Hamiltona.
WYKŁAD 8. Siła spójności A,B – dowolne podzbiory V(G)
Dariusz Odejewski Krzysztof Wójcik
Promotor: dr inż. Leszek Koszałka Autor: Markuszewski Kamil
Macierz incydencji Macierzą incydencji grafu skierowanego D = (V, A), gdzie V = {1, ..., n} oraz A = {a1, ..., am}, nazywamy macierz I(D) = [aij]i=1,...,n,
Algorytmy grafowe Reprezentacja w pamięci
Algorytmy genetyczne.
WYKŁAD 7. Spójność i rozpięte drzewa Graf jest spójny, gdy dla każdego podziału V na dwa rozłączne podzbiory A i B istnieje krawędź z A do B. Definicja.
Minimalne drzewa rozpinające
Przepływy w sieciach. Twierdzenie minimaksowe.
O relacjach i algorytmach
Algorytmy i struktury danych
Zbiór do posortowania mieści się w pamięci
SKIEROWANE Marek Bil Krzysztof Fitrzyk Krzysztof Godek.
Graf - jest to zbiór wierzchołków, który na rysunku przedstawiamy za pomocą kropek oraz krawędzi łączących wierzchołki. Czasami dopuszcza się krawędzie.
Algorytmy i struktury danych
Algorytmy i struktury danych
Rodzaje, przechodzenie grafu
ALGORYTM. SCHEMATY BLOKOWE. KONSTRUKCJE PROGRAMU, PODPROGRAMY, FUNKCJE
Najkrótsza ścieżka w grafie Algorytm Dijkstry
Algorytm Dijkstry 1 Zbiory: T - zbiór wierzchołków
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych
Geometria obliczeniowa Wykład 13 Planowanie ruchu 1.Znajdywanie ścieżki między dwoma punktami. 2.Ruch postępowy robota wielokątnego na płasz- czyźnie.
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
Zagadnienie i algorytm transportowy
Algorytmy i Struktury Danych Grafy
Drogi i cykle Eulera w grafach nieskierowanych
WĘDRÓWKI PO GRAFACH Obchody Eulera Cykle Hamiltona.
Algorytmy grafowe Minimalne drzewa rozpinające
Szachy a grafy. Powiązanie szachownicy z grafem Szachownicę można przedstawić jako graf. Wierzchołek odpowiada polu, a krawędzie ruchowi danej figury.
Literatura podstawowa
GRA CHOMP. Czym jest chomp? Jest to gra dla dwóch osób, rozgrywana na prostokątnej tablicy, zwanej „tabliczką czekolady”
Autor: Michał Salewski
Grafy.
Modelowanie matematyczne – złożoność obliczeniowa, teoria a praktyka
Metody Badań Operacyjnych Michał Suchanek Katedra Ekonomiki i Funkcjonowania Przedsiębiorstw Transportowych.
Zagadnienia transportowe Katedra Ekonomiki i Funkcjonowania Przedsiębiorstw Transportowych.
Działania na grafach Autor: Anna Targońska.
Algorytm Dijkstry Podano graf Zdefiniowano jego listę sąsiedztwa 1 2 3
Macierzowe systemy kodowania konstytucji cząsteczki
Algorytmy i struktury danych
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

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

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

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

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.

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 / / / / 3 / Uwaga: Ta reprezentacja będzie wykorzystana w algorytmie Dijkstry. waga = 2

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

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 Ważony graf skierowanyDrzewo najkrótszych ścieżek vovo Uwaga: Może być wiele najkrótszych ścieżek prowadzących do danego wierzchołka.

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

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] RELAX(u,v,w) Uwaga: Wartości w wierzchołkach to d[v],relaksacja może, ale nie musi zmniejszyć d[v].

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

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.

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.

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.

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.

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]

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].

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.

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.

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.

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.

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.

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

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.

Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford Wprowadzenie do algorytmów