Algorytmy i Struktury Danych Grafy

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

DOMINOWANIE W GRAFACH Magdalena Lemańska.
Grafy spełniające nierówność Γ(G) < IR(G)
Zadania przygotowawcze na egzamin
ALGORYTMY GRAFOWE.
Grażyna Mirkowska PJWSTK 15 listopad 2000
Grafy inaczej, czyli inne modele grafów
WYKŁAD 6. Kolorowanie krawędzi
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
Ciągi de Bruijna generowanie, własności
ZŁOŻONOŚĆ OBLICZENIOWA
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 4. Skojarzenia Skojarzenie w grafie G to niezależny zbiór krawędzi (rozłączne, bez wspólnych konców). Skojarzenie M w G traktujemy jak podgraf.
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)
GRAFY PLANARNE To grafy, które można narysować na płaszczyźnie tak, by krawędzie nie przecinały się (poza swoimi końcami). Na przykład K_4, ale nie K_5.
WYKŁAD 4. Skojarzenia Skojarzenie w grafie G to niezależny zbiór krawędzi (rozłączne, bez wspólnych konców). Skojarzenie M w G traktujemy jak podgraf G.
Teoretyczne podstawy informatyki
Materiały pomocnicze do wykładu
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.
SKIEROWANE Marek Bil Krzysztof Fitrzyk Krzysztof Godek.
Geometria obliczeniowa Wykład 8
IV OTWARTE MISTRZOSTWA OPOLA W PROGRAMOWANIU ZESPOŁOWYM
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
Geometria obliczeniowa Wykład 3
Reprezentacja grafów i operacje na grafach na przykładzie algorytmu Dijkstry i algorytmu na odnajdywanie Silnych Spójnych Składowych Temat Opracowali:
Rodzaje, przechodzenie grafu
3. SPOSOBY REPREZENTACJI GRAFÓW
ALGORYTMY I STRUKTURY DANYCH
Algorytm Dijkstry 1 Zbiory: T - zbiór wierzchołków
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.
PLANARNOŚĆ i KOLOROWANIE MAP. Problem Jaka jest minimalna liczba kolorów, za pomocą których można pokolorować obszary województw na mapie Polski tak,
Drogi i cykle Eulera w grafach nieskierowanych
WĘDRÓWKI PO GRAFACH Obchody Eulera Cykle Hamiltona.
Algorytmy grafowe Minimalne drzewa rozpinające
Przeszukiwanie wszerz
Literatura podstawowa
GRA CHOMP. Czym jest chomp? Jest to gra dla dwóch osób, rozgrywana na prostokątnej tablicy, zwanej „tabliczką czekolady”
NP-zupełność Problemy: rozwiązywalne w czasie wielomianowym - O(nk)
Autor: Michał Salewski
Grafy.
Modelowanie matematyczne – złożoność obliczeniowa, teoria a praktyka
ALGORYTMY I STRUKTURY DANYCH
Pojęcia podstawowe c.d. Rachunek podziałów Elementy teorii grafów
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
Metoda klasyczna (wg książki Sasao)
Algorytmy i struktury danych
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Algorytmy i Struktury Danych Grafy Wykład 6 Prowadzący: dr Paweł Drozda

Plan wykładu Podstawowe pojęcia grafowe Reprezentacja grafów Problemy grafowe Algorytmy Przeszukiwanie w głąb i wszerz Minimalnie drzewo rozpinające Najkrótsze ścieżki Inne dr Paweł Drozda

Pojęcie grafu (nieskierowany) Nieformalnie: zbiór wierzchołków oraz krawędzi łączących te wierzchołki Formalnie: Grafem (nieskierowanym) nazywamy parę G=(V,E) V – zbiór wierzchołków E – zbiór krawędzi, e1 v4 e2 v3 v1 e3={v2,v3} e4 v2 dr Paweł Drozda

Graf skierowany Grafem skierowanym nazywamy parę G=(V,A) V – zbiór wierzchołków A – zbiór krawędzi skierowanych (uporządkowanych par różnych wierzchołków) e1 v4 e2 v3 v1 e5 e3=(v3,v2) e4 v2 dr Paweł Drozda

Cechy grafu Wierzchołek v i krawędź e są incydentne gdy Wierzchołki u i v są sąsiednie gdy G’ jest podgrafem G w.t.w. Stopień wierzchołka deg(v) = liczba krawędzi incydentnych z v dr Paweł Drozda

Cechy grafu (2) Graf ważony to trójka G=(V,E,w), gdzie (V,E) jest grafem, a w jest fukcją wag: w:E→R Jeżeli to w(e) jest wagą krawędzi e 7 v4 3 v1 v3 1 5 4 v2 Wagi krawędzi: (v1 ,v3) = 3, (v3 ,v4) = 7, (v4 ,v3) = 1 (v3 ,v2) = 4, (v2 ,v1) = 5 dr Paweł Drozda

Cechy grafu(3) Droga to wyznaczona przez krawędzi trasa e1 e2 ei ei+1… pozwalająca na „podróżowanie po grafie” od wierzchołka do wierzchołka Ścieżka to droga nie zawierająca tych samych krawędzi. Ścieżka wyznaczana jest przez wierzchołki ścieżka otwarta: v1v2v3vivi+1… ścieżka zamknięta: v1v2v3vivi+1…v1 Cykl w grafie – droga wracająca do tego samego wierzchołka Graf cykliczny to graf w którym istnieje co najmniej jeden cykl dr Paweł Drozda

Spójność grafu Graf jest spójny jeżeli pomiędzy dowolnymi jego wierzchołkami istnieje droga e5 v7 e1 v4 e2 v3 v1 e6 e9 v8 e3 v6 e4 e7 v2 v5 e8 e10 dr Paweł Drozda

Reprezentacja grafu Macierz sąsiedztwa – |V|2 elementów Lista Sąsiedztwa – lepsza dla grafów rzadkich, t.j. |E|<<|V|2, O(max(V,E))=O(V+E) elementów 1 2 3 4 e1 v4 e2 v3 v1 e3 e4 1: 2→3→null 2: 1→3→null 3: 1→2→4→ null 4: 3→null v2 dr Paweł Drozda

Reprezentacja grafu Macierz sąsiedztwa – |V|2 elementów Lista Sąsiedztwa – lepsza dla grafów rzadkich, t.j. |E|<<|V|2, O(max(V,E))=O(V+E) elementów 1 2 3 4 5 5 v4 3 v3 v1 1 2 1: (2,2)→(3,3)→null 2: (1,2)→(3,1)→null 3: (1,3)→(2,1)→ (4,5)→ null 4: (3,5)→null v2 dr Paweł Drozda

Reprezentacja grafu Dla grafu skierowanego e1 v4 e2 v3 v1 e5 e3 e4 v2 e1 v4 e2 v3 v1 e5 e3 e4 v2 1: 1 → 3→null 2: 1→null 3: 2→4→null 4: 3→null dr Paweł Drozda

Problem mostów królewieckich Czy można przejść kolejno przez wszystkie mosty tak, żeby każdy przekroczyć tylko raz i wrócić do miejsca, z którego się wyruszyło? Zagadnienie opublikowane przez Eulera w 1736 roku – pierwsza praca n.t. teorii grafów dr Paweł Drozda

Algorytmy grafowe Przeszukiwanie grafów w głąb, wszerz Drzewa – szczególna postać grafów Znajdowanie minimalnego drzewa rozpinającego – algorytm Kruskala i Prima Problemy: znajdowanie najkrótszej ścieżki (Dijkstry, Bellmana – Forda, Floyda – Warshalla) znajdowanie ścieżki/cyklu Eulera chińskiego listonosza – najkrótsza droga przechodząca wszystkie krawędzie grafu co najmniej raz znajdowanie ścieżki/cyklu Hamiltona - Θ(n!) komiwojażera – najkrótsza zamknięta ścieżka, przechodząca przez wszystkie wierzchołki (minimalny cykl Hamiltona) kojarzenia małżeństw dr Paweł Drozda

Przeszukiwanie wszerz Breadth-First Search dane: graf G(V,E), wierzchołek początkowy s BFS(G,s): zaznacz wszystkie wierzcholki jako nieodwiedzone enqueue(Q,s); zaznacz s jako odwiedzony; while ~empty(Q) do begin w = dequeue(Q); foreach sasiad w do if sasiad nie odwiedzony then begin zaznacz sasiad jako odwiedzony; enqueue(Q, sasiad); end end Zł. czasowa = O(|V|+|E|) Θ(|V|) – inicjalizacja O(|E|) – przeglądanie dr Paweł Drozda

Przeszukiwanie w głąb Zł. czasowa = O(|V|+|E|) Θ(|V|) – inicjalizacja Depth-first search dane: graf G(V,E), wierzchołek początkowy s DFS(G,s): zaznacz wszystkie wierzcholki jako nieodwiedzone push(S,s); zaznacz s jako odwiedzony; while ~empty(S) do begin w = pop(Q); foreach sasiad wierzcholka w do if sasiad nie odwiedzony then begin zaznacz sasiad jako odwiedzony; push(S, sasiad); end end Zł. czasowa = O(|V|+|E|) Θ(|V|) – inicjalizacja O(|E|) – przeglądanie dr Paweł Drozda

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  eT c (e) jest najmniejsza. Uwaga Warunkiem koniecznym istnienia drzewa rozpinającego grafu jest spójność! dr Paweł Drozda

Przykład minimalne drzewo rozpinające b f e d c a 1 4 8 2 7 5 10 6 b f e d c a 1 4 8 2 7 5 10 6 Jedno z drzew Minimalne drzewo rozpinające dr Paweł Drozda

Algorytm Prima Idea algorytmu Wybieramy dowolnie korzeń szukanego drzewa rozpinającego W każdym kroku algorytmu wybieramy krawędź lekką – tzn. łączącą powstałe do tej pory drzewo z jednym z pozostałych wierzchołków najmniejszym kosztem b f e d c a 1 4 8 2 7 5 10 6 Krawędź lekka (c,d) dr Paweł Drozda

Przykład - algorytm Prima e f b c 6 3 1 7 5 4 2 10 GRAF a-> b, c b -> a, c, d c -> a, b, d, e, f d -> b, c, e, g e -> c, d, f f -> c, e, g g -> f, d 2 4 5 Start – wierzchołek g: Kolejne wierzchołki: g-f-c-d-e-b-a Kolejne krawędzie: (f, g); (c, f); (c, d); (d,e); (b, c); (a, b) dr Paweł Drozda

Kodowanie – algorytm Prima Dla każdego u  V k[u] = ∞ p[u]= NIL k[s]=0 Q = V while Q not empty u = EXTRACT–MIN(Q) dla każdego v=sąsiada(u) if v  Q i w(u,v) < k[v] then p[v] = u k[v] = w(u,v) dr Paweł Drozda

Algorytm Kruskala Jeśli drzewo rozpinające ma mieć koszt minimalny i ma zawierać dany las drzew, to musi też zawierać krawędź e, której koszt jest najmniejszy wśród wszystkich krawędzi nie należących do żadnego z drzew i która łączy dwa wierzchołki z różnych drzew. Utworzyć kolejkę priorytetową PQ z wszystkimi krawędziami grafu, uporządkowanymi ze względu na koszt. Utworzyć początkowy podział Po zbioru V jako rodzinę jednoelementowych zbiorów {x}, gdzie x V (stanowiący las początkowy). 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łączyć do tworzonego drzewa, a zbiory podziału połączyć. dr Paweł Drozda

Algorytm Kruskala – przykład e f b c 6 3 1 7 9 4 2 10 Szeregowanie krawędzi (c,d)=1 (d,e)=2 (a,b)=2 (c,f)=3 (b,c)=4 (e,f)=4 (b,d)=6 (a,c)=7 (f,g)=8 (d,g)=9 (c,e)=10 krawędzie wybrane (c,d)=1 (d,e)=2 (a,b)=2 (c,f)=3 (b,c)=4 (e,f)=4 (b,d)=6 (a,c)=7 (f,g)=8 (d,g)=9 (c,e)=10 2 4 8 dr Paweł Drozda

Kodowanie – Algorytm Kruskala A = zbiór pusty dla każdego v  V stwórz oddzielny zbiór posortuj krawędzie niemalejąco względem wag dla każdej krawędzi e według niemalejących wag jeśli u,v należą do różnych zbiorów A =A + {(u,v)} połącz zbiory z u i v dr Paweł Drozda

Wyszukiwanie najkrótszej ścieżki Wyznaczenie najkrótszych ścieżek o wspólnym początku Algorytm Dijkstry (zachłanny) dla grafów ważonych: wagi są nieujemne brak krawędzi oznaczany jest przez „odpowiednio dużą” wagę Q – zbiór wierzchołków, do których nie jest znana optymalna droga D – tablica z najmniejszymi odległościami od wierzchołka do źródła P – tablica zawierająca nr poprzedzającego wierzchołka na najkrótszej drodze dr Paweł Drozda

Algorytm Dijkstry 1 2 5 3 4 10 100 30 60 50 20 Dijkstra(G,s): foreach wierzchołek w begin d[w] = ∞; p[w] = -1; end d[s] = 0; Q = V; while ~empty(Q) do u = wyjmij_min(Q); foreach sasiad wierzcholka u alt = d[u]+koszt(u,sasiad); if alt<d[sasiad] then d[sasiad] = alt; p[sasiad] = u; 1 2 5 3 4 10 30 100 50 20 60 dr Paweł Drozda

Algorytm Bellmana – Forda Najkrótsze ścieżki z jednego źródła Wagi mogą być ujemne p[] – tablica poprzedników d[] – odległość od źródła informuje czy da się wyznaczyć najkrótsze ścieżki – czy nie zawiera cykli ujemnych dr Paweł Drozda

Kodowanie – algorytm Bellmana - Forda dla każdego v  V p[v] = nil d[v] = ∞ for i=1 to |V| - 1 dla każdej krawędzi e(u,v)  E if d[v] > d[u] +w(u,v) d[v] = d[u] +w(u,v) p[v] = u if d[v] > d[u] +w(u,v) RETURN FALSE RETURN TRUE dr Paweł Drozda

Ścieżka Eulera Ścieżka przechodząca przez wszystkie krawędzie dokładnie raz Graf nieskierowany eulerowski – jeżeli wszystkie wierzchołki grafu (nieskierowanego) mają stopień parzysty, to da się skonstruować cykl Eulera półeulerowski – jeżeli najwyżej dwa wierzchołki mają nieparzysty stopień, to możliwe jest zbudowanie ścieżki Eulera Graf skierowany eulerowski – wszystkie wierzchołki z wyjątkiem dwóch mają takie same stopnie wychodzące i wchodzące półeulerowski – wszystkie wierzchołki z wyjątkiem dwóch mają takie same stopnie wychodzące i wchodzące, w jednym z tych dwóch wierzchołków stopień wychodzący jest o 1 większy niż wchodzący a w drugim odwrotnie dr Paweł Drozda

O(|V|+|E|)+O(|V|+|E|) = O(|V|+|E|) Algorytm Zbadać czy graf jest spójny Zbadać stopnie wierzchołków grafu Przejdź graf zaczynając od wierzchołka o nieparzystym stopniu (jeżeli jest) O(|V|+|E|)+O(|V|+|E|) = O(|V|+|E|) dr Paweł Drozda

Problem kojarzenia małżeństw Graf dwudzielny – graf, w którym możemy podzielić wierzchołki na 2 podzbiory tak, że nie istnieje krawędź łącząca 2 wierzchołki z tego samego podzbioru dr Paweł Drozda

Problem kojarzenia małżeństw Problem małżeństw jest rozwiązywalny, jeśli każdy podzbiór k panien, akceptuje jako przyszłych mężów co najmniej k kawalerów, gdzie k ≤ n. Filip Gustaw Henryk Igor Jan Anna Beata Celina Danuta Ewa dr Paweł Drozda