Algorytmy i Struktury Danych.

Podobne dokumenty
Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Matematyczne Podstawy Informatyki

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Algorytmy wyznaczania centralności w sieci Szymon Szylko

Digraf. 13 maja 2017

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

a) 7 b) 19 c) 21 d) 34

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 5 i 6. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

Suma dwóch grafów. Zespolenie dwóch grafów

Algorytmy i Struktury Danych

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Sortowanie topologiczne skierowanych grafów acyklicznych

Algorytmiczna teoria grafów

Wstęp do programowania

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Spis treści. Przykład. Przykład 1 Przykład 2. Twórcy Informacje wstępne Pseudokod Przykład. 1 Grafy skierowane z wagami - przypomnienie

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Graf. Definicja marca / 1

Ogólne wiadomości o grafach

Podstawowe własności grafów. Wykład 3. Własności grafów

Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz?

Złożoność obliczeniowa klasycznych problemów grafowych

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

Zagadnienie najkrótszej drogi w sieci

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Teoria grafów podstawy. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Matematyka dyskretna

TEORIA GRAFÓW I SIECI

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

Egzaminy i inne zadania. Semestr II.

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Programowanie dynamiczne i algorytmy zachłanne

Algorytmika Problemów Trudnych

Algorytm chińskiego listonosza Katarzyna Ignaszewska SPI51. Temat: Problem chińskiego listonosza, czyli jak obejść miasto najmniejszym nakładem sił.

Matematyczne Podstawy Informatyki

5. Najkrótsze ścieżki

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

SPÓJNOŚĆ. ,...v k. }, E={v 1. v k. i v k. ,...,v k-1. }. Wierzchołki v 1. v 2. to końce ścieżki.

Opracowanie prof. J. Domsta 1

Grafy dla każdego. dr Krzysztof Bryś. Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska.

Algorytmy i Struktury Danych.

Matematyczne Podstawy Informatyki

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 7,8,9. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

Matematyka dyskretna. Andrzej Łachwa, UJ, B/14

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Minimalne drzewa rozpinające

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Grafy co o ich rysowaniu wiedzą przedszkolaki i co z tego wynika dla matematyków

Algorytmy z powracaniem

Wstęp do programowania

Algorytmy i Struktury Danych.

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Laboratorium nr 7 Sortowanie

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

Kolorowanie wierzchołków grafu

Sieć (graf skierowany)

Grafy i Zastosowania. 9: Digrafy (grafy skierowane) c Marcin Sydow

Znajdowanie skojarzeń na maszynie równoległej

Matematyka dyskretna - 7.Drzewa

Programowanie Proceduralne

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Algorytmy dynamiczne. Piotr Sankowski. - p. 1/14

Elementy teorii grafów Elementy teorii grafów

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Teoria obliczeń i złożoność obliczeniowa

Wstęp do Programowania potok funkcyjny

Wykład 4. Droga i cykl Eulera i Hamiltona

Dynamiczne drzewa. Marian M. Kędzierski. 26 listopada Wstęp Euler-Tour Trees Dynamiczna spójność Algorytm Dinica Link-Cut Trees

G. Wybrane elementy teorii grafów

Sieć (graf skierowany)

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Siedem cudów informatyki czyli o algorytmach zdumiewajacych

10. Kolorowanie wierzchołków grafu

Wstęp do Informatyki

5c. Sieci i przepływy

Grafy i Zastosowania. 5: Drzewa Rozpinające. c Marcin Sydow. Drzewa rozpinające. Cykle i rozcięcia fundamentalne. Zastosowania

Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.

7. Teoria drzew - spinanie i przeszukiwanie

Lista 4. Kamil Matuszewski 22 marca 2016

Plan wykładu. Przykład. Przykład 3/19/2011. Przykład zagadnienia transportowego. Optymalizacja w procesach biznesowych Wykład 2 DECYZJA?

Wykład 7. Algorytmy grafowe

Transkrypt:

Algorytmy i Struktury Danych. Grafy Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 1 / 39

Plan wykładu Wyszukiwanie spójnych składowych grafu (ang. Connected components) Sortowanie topologiczne (ang. Topological sort) Cykle Eulera Algorytm Bellmana-Forda Algorytm Dijkstry Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 2 / 39

Spójne składowe Definicja Każda spójna składowa grafu G = (V, E) jest maksymalnym podzbiorem wierzchołków U zbioru V takim, że dla dowolnych dwóch wierzchołków z U istnieje łacz aca je ścieżka w G. Jeżeli graf składa się z jednej spójnej składowej to mówimy, że jest spójny (ang. connected). Każdy graf nieskierowany można podzielić na jedna lub większa liczbę spójnych składowych (ang. connected components). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 3 / 39

Spójne składowe Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 4 / 39

Spójne podgrafy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 5 / 39

Spójne składowe - algorytm Wejście: G = (V, E) Wyjście: Spójne składowe grafu G 1 J. Hopcroft, R. Tarjan. Efficient algorithms for graph manipulation. 1973. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 6 / 39

Spójne składowe - algorytm Wejście: G = (V, E) Wyjście: Spójne składowe grafu G Algorytmy DFS oraz BFS wyznaczaja spójne składowe grafu G 1. 1 J. Hopcroft, R. Tarjan. Efficient algorithms for graph manipulation. 1973. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 6 / 39

Spójne składowe - algorytm Wejście: G = (V, E) Wyjście: Spójne składowe grafu G Algorytmy DFS oraz BFS wyznaczaja spójne składowe grafu G 1. Złożoność: O((m + n). 1 J. Hopcroft, R. Tarjan. Efficient algorithms for graph manipulation. 1973. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 6 / 39

Spójne składowe - algorytm Wejście: G = (V, E) Wyjście: Spójne składowe grafu G Algorytmy DFS oraz BFS wyznaczaja spójne składowe grafu G 1. Złożoność: O((m + n). Algorytm wyszukiwania spójnych składowych może zostać tak zaimplementowany, aby jego koszt zamorytzowany był: O(α(m, n)), gdzie α jest bardzo słabo rosnac a odwrotnościa funkcji Ackermana, która wynosi co najwyżej 5 dla wszystkich możliwych m oraz n. 1 J. Hopcroft, R. Tarjan. Efficient algorithms for graph manipulation. 1973. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 6 / 39

Spójne składowe - algorytm DFS Require: Graf (V, E), tablica visited o rozmiarze V = n Algorytm DFS: 1: for all i := 1 to n do 2: visited[i] := 0; 3: end for 4: for all i := 1 to n do 5: if visited[i] = 0 then 6: visit(i); 7: end if 8: end for Require: Graf (V, E), tablica visited o rozmiarze V = n Algorytm visit(i): 1: print(i); 2: visited[i] := 1; 3: for each neighbor j of i do 4: if visited[j] = 0 then 5: visit(j); 6: end if 7: end for Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 7 / 39

Spójne składowe Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 8 / 39

Sortowanie Topologiczne - sformułowanie problemu Wejście: Acykliczny graf skierowany G = (V, E). Wyjście: Liniowy porzadek wierzchołków z V taki, że jeśli graf G zawiera krawędź (u, v), to w tym porzadku wierzchołek u występuje przed wierzchołkiem v. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 9 / 39

Sortowanie Topologiczne - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 10 / 39

Sortowanie topologicznie Wierzchołki w każdym grafie acyklicznym skierowanym można posortować topologicznie na jeden lub więcej sposobów 7,5,3,11,8,2,9,10 7,5,11,2,3,10,8,9 3,7,8,5,11,10,9,2 5,7,11,2,3,8,9,10 7 5 3 11 8 2 9 10 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 11 / 39

Sortowanie Topologiczne - algorytm bazujacy na DFS Wykonaj TopologicalDFS na wejściowym acyklicznym grafie skierowanym G = (V, E). Wypisz wierzchołki w porzadku malejacym ze względu na ich czas końcowy - umieszczony w tablicy final. Złożoność: O( V + E ) Require: Graf G, tablice visited oraz final o rozmiarze V = n Algorytm TopologicalDFS: 1: t := 0 2: for all i := 1 to n do 3: visited[i] := 0; final := 0 4: end for 5: for all i := 1 to n do 6: if visited[i] = 0 then 7: visit(i, final); 8: end if 9: end for Algorytm visit(i,final): 1: visited[i] := 1; 2: for each outgoing edge j of i do 3: if visited[j] = 0 then 4: visit(j, final); 5: end if 6: end for 7: t = t + 1; 8: final[i] = t; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 12 / 39

Sortowanie Topologiczne - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 13 / 39

Sortowanie topologiczne - Algorytm 2 Metoda usuwania wierzchołków o stopniu wejściowym równym zero Wykorzystywana własność: jeśli graf jest acyklicznym grafem skierowanym, to posiada przynajmniej jeden wierzchołek o stopniu wejściowym równym zero. Idea: Dopóki graf posiada wierzchołki o stopniu wejściowym zero, znajdujemy taki wierzchołek, usuwamy go z grafu wraz ze wszystkimi wychodzacymi z niego krawędziami i umieszczamy go na liście wierzchołków posortowanych topologicznie. Jeśli w grafie pozostana jakieś wierzchołki, to graf posiada cykle i sortowania topologicznego nie można wykonać. Złożoność: O( V + E ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 14 / 39

Sortowanie topologiczne - Algorytm 2 Algorytm: G = (V, E) 1: Q - Zbiór wszystkich wierzchoków bez krawędzi wchodzacych; 2: while Q! = do 3: Usuń wierzchołek n z Q. 4: Wypisz n. 5: for all m V takiego, że (n, m) E do 6: E = E \(n, m) 7: if m nie ma już więcej krawędzi wchodzacych then 8: Wstaw m do Q. 9: end if 10: end for 11: end while 12: if E! = then 13: Graf G ma cykl. 14: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 15 / 39

Sortowanie topologiczne - Algorytm 2, przykład 1 4 4 4 3 3 3 2 5 Usuwamy 1 5 2 Usuwamy 2 5 4 Usuwamy 3 5 Usuwamy 4 5 Usuwamy 5 Sortowanie topologiczne: 1, 2, 3, 4, 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 16 / 39

Cykl Eulera Droga Eulera w grafie (skierowanym), to droga prosta, która zawiera każda krawędź grafu dokładnie jeden raz. Cykl Eulera to taki cykl w grafie, który zawiera każda krawędź grafu dokładnie jeden raz. Warunkiem istnienia cyklu sa: spójność grafu. dla grafu skierowanego należy sprawdzić, czy dla każdego wierzchołka stopień wyjściowy jest równy stopniu wejściowemu. dla grafu nieskierowanego z każdego wierzchołka musi wychodzić parzysta liczba krawędzi. Graf, który posiada cykl Eulera nazywany jest grafem eulerowskim Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 17 / 39

Cykl Eulera - idea Zaczynamy od dowolnego wierzchołka (na przykład tego z najmniejszym indeksem), dodajemy ten wierzchołek na stos i idziemy do następnego osiagalnego z niego wierzchołka z najmniejszym indeksem, a łacz aca go z nim drogę usuwamy. Dodajemy ten wierzchołek na stos i idziemy do następnego osiagalnego wierzchołka z najmniejszym indeksem, a łacz ac a go z nim drogę usuwamy, itd. Jeżeli nie możemy już nigdzie pójść pobieramy element ze stosu (będzie on kolejnym w cyklu) i teraz z ostatniego wierzchołka na stosie idziemy dalej. Czynność powtarzamy tak długo jak długo mamy jakieś wierzchołki na stosie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 18 / 39

Cykl Eulera - przykład (1) (2) (3) (4) a b c d e a b c d e a b c d e a b c d e Stos: a,b Stos: a,b,c Stos: a,b,c, a (5) (6) (7) a b c d e a b c d e a b c d e a b c d e Stos: a,b,d Stos: a,b,d,e Stos: a,b,d,e,b Cykl: a,c Cykl: a,c Cykl: a,c Cykl: a,c,b,e,d,b,a Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 19 / 39

Czy można narysować następujac a kopertę bez odrywania kredki od papieru i nie rysujac dwukrotnie żadnego odcinka? Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 20 / 39

Graf spójny, który ma nie więcej niż dwa wierzchołki stopnia nieparzystego, ma drogę Eulera. Wniosek: w grafie reprezentujacym kopertę jest droga Eulera, ale nie ma cyklu. Spójny graf skierowany ma drogę Eulera, gdy dla każdego wierzchołka v zachodzi stopień_wyjściowy(v) = stopień_wejściowy(v), albo gdy istnieja dokładnie dwa weirzchołki v 1 i v 2 nie spełniajace tego warunku, dla których zachodzi: stopień_wejściowy(v 1 ) - stopień_wyjściowy(v 1 ) = stopień_wejściowy(v 2 )-stopień_wyjściowy(v 2 ) = 1. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 21 / 39

Cykl Eulera - Zastosowania Rysowanie/wycinanie figur przy pomocy plotera Problem chińskiego listonosza W roku 1962 chiński matematyk Mei-Ko Kwan sformułował następujacy problem: Listonosz roznoszac listy musi przejść przez wszystkie ulice w swojej dzielnicy co najmniej jeden raz i wrócić na pocztę. Ponieważ jest człowiekiem leniwym, chciałby mieć jak najkrótsza do przejścia trasę. Znalezienie takiej trasy jest problemem, który nazwano problemem chińskiego listonosza (ang. Chinese postman problem - CPP). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 22 / 39

Etykietowany graf skierowany Definicja Etykietowanym grafem skierowanym nazywamy strukturę G = (V, E, w : E Z) gdzie V to zbiór wierzchołków, E {(u, v) : u, v V} to zbiór uporzadkowanych par wierzchołków ze zbioru V, zwanych krawędziami. w : E Z jest funkcja wagi; wagi reprezentuja pewne wielkości (np. długość drogi). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 23 / 39

Etykietowany graf skierowany - przykład 1 3 1 u 2-3 2 3 Pytanie: Czy najkrótsza ścieżka pomiędzy wierzchołkami u i v może zawierać cykl? 1 v 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 24 / 39

Etykietowany graf skierowany - przykład 1 3 1 u 2 1-3 v 1 2 3 Pytanie: Czy najkrótsza ścieżka pomiędzy wierzchołkami u i v może zawierać cykl? Odpowiedź: Jeśli w graf istnieje najkrótsza ścieżka z u do v, to w grafie tym również istnieje najkrótsza ścieżka z u do v, która nie zawiera cykli. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 24 / 39

Drzewo najkrótszych ścieżek Sformułowanie problemu Wejście: Etykietowany graf skierowany G = (V, E, w : E Z) Wierzchołek r V. Wyjście: Drzewo T o korzeniu r takie, że ścieżka z r do każdego wierzchołka u w T jest najkrótsza sieżka z r do u w grafie G. Założenie: Rozważane grafy maja wierzchołki osiagalne z wybranego wierzchołka (korzenia) r a. a Dlaczego? Wierzchołki nieosiagalne moga być usunięte w czasie liniowym Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 25 / 39

Czy najkrótsza ścieżka zawsze istnieje? Raczej nie... Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 26 / 39

Graf G bez ujemnych cykli - własności Graf G posiada drzewo najkrótszych ścieżek wtedy i tylko wtedy, gdy G nie zawiera ujemnych cykli. Usunięcie cyklu ze ścieżki nie zwiększa jej długości. Dla każdego wierzchołka u grafu G istnieje najkrótsza ścieżka z korzenia r do wierzchołka u, która nie zawiera cykli. Suma wszystkich tych n najkrótszych ścieżek (przypomnijmy, że rozmiar zbioru wierzchołków jest oznaczany przez n) jest drzewem najkrótszych ścieżek grafu G ukorzenionego w wierzchołku r. 2 Przez odległość od wierzchołka r do wierzchołka u w grafie G rozumiemy długość najkrótszej ścieżki w grafie G prowadzacej z r do u. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 27 / 39

Graf G bez ujemnych cykli - własności Graf G posiada drzewo najkrótszych ścieżek wtedy i tylko wtedy, gdy G nie zawiera ujemnych cykli. Usunięcie cyklu ze ścieżki nie zwiększa jej długości. Dla każdego wierzchołka u grafu G istnieje najkrótsza ścieżka z korzenia r do wierzchołka u, która nie zawiera cykli. Suma wszystkich tych n najkrótszych ścieżek (przypomnijmy, że rozmiar zbioru wierzchołków jest oznaczany przez n) jest drzewem najkrótszych ścieżek grafu G ukorzenionego w wierzchołku r. Problem znalezienia drzewa najkrótszych ścieżek jest równoważny problemowi znalezienia odległości każdego z wierzchołków u grafu G od korzenia r 2. 2 Przez odległość od wierzchołka r do wierzchołka u w grafie G rozumiemy długość najkrótszej ścieżki w grafie G prowadzacej z r do u. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 27 / 39

Algorytm Forda-Bellmana Algorytm służy do wyznaczania najmniejszej odległości od ustalonego wierzchołka s do wszystkich pozostałych w grafie skierowanym bez cykli o ujemnej długości. Warunek nieujemności cyklu jest spowodowany faktem, że w grafie o ujemnych cyklach najmniejsza odległość między niektórymi wierzchołkami jest nieokreślona, ponieważ zależy od liczby przejść w cyklu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 28 / 39

Algorytm Forda-Bellman Dany jest graf G = (V, E, w N) i macierz A, która dla każdej pary wierzchołków u i v zawiera wagę krawędzi (u, v) (ozn. w((u, v))). Jeśli krawędź (u, v) nie istnieje, to przyjmujemy, że jej waga wynosi nieskończoność i wpisujemy. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 29 / 39

Algorytm Forda-Bellman Dany jest graf G = (V, E, w N) i macierz A, która dla każdej pary wierzchołków u i v zawiera wagę krawędzi (u, v) (ozn. w((u, v))). Jeśli krawędź (u, v) nie istnieje, to przyjmujemy, że jej waga wynosi nieskończoność i wpisujemy. Algorytm Forda-Bellmana w każdym kroku oblicza górne oszacowanie odległości od wierzchołka r do wszystkich pozostałych wierzchołków v (ozn. d(v)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 29 / 39

Algorytm Forda-Bellman Dany jest graf G = (V, E, w N) i macierz A, która dla każdej pary wierzchołków u i v zawiera wagę krawędzi (u, v) (ozn. w((u, v))). Jeśli krawędź (u, v) nie istnieje, to przyjmujemy, że jej waga wynosi nieskończoność i wpisujemy. Algorytm Forda-Bellmana w każdym kroku oblicza górne oszacowanie odległości od wierzchołka r do wszystkich pozostałych wierzchołków v (ozn. d(v)). W pierwszym kroku przyjmujemy d(v) = w((r, v)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 29 / 39

Algorytm Forda-Bellman Dany jest graf G = (V, E, w N) i macierz A, która dla każdej pary wierzchołków u i v zawiera wagę krawędzi (u, v) (ozn. w((u, v))). Jeśli krawędź (u, v) nie istnieje, to przyjmujemy, że jej waga wynosi nieskończoność i wpisujemy. Algorytm Forda-Bellmana w każdym kroku oblicza górne oszacowanie odległości od wierzchołka r do wszystkich pozostałych wierzchołków v (ozn. d(v)). W pierwszym kroku przyjmujemy d(v) = w((r, v)). Gdy stwierdzimy, że d(v) > d(u)+w((u, v)), to każdorazowo polepszamy aktualne oszacowanie i podstawiamy d(v) := d(u)+w((u, v)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 29 / 39

Algorytm Forda-Bellman Dany jest graf G = (V, E, w N) i macierz A, która dla każdej pary wierzchołków u i v zawiera wagę krawędzi (u, v) (ozn. w((u, v))). Jeśli krawędź (u, v) nie istnieje, to przyjmujemy, że jej waga wynosi nieskończoność i wpisujemy. Algorytm Forda-Bellmana w każdym kroku oblicza górne oszacowanie odległości od wierzchołka r do wszystkich pozostałych wierzchołków v (ozn. d(v)). W pierwszym kroku przyjmujemy d(v) = w((r, v)). Gdy stwierdzimy, że d(v) > d(u)+w((u, v)), to każdorazowo polepszamy aktualne oszacowanie i podstawiamy d(v) := d(u)+w((u, v)). Algorytm kończy się, gdy żadnego oszacowania nie można już poprawić. Wówczas macierz d(v) zawiera najkrótsze odległości od wierzchołka r do wszystkich pozostałych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 29 / 39

Algorytm Forda-Bellman Require: Macierz A dla grafu G = (V, E, w : E N), wierzchołek r 1: for each v V do 2: d(v) = w((r, v)); 3: end for 4: for k := 1 to V 2 do 5: for each v V \{r} do 6: for each u V do 7: d(v) := min{d(v), d(u)+w((u, v))} 8: end for 9: end for 10: end for Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 30 / 39

Algorytm Forda-Bellman - przykład 1 2 3 4 5 6 1 0 2 4 * * * 2 * 0 * * 4 * 3 * * 0-2 3 * 4 1 * * 0 * 2 5 * * * * 0 * 6 * 2 * * 1 0 k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawędzi. k d(1) d(2) d(3) d(4) d(5) d(6) 0 0 2 4 * * * 1 0 2 4 2a 6b 4c 2 0 2 4 2 5d 4 3 0 2 4 2 5 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 31 / 39

Algorytm Forda-Bellman - przykład 1 2 3 4 5 6 1 0 2 4 * * * 2 * 0 * * 4 * 3 * * 0-2 3 * 4 1 * * 0 * 2 5 * * * * 0 * 6 * 2 * * 1 0 k d(1) d(2) d(3) d(4) d(5) d(6) 0 0 2 4 * * * 1 0 2 4 2a 6b 4c 2 0 2 4 2 5d 4 3 0 2 4 2 5 4 k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawędzi. a. W kroku k = 0, d(4) =, gdyż nie istnieje krawędź (1,4). Możemy jednak przejść przez wierzchołek 3 (odległość od 1 do 3 wynosi 4) a następnie do 4 (waga krawędzi[3, 4] = 2), długość drogi od 1 do 4 wynosi więc 4 2 = 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 31 / 39

Algorytm Forda-Bellman - przykład 1 2 3 4 5 6 1 0 2 4 * * * 2 * 0 * * 4 * 3 * * 0-2 3 * 4 1 * * 0 * 2 5 * * * * 0 * 6 * 2 * * 1 0 k d(1) d(2) d(3) d(4) d(5) d(6) 0 0 2 4 * * * 1 0 2 4 2a 6b 4c 2 0 2 4 2 5d 4 3 0 2 4 2 5 4 k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawędzi. a. W kroku k = 0, d(4) =, gdyż nie istnieje krawędź (1,4). Możemy jednak przejść przez wierzchołek 3 (odległość od 1 do 3 wynosi 4) a następnie do 4 (waga krawędzi[3, 4] = 2), długość drogi od 1 do 4 wynosi więc 4 2 = 2. b. Do wierzchołka 5 możemy dojść przez 2, 3, lub 6. Wybieramy drogę o najmniejszej długości: d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = + 1. Wybieramy opcję z wierzchołkiem nr. 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 31 / 39

Algorytm Forda-Bellman - przykład 1 2 3 4 5 6 1 0 2 4 * * * 2 * 0 * * 4 * 3 * * 0-2 3 * 4 1 * * 0 * 2 5 * * * * 0 * 6 * 2 * * 1 0 k d(1) d(2) d(3) d(4) d(5) d(6) 0 0 2 4 * * * 1 0 2 4 2a 6b 4c 2 0 2 4 2 5d 4 3 0 2 4 2 5 4 k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawędzi. a. W kroku k = 0, d(4) =, gdyż nie istnieje krawędź (1,4). Możemy jednak przejść przez wierzchołek 3 (odległość od 1 do 3 wynosi 4) a następnie do 4 (waga krawędzi[3, 4] = 2), długość drogi od 1 do 4 wynosi więc 4 2 = 2. b. Do wierzchołka 5 możemy dojść przez 2, 3, lub 6. Wybieramy drogę o najmniejszej długości: d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = + 1. Wybieramy opcję z wierzchołkiem nr. 2. c. Do wierzchołka 6 możemy dojść przez 4 (do którego dochodzimy przez 3) droga jest więc następująca: 1, 3, 4, 6 a jej długość wynosi d(4)+ w(4, 6) = 2 + 2 = 4. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 31 / 39

Algorytm Forda-Bellman - przykład 1 2 3 4 5 6 1 0 2 4 * * * 2 * 0 * * 4 * 3 * * 0-2 3 * 4 1 * * 0 * 2 5 * * * * 0 * 6 * 2 * * 1 0 k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawędzi. k d(1) d(2) d(3) d(4) d(5) d(6) 0 0 2 4 * * * 1 0 2 4 2a 6b 4c 2 0 2 4 2 5d 4 3 0 2 4 2 5 4 a. W kroku k = 0, d(4) =, gdyż nie istnieje krawędź (1,4). Możemy jednak przejść przez wierzchołek 3 (odległość od 1 do 3 wynosi 4) a następnie do 4 (waga krawędzi[3, 4] = 2), długość drogi od 1 do 4 wynosi więc 4 2 = 2. b. Do wierzchołka 5 możemy dojść przez 2, 3, lub 6. Wybieramy drogę o najmniejszej długości: d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = + 1. Wybieramy opcję z wierzchołkiem nr. 2. c. Do wierzchołka 6 możemy dojść przez 4 (do którego dochodzimy przez 3) droga jest więc następująca: 1, 3, 4, 6 a jej długość wynosi d(4)+ w(4, 6) = 2 + 2 = 4. d. Z punktu (b.) wynika, że do wierzchołka 5 możemy dojść także poprzez wierzchołek 6. W poprzednim kroku poznaliśmy odległość do wierzchołka 6 i nie wynosi ona już nieskończoność. Zatem długość drogi do wierzchołka 5 poprzez 6: d(6)+w(6,5)=4+1=5. Jest to wartość mniejsza niż aktualna (6), więc znaleźliśmy krótsza drogę. k=3 Nic się nie zmieniło od kroku k=2. Kończymy obliczenia i mamy wektor najkrótszych dróg od wierzchołka r = 1 do wszystkich pozostałych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 31 / 39

Algorytm Dijkstry Algorytm Dijkstry służy do wyznaczania najmniejszej odległości od ustalonego wierzchołka r do wszystkich pozostałych w grafie skierowanym. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 32 / 39

Algorytm Dijkstry Algorytm Dijkstry służy do wyznaczania najmniejszej odległości od ustalonego wierzchołka r do wszystkich pozostałych w grafie skierowanym. W odróżnieniu jednak od Algorytmu Forda-Bellmana, graf wejściowy nie może zawierać krawędzi o ujemnych wagach. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 32 / 39

Algorytm Dijkstry Algorytm Dijkstry służy do wyznaczania najmniejszej odległości od ustalonego wierzchołka r do wszystkich pozostałych w grafie skierowanym. W odróżnieniu jednak od Algorytmu Forda-Bellmana, graf wejściowy nie może zawierać krawędzi o ujemnych wagach. W algorytmie tym pamiętany jest zbiór Q wierzchołków, dla których nie obliczono jeszcze najkrótszych ścieżek, oraz wektor d[v] odległości od wierzchołka r do v. Poczatkowo zbiór Q zawiera wszystkie wierzchołki, a wektor d jest pierwszym wierszem macierzy zawierajacym wagi krawędzi. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 32 / 39

Algorytm Dijkstry - pseudokod Dopóki zbiór Q nie jest pusty wykonuj: Pobierz ze zbioru Q wierzchołek v o najmniejszej wartości d[v] i usuń go ze zbioru. Dla każdego następnika i wierzchołka v sprawdź czy d[i] > d[v]+w((v, i)), tzn. czy aktualne oszacowanie odległości do wierzchołka i jest większe od oszacowania odległości do wierzchołka v plus waga krawędzi (v, i). Jak widać z powyższego pseudokodu algorytm wybiera z kolejki Q najlżejszy wierzchołek, tzn. jest oparty o strategię zachłanna. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 33 / 39

Algorytm Dijkstry - przykład a b c d e a 0 10 * * 5 b * 0 1 * 2 c * * 0 4 * d 7 * 6 0 * e * 3 9 2 * Q d(a) d(b) d(c) d(d) d(e) {b,c,d,e} 0 10 * * 5 {b,c,d} 0 8 14 7 5 {b,c} 0 8 13 7 5 {c} 0 8 9 7 5 {} 0 8 9 7 5 Najlżejszy wierzchołek jest podkreślony. Wierzchołki, dla których wyznaczono już najkrótsze ścieżki sa pogrubione Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 34 / 39

Wyznaczanie najkrótszej drogi w grafie dla znanej odległości Algorytm służy do wyznaczania w grafie ciagu wierzchołków u s, u s+1...u t tworzacych drogę między wierzchołkami u s i u t o długości d(u s, u t ) i jest on najczęściej używany razem z algorytmem Forda-Bellmana lub Dijkstry. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 35 / 39

Wyznaczanie najkrótszej drogi w grafie dla znanej odległości Algorytm służy do wyznaczania w grafie ciagu wierzchołków u s, u s+1...u t tworzacych drogę między wierzchołkami u s i u t o długości d(u s, u t ) i jest on najczęściej używany razem z algorytmem Forda-Bellmana lub Dijkstry. Po wyznaczeniu najkrótszej odległości d(u s, u t ) między para wierzchołków w grafie, można skonstruować drogę między tymi wierzchołkami taka, że suma wag jej krawędzi jest równa d(u s, u t ), tzn. możemy wyznaczyć drogę między wierzchołkami u s i u t o najkrótszej długości. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 35 / 39

Wyznaczanie najkrótszej drogi w grafie dla znanej odległości Algorytm służy do wyznaczania w grafie ciagu wierzchołków u s, u s+1...u t tworzacych drogę między wierzchołkami u s i u t o długości d(u s, u t ) i jest on najczęściej używany razem z algorytmem Forda-Bellmana lub Dijkstry. Po wyznaczeniu najkrótszej odległości d(u s, u t ) między para wierzchołków w grafie, można skonstruować drogę między tymi wierzchołkami taka, że suma wag jej krawędzi jest równa d(u s, u t ), tzn. możemy wyznaczyć drogę między wierzchołkami u s i u t o najkrótszej długości. Załóżmy więc, że dla danego grafu opisanego za pomoca macierzy wag krawędzi wywołaliśmy algorytm wyznaczania najkrótszej odległości od ustalonego wierzchołka (u s ) do wszystkich pozostałych i w jego wyniku otrzymaliśmy wektor odległości D. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 35 / 39

Wyznaczanie najkrótszej drogi w grafie dla znanej odległości Z wektora D odczytujemy najmniejsza odległość między wierzchołkami u s i u t : D[u t ] = d(u s, u t ). Po wykonaniu poniższego algorytmu na stosie otrzymamy ciag wierzchołków u s,...,u t będacych droga między wierzchołkiem u s i u t o długości d(u s, u t ). Algorytm Require: Stos S, wierzchołki poczatkowy u s i końcowy u t 1: push(s, u t ); 2: v := u t ; 3: while v! = u s do 4: znajdź wierzchołek u taki, że D(v) = D(u)+w((u, v)); 5: push(s, u); 6: v := u; 7: end while Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 36 / 39

Przykład 1 2 3 4 5 6 1 0 2 4 * * * 2 * 0 * * 4 * 3 * * 0-2 3 * 4 1 * * 0 * 2 5 * * * * 0 * 6 * 2 * * 1 0 Jak widać z macierzy wag graf ten ma krawędzie o ujemnych wagach, musimy więc zastosować algorytm Forda-Bellmana. W wyniku jego działania otrzymamy wektor d postaci: D[1] = 0, D[2] = 2, D[3] = 4, D[4] = 2, D[5] = 5, D[6] = 4. Załóżmy że wierzchołkiem, względem którego wyznaczać będziemy najkrótsza drogę jest wierzchołek o indeksie 1. Dlatego też D[1] = 0. Musimy też wybrać wierzchołek końcowy niech będzie to wierzchołek nr. 5. Z wektora D odczytujemy najmniejsza odległość między wierzchołkami 1 i 5, tj. D[5] = d(1, 5) = 5. Wyznaczamy drogę łacz ac a wierzchołek 1 i 5 o długości równej 5. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 37 / 39

Przykład, cd. Po wykonaniu pierwszej linii algorytmu otrzymamy anstępujace parametry: Stos = {5}, v = 5, D[v] = 5, u =?, D[u]+w((u, v)) =?. Poszukujemy teraz wierzchołka u. Sprawdzamy wartości D[u]+w((u, v)) tylko dla tych wierzchołków u, które sa poprzednikami wierzchołka v. W naszym przypadku poprzednikami wierzchołka 5 sa wierzchołki 2, 3 i 6. Sprawdzamy więc: D[2]+w((2, 5)) = 2+4 = 6! = D[5], D[3]+w((3, 5)) = 4+3 = 7! = D[5], oraz D[6]+w((6, 5)) = 4+1 = 5 = D[5]. Znaleźliśmy wierzchołek u = 6, wykonujemy zatem instrukcje 5 i 6 algorytmu: Stos = {5, 6}, v = 6, D[v] = 4, u =?, D[u]+w((u, v)) =?. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 38 / 39

Przykład, cd. Tym razem nie mamy zbyt dużego wyboru, gdyż jedynym poprzednikiem wierzchołka nr. 6 jest 4. A więc D[4]+w((4, 6)) = 2+2 = 4 = d[6], zatem m = 4. Dalej algorytm przebiega podobnie: Stos = {5, 6, 4}, v = 4, D[v] = 2, u = 3, D[u]+w((u, v)) = 4+( 2) = 4. Stos = {5, 6, 4, 3}, v = 3, D[v] = 4, u = 1, D[u]+w((u, v)) = 0+4 = 4. Tu algorytm się kończy, gdyż w następnej iteracji v = 1. A zatem droga między wierzchołkiem 1 i 5 o długości 5 jest następujaca: (1, 3, 4, 6, 5). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 8 39 / 39