Algorytmy i Struktury Danych.

Podobne dokumenty
Algorytmy i Struktury Danych.

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

Matematyczne Podstawy Informatyki

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

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

Digraf. 13 maja 2017

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

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

Algorytmy wyznaczania centralności w sieci Szymon Szylko

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

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

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

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

Algorytmiczna teoria grafów

Algorytmy i Struktury Danych.

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

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

TEORIA GRAFÓW I SIECI

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

Elementy teorii grafów Elementy teorii grafów

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

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

Graf. Definicja marca / 1

5. Najkrótsze ścieżki

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

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

Droga i cykl Eulera Przykłady zastosowania drogi i cyku Eulera Droga i cykl Hamiltona. Wykład 4. Droga i cykl Eulera i Hamiltona

Wykład 4. Droga i cykl Eulera i Hamiltona

Ogólne wiadomości o grafach

Matematyczne Podstawy Informatyki

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

Wstęp do programowania

Opracowanie prof. J. Domsta 1

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

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

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

Algorytmy i Struktury Danych.

Algorytmika Problemów Trudnych

G. Wybrane elementy teorii grafów

TEORETYCZNE PODSTAWY INFORMATYKI

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

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

6a. Grafy eulerowskie i hamiltonowskie

Algorytmy i Struktury Danych

Programowanie dynamiczne i algorytmy zachłanne

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

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Algorytmy z powracaniem

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

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

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

Matematyczne Podstawy Informatyki

Schemat programowania dynamicznego (ang. dynamic programming)

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

Wstęp do programowania

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

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

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

Programowanie sieciowe. Tadeusz Trzaskalik

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

5c. Sieci i przepływy

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

Matematyka dyskretna - 7.Drzewa

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

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Sortowanie topologiczne skierowanych grafów acyklicznych

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.

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

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

Sieć (graf skierowany)

7. Teoria drzew - spinanie i przeszukiwanie

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

Podejście zachłanne, a programowanie dynamiczne

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).

Marek Miszczyński KBO UŁ. Wybrane elementy teorii grafów 1

Matematyka dyskretna - 5.Grafy.

Szukanie najkrótszych dróg z jednym ródłem

6. Wstępne pojęcia teorii grafów

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Zagadnienie najkrótszej drogi w sieci

Ścieżki w grafach. Grafy acykliczne i spójne

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

Wykład 7. Algorytmy grafowe

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

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

KURS MATEMATYKA DYSKRETNA

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

Sieć (graf skierowany)

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

Egzaminy i inne zadania. Semestr II.

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

Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów

Znajdowanie wyjścia z labiryntu

Minimalne drzewa rozpinające

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

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

Wybrane podstawowe rodzaje algorytmów

Transkrypt:

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

Plan wykładu Ścieżka Eulera Cykle Eulera Algorytm Bellmana-Forda Algorytm Dijkstry Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 2 / 53

Ścieżka Eulera Ścieżka Eulera w grafie (skierowanym), to ścieżka (droga) prosta, która zawiera każda krawędź grafu dokładnie jeden raz. Warunkiem istnienia ścieżki sa: 1 spójność grafu. 2 dla grafu skierowanego należy sprawdzić, czy dla każdego wierzchołka, za wyjatkiem dwóch, stopień wyjściowy jest równy stopniu wejściowemu. 3 dla grafu nieskierowanego z każdego wierzchołka, za wyjatkiem dwóch, musi wychodzić parzysta liczba krawędzi. Graf, który posiada ścieżkę Eulera nazywamy grafem półeulerowskim Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 3 / 53

Ścieżka Eulera - przykład Graf ze ścieżka Eulera: Graf bez ścieżki Eulera: Ścieżka: 1-> ABCDE -> 3 Nie spełniony warunek 3 istnienia ścieżki Eulera Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 4 / 53

Cykl Eulera 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 nazywamy grafem eulerowskim Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 5 / 53

Ścieżka Eulera - przykład Graf bez cyklu Eulera: Graf z cyklem Eulera: Cykl 1: 1-> ABCDEF -> 1 Cykl 2: 1-> ABEDCF -> 1 Cykl 3: 1-> FCDEBA -> 1 Cykl 4: 1-> FEDCBA -> 1 Nie spełniony warunek 3 istnienia cyklu Eulera Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 53

Zagadki Sprawdź, w którym z poniższych grafów istnieje cykl lub droga Eulera. Jeśli w grafie istnieje cykl lub droga Eulera, to można ja narysować nie odrywajac ołówka od papieru. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 7 / 53

Twierdzenie Eulera, 1736 Twierdzenie Spójny graf G (nieskierowany) ma cykl Eulera wtedy i tylko wtedy, gdy stopień każdego wierzchołka w G jest parzysty. Leonhard Euler (1707 1783) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 8 / 53

Most Mostem nazywamy taka krawędź grafu, której usunięcie zwiększa liczbę spójnych składowych tego grafu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 9 / 53

Wyznaczanie cyklu Eulera Do wyznaczania syklu Eulera słuzy algorytm Fleury ego Algorytm działa zarówno dla grafów skierowanych jak i nieskierowanych. Algorytm jest rekurencyjny Algorytm zakłada, że graf jest eulerowski. Algorytm Fleury ego opiera się na prostej zasadzie: aby znaleźć cykl Eulera lub ścieżkę Eulera, mosty sa ostatnimi krawędziemi, które nalezy przejść. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 10 / 53

Algorytm Fleury ego Warunek wstępny: Wejściowy graf jest grafem eulerowskim, czyli: jest spójny w przypadku poszukiwania ścież Eulera - posiada co najwyżej dwa wierzchołki o nieparzystym stopniu w przypadku poszukiwania cyklu Eulera - wszytkie wierzchołki musza mieć parzysty stopień Warunek startowy: W przypadku cyklu: wybierz dowolny wierzchołek W przypadku ścieżki: wybierz jeden z wierzchołków nieparzystych Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 11 / 53

Algorytm Fleury ego Kroki pośrednie: Na każdym kroku, jeśli jest wybór, nie wybieraj mostu występujacego w części grafu, która nie została jeszcze odwiedzona. Jednakże, jeśli jest tylko jeden wybór, to weź go. Warunek Końcowy: Kiedy nie można przechodzić już dalej, cykl (ścieżka) jest kompletna. [W przypadku cyklu, wracamy do wierzchołka wyjściowego; w przypadku ścieżki dochodzimy do drugiego wierzchołka o nieparzystym stopniu.] Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 12 / 53

Algorytm Fleury ego Graf eulerowski: Wybieramy wierzchołek F jak startowy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 13 / 53

Algorytm Fleury ego Idziemy z F do C Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 14 / 53

Algorytm Fleury ego Idziemy z C do D Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 15 / 53

Algorytm Fleury ego Idziemy z D do A. (Można również iść z D do B, ale nie można z D do F, bo DF jest mostem) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 16 / 53

Algorytm Fleury ego Idziemy z A do C. (Można również iść z A do E, ale nie można z A do B, bo AB jest mostem) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 17 / 53

Algorytm Fleury ego Idziemy z C do E. Nie ma wyboru. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 18 / 53

Algorytm Fleury ego Idziemy z E do A. Nie ma wyboru. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 19 / 53

Algorytm Fleury ego Idziemy z A do B, potem z B do D i na koniec z D do F. Jednoznaczna ściezka. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 20 / 53

Algorytm Fleury ego Kolejne kroki algorytmu - podsumowanie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 21 / 53

Algorytm Fleury ego Dany jest graf półeulerowski. Znaleźć ścieżkę Eulera. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 22 / 53

Algorytm Fleury ego Możemy wystartować z wierzchołka J lub wierzcholka E. Startujemy z wierzchołka J. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 23 / 53

Algorytm Fleury ego Z wierzchołka J mamy 5 możliwych dróg. Wszystkie sa OK. Wybieramy drogę do wierzchołka K Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 24 / 53

Algorytm Fleury ego Z wierzchołka K mamy 3 możliwe drogi. Wszystkie sa OK. Wybieramy drogę do wierzchołka B. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 25 / 53

Algorytm Fleury ego Z wierzchołka B mamy 3 możliwe drogi. Wszystkie sa OK. Wybieramy drogę do wierzchołka C. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 26 / 53

Algorytm Fleury ego Z wierzchołka C mamy 3 możliwe drogi. Wszystkie sa OK. Wybieramy drogę do wierzchołka L. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 27 / 53

Algorytm Fleury ego Z wierzchołka L mamy 3 możliwe drogi. Wszystkie sa OK. Wybieramy drogę do wierzchołka K. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 28 / 53

Algorytm Fleury ego Z wierzchołka K mamy tylko 1 drogę, drogę do wierzchołka H. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 29 / 53

Algorytm Fleury ego Z wierzchołka H mamy 3 możliwe drogi: do G, I oraz J. Nie możemy wybrać drogi z H do G, bo jest mostem. Pozostałe dwie sa Ok. Wybieramy drogę do wierzchołka J. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 30 / 53

Algorytm Fleury ego Z wierzchołka J mamy 3 możliwe drogi: do A, B oraz I. Nie możemy wybrać drogi z J do I, bo jest mostem. Pozostałe dwie sa Ok. Wybieramy drogę do wierzchołka B. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 31 / 53

Algorytm Fleury ego Z wierzchołka B do wierzcholka G prowadzi jednoznaczna droga poprzez wierzcholki A, J, I oraz H. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 32 / 53

Algorytm Fleury ego Z wierzchołka G do wierzcholka E prowadzi wiele dróg. Oto jedna z nich: z G do F, potem do E, potem do D, potem do C, potem do E, potem do G, potem do L i na końcu do E. INNA DROGE PROSZE odnaleźć jako ćwiczenie!!! Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 33 / 53

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 9 34 / 53

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 9 35 / 53

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 9 36 / 53

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 9 36 / 53

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 9 37 / 53

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

Drzewo najkrótszych ścieżek Graf G posiada drzewo najkrótszych ścieżek wtedy i tylko wtedy, gdy G nie zawiera ujemnych cykli. 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 najkrótszych ścieżek jest drzewem najkrótszych ścieżek grafu G ukorzenionego w wierzchołku r. 1 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 9 39 / 53

Drzewo najkrótszych ścieżek Graf G posiada drzewo najkrótszych ścieżek wtedy i tylko wtedy, gdy G nie zawiera ujemnych cykli. 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 najkrótszych ścieżek 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 1. 1 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 9 39 / 53

Richard Ernest Bellman - (26.08.1920-19.03.1984) Twórca programowania dynamicznego (Dynamic Programming 1957) W 1979 roku otrzymał IEEE Medal of Honor za wkład w teorie sterowania i procesów decyzyjnych, szczególnie za stworzenie i zastosowanie programowania dynamicznego. 1975 - Członek amerykańskiej akademii Nauki i Sztuki. Więcej na http://en. wikipedia.org/wiki/ Richard_E._Bellman Źródło: http://logistyka.math. uni.lodz.pl/bellman.jpeg Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 40 / 53

Lester Randolph Ford, junior (ur. 23.09.1927) Syn matematyka Lester R. Forda, seniora Amerykański matematyk specjalizujacy się w algorytmach przepływu w sieci Autor algorytmu Bellmana-Forda do znajdowania najkrótszej ścieżki w grafach, które posiadaja krawędzie z ujemnymi wagami. Źródło:http: //arodrigu.webs.upv.es/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 41 / 53

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 9 42 / 53

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 9 43 / 53

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 9 43 / 53

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 9 43 / 53

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 9 43 / 53

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 9 43 / 53

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 9 44 / 53

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 9 45 / 53

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 9 45 / 53

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 9 45 / 53

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ępujaca: 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 9 45 / 53

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ępujaca: 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 9 45 / 53

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 9 46 / 53

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 9 46 / 53

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 9 46 / 53

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 9 47 / 53

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 9 48 / 53

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 9 49 / 53

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 9 49 / 53

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 9 49 / 53

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 9 50 / 53

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 9 51 / 53

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 9 52 / 53

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 9 53 / 53