Algorytmy i Struktury Danych. - Grafywozna.org/students/2014-2015/asd/asd09.pdf · Plan wykładu...

67
Algorytmy i Struktury Danych. Grafy dr hab. Bo˙ zena Wo´ zna-Szcze´ sniak [email protected] Jan Dlugosz University, Poland Wyklad 9 Bo˙ zena Wo´ zna-Szcze´ sniak (AJD) Algorytmy i Struktury Danych. Wyklad 9 1 / 53

Transcript of Algorytmy i Struktury Danych. - Grafywozna.org/students/2014-2015/asd/asd09.pdf · Plan wykładu...

Algorytmy i Struktury Danych.Grafy

dr hab. Bozena [email protected]

Jan Długosz University, Poland

Wykład 9

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 53

Plan wykładu

Sciezka EuleraCykle EuleraAlgorytm Bellmana-FordaAlgorytm Dijkstry

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 2 / 53

Sciezka Eulera

Sciezka Eulera w grafie (skierowanym), to sciezka (droga) prosta,która zawiera kazda krawedz grafu dokładnie jeden raz.Warunkiem istnienia sciezki sa:

1 spójnosc grafu.2 dla grafu skierowanego nalezy sprawdzic, czy dla kazdego

wierzchołka, za wyjatkiem dwóch, stopien wyjsciowy jest równystopniu wejsciowemu.

3 dla grafu nieskierowanego z kazdego wierzchołka, za wyjatkiemdwóch, musi wychodzic parzysta liczba krawedzi.

Graf, który posiada sciezke Eulera nazywamy grafempółeulerowskim

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 3 / 53

Sciezka Eulera - przykład

Graf ze sciezka Eulera:

Sciezka: 1-> ABCDE -> 3

Graf bez sciezki Eulera:

Nie spełniony warunek 3 istnieniasciezki Eulera

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 4 / 53

Cykl Eulera

Cykl Eulera to taki cykl w grafie, który zawiera kazda krawedzgrafu dokładnie jeden raz.Warunkiem istnienia cyklu sa:

spójnosc grafu.dla grafu skierowanego nalezy sprawdzic, czy dla kazdegowierzchołka stopien wyjsciowy jest równy stopniu wejsciowemu.dla grafu nieskierowanego z kazdego wierzchołka musi wychodzicparzysta liczba krawedzi.

Graf, który posiada cykl Eulera nazywamy grafem eulerowskim

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 5 / 53

Sciezka Eulera - przykład

Graf z cyklem Eulera:

Cykl 1: 1-> ABCDEF -> 1Cykl 2: 1-> ABEDCF -> 1Cykl 3: 1-> FCDEBA -> 1Cykl 4: 1-> FEDCBA -> 1

Graf bez cyklu Eulera:

Nie spełniony warunek 3 istnieniacyklu Eulera

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 53

Zagadki

Sprawdz, w którym z ponizszych grafów istnieje cykl lub drogaEulera. Jesli w grafie istnieje cykl lub droga Eulera, to mozna janarysowac nie odrywajac ołówka od papieru.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 7 / 53

Twierdzenie Eulera, 1736

TwierdzenieSpójny graf G (nieskierowany) ma cykl Eulera wtedy i tylko wtedy, gdystopien kazdego wierzchołka w G jest parzysty.

Leonhard Euler (1707 – 1783)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 8 / 53

Most

Mostem nazywamy taka krawedz grafu, której usuniecie zwiekszaliczbe spójnych składowych tego grafu.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 9 / 53

Wyznaczanie cyklu Eulera

Do wyznaczania syklu Eulera słuzy algorytm Fleury’egoAlgorytm działa zarówno dla grafów skierowanych jak inieskierowanych.Algorytm jest rekurencyjnyAlgorytm zakłada, ze graf jest eulerowski.Algorytm Fleury’ego opiera sie na prostej zasadzie: aby znalezccykl Eulera lub sciezke Eulera, mosty sa ostatnimi krawedziemi,które nalezy przejsc.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 10 / 53

Algorytm Fleury’ego

Warunek wstepny:Wejsciowy graf jest grafem eulerowskim, czyli:

jest spójnyw przypadku poszukiwania sciez Eulera - posiada co najwyzej dwawierzchołki o nieparzystym stopniuw przypadku poszukiwania cyklu Eulera - wszytkie wierzchołki muszamiec parzysty stopien

Warunek startowy:W przypadku cyklu: wybierz dowolny wierzchołekW przypadku sciezki: wybierz jeden z wierzchołków nieparzystych

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 11 / 53

Algorytm Fleury’ego

Kroki posrednie: Na kazdym kroku, jesli jest wybór, nie wybierajmostu wystepujacego w czesci grafu, która nie została jeszczeodwiedzona. Jednakze, jesli jest tylko jeden wybór, to wez go.Warunek Koncowy: Kiedy nie mozna przechodzic juz dalej, cykl(sciezka) jest kompletna. [W przypadku cyklu, wracamy dowierzchołka wyjsciowego; w przypadku sciezki dochodzimy dodrugiego wierzchołka o nieparzystym stopniu.]

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 12 / 53

Algorytm Fleury’ego

Graf eulerowski:Wybieramy wierzchołek F jak

startowy

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 13 / 53

Algorytm Fleury’ego

Idziemy z F do C

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 14 / 53

Algorytm Fleury’ego

Idziemy z C do D

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 15 / 53

Algorytm Fleury’ego

Idziemy z D do A. (Mozna równiez isc z D do B, ale nie mozna z D doF, bo DF jest mostem)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 16 / 53

Algorytm Fleury’ego

Idziemy z A do C. (Mozna równiez isc z A do E, ale nie mozna z A doB, bo AB jest mostem)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 17 / 53

Algorytm Fleury’ego

Idziemy z C do E. Nie ma wyboru.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 18 / 53

Algorytm Fleury’ego

Idziemy z E do A. Nie ma wyboru.

Bozena Wozna-Szczesniak (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. Jednoznacznasciezka.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 20 / 53

Algorytm Fleury’ego

Kolejne kroki algorytmu - podsumowanie.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 21 / 53

Algorytm Fleury’ego

Dany jest graf półeulerowski. Znalezc sciezke Eulera.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 22 / 53

Algorytm Fleury’ego

Mozemy wystartowac z wierzchołka J lub wierzcholka E.Startujemy z wierzchołka J.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 23 / 53

Algorytm Fleury’ego

Z wierzchołka J mamy 5 mozliwych dróg. Wszystkie sa OK.Wybieramy droge do wierzchołka K

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 24 / 53

Algorytm Fleury’ego

Z wierzchołka K mamy 3 mozliwe drogi. Wszystkie sa OK. Wybieramydroge do wierzchołka B.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 25 / 53

Algorytm Fleury’ego

Z wierzchołka B mamy 3 mozliwe drogi. Wszystkie sa OK. Wybieramydroge do wierzchołka C.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 26 / 53

Algorytm Fleury’ego

Z wierzchołka C mamy 3 mozliwe drogi. Wszystkie sa OK. Wybieramydroge do wierzchołka L.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 27 / 53

Algorytm Fleury’ego

Z wierzchołka L mamy 3 mozliwe drogi. Wszystkie sa OK. Wybieramydroge do wierzchołka K.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 28 / 53

Algorytm Fleury’ego

Z wierzchołka K mamy tylko 1 droge, droge do wierzchołka H.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 29 / 53

Algorytm Fleury’ego

Z wierzchołka H mamy 3 mozliwe drogi: do G, I oraz J. Nie mozemywybrac drogi z H do G, bo jest mostem. Pozostałe dwie sa Ok.Wybieramy droge do wierzchołka J.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 30 / 53

Algorytm Fleury’ego

Z wierzchołka J mamy 3 mozliwe drogi: do A, B oraz I. Nie mozemywybrac drogi z J do I, bo jest mostem. Pozostałe dwie sa Ok.Wybieramy droge do wierzchołka B.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 31 / 53

Algorytm Fleury’ego

Z wierzchołka B do wierzcholka G prowadzi jednoznaczna drogapoprzez wierzcholki A, J, I oraz H.

Bozena Wozna-Szczesniak (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 znich: z G do F, potem do E, potem do D, potem do C, potem do E,potem do G, potem do L i na koncu do E.INNA DROGE PROSZE odnalezc jako cwiczenie !!!

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 33 / 53

Cykl Eulera - Zastosowania

Rysowanie/wycinanie figur przy pomocy ploteraProblem chinskiego listonosza – W roku 1962 chinski matematykMei-Ko Kwan sformułował nastepujacy problem:

Listonosz roznoszac listy musi przejsc przez wszystkieulice w swojej dzielnicy co najmniej jeden raz i wrócic napoczte. Poniewaz jest człowiekiem leniwym, chciałbymiec jak najkrótsza do przejscia trase. Znalezienie takiejtrasy jest problemem, który nazwano problememchinskiego listonosza (ang. Chinese postman problem -CPP).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 34 / 53

Etykietowany graf skierowany

DefinicjaEtykietowanym grafem skierowanym nazywamy struktureG = (V ,E ,w : E → Z ) gdzie

V to zbiór wierzchołków,E ⊆ {(u, v) : u, v ∈ V} to zbiór uporzadkowanych parwierzchołków ze zbioru V , zwanych krawedziami.w : E → Z jest funkcja wagi; wagi reprezentuja pewne wielkosci(np. długosc drogi).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 35 / 53

Etykietowany graf skierowany - przykład

1

-3

v

1

1

2

31

u

23Pytanie: Czynajkrótsza sciezkapomiedzywierzchołkami u i vmoze zawierac cykl?

Odpowiedz: Jesli wgraf istnieje najkrótszasciezka z u do v , to wgrafie tym równiezistnieje najkrótszasciezka z u do v , któranie zawiera cykli.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 36 / 53

Etykietowany graf skierowany - przykład

1

-3

v

1

1

2

31

u

23Pytanie: Czynajkrótsza sciezkapomiedzywierzchołkami u i vmoze zawierac cykl?Odpowiedz: Jesli wgraf istnieje najkrótszasciezka z u do v , to wgrafie tym równiezistnieje najkrótszasciezka z u do v , któranie zawiera cykli.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 36 / 53

Drzewo najkrótszych sciezek

Sformułowanie problemuWejscie:

Etykietowany graf skierowany G = (V ,E ,w : E → Z )Wierzchołek r ∈ V .

Wyjscie:Drzewo T o korzeniu r takie, ze sciezka z r do kazdegowierzchołka u w T jest najkrótsza siezka z r do u w grafie G.

Załozenie: Rozwazane grafy maja wierzchołki osiagalne zwybranego wierzchołka (korzenia) r a.

aDlaczego? Wierzchołki nieosiagalne moga byc usuniete w czasieliniowym

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 37 / 53

Czy najkrótsza sciezka zawsze istnieje ?

Raczej nie ...

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 38 / 53

Drzewo najkrótszych sciezek

Graf G posiada drzewo najkrótszych sciezek wtedy i tylko wtedy,gdy G nie zawiera ujemnych cykli.Dla kazdego wierzchołka u grafu G istnieje najkrótsza sciezka zkorzenia r do wierzchołka u, która nie zawiera cykli.Suma wszystkich najkrótszych sciezek jest drzewem najkrótszychsciezek grafu G ukorzenionego w wierzchołku r .

Problem znalezienia drzewa najkrótszych sciezek jestrównowazny problemowi znalezienia odległosci kazdego zwierzchołków u grafu G od korzenia r 1.

1Przez odległosc od wierzchołka r do wierzchołka u w grafie G rozumiemy długoscnajkrótszej sciezki w grafie G prowadzacej z r do u.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 39 / 53

Drzewo najkrótszych sciezek

Graf G posiada drzewo najkrótszych sciezek wtedy i tylko wtedy,gdy G nie zawiera ujemnych cykli.Dla kazdego wierzchołka u grafu G istnieje najkrótsza sciezka zkorzenia r do wierzchołka u, która nie zawiera cykli.Suma wszystkich najkrótszych sciezek jest drzewem najkrótszychsciezek grafu G ukorzenionego w wierzchołku r .Problem znalezienia drzewa najkrótszych sciezek jestrównowazny problemowi znalezienia odległosci kazdego zwierzchołków u grafu G od korzenia r 1.

1Przez odległosc od wierzchołka r do wierzchołka u w grafie G rozumiemy długoscnajkrótszej sciezki w grafie G prowadzacej z r do u.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 39 / 53

Richard Ernest Bellman - (26.08.1920-19.03.1984)

Twórca programowaniadynamicznego (DynamicProgramming 1957)W 1979 roku otrzymał IEEEMedal of Honor za ”wkład wteorie sterowania i procesówdecyzyjnych, szczególnie zastworzenie i zastosowanieprogramowaniadynamicznego”.1975 - Członek amerykanskiejakademii Nauki i Sztuki.Wiecej na http://en.wikipedia.org/wiki/Richard_E._Bellman

Zródło: http://logistyka.math.uni.lodz.pl/Bellman.jpeg

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 40 / 53

Lester Randolph Ford, junior (ur. 23.09.1927)

Syn matematyka Lester R.Forda, senioraAmerykanski matematykspecjalizujacy sie walgorytmach przepływu w sieciAutor algorytmuBellmana-Forda doznajdowania najkrótszejsciezki w grafach, któreposiadaja krawedzie zujemnymi wagami.

Zródło:http://arodrigu.webs.upv.es/

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 41 / 53

Algorytm Forda-Bellmana

Algorytm słuzy do wyznaczania najmniejszej odległosci odustalonego wierzchołka s do wszystkich pozostałych w grafieskierowanym bez cykli o ujemnej długosci.Warunek nieujemnosci cyklu jest spowodowany faktem, ze wgrafie o ujemnych cyklach najmniejsza odległosc miedzyniektórymi wierzchołkami jest nieokreslona, poniewaz zalezy odliczby przejsc w cyklu.

Bozena Wozna-Szczesniak (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 kazdejpary wierzchołków u i v zawiera wage krawedzi (u, v) (ozn.w((u, v))). Jesli krawedz (u, v) nie istnieje, to przyjmujemy, ze jejwaga wynosi nieskonczonosc i wpisujemy ∗.

Algorytm Forda-Bellmana w kazdym kroku oblicza górneoszacowanie odległosci od wierzchołka r do wszystkichpozostałych wierzchołków v (ozn. d(v)).W pierwszym kroku przyjmujemy d(v) = w((r , v)).Gdy stwierdzimy, ze d(v) > d(u) + w((u, v)), to kazdorazowopolepszamy aktualne oszacowanie i podstawiamyd(v) := d(u) + w((u, v)).Algorytm konczy sie, gdy zadnego oszacowania nie mozna juzpoprawic. Wówczas macierz d(v) zawiera najkrótsze odległosciod wierzchołka r do wszystkich pozostałych.

Bozena Wozna-Szczesniak (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 kazdejpary wierzchołków u i v zawiera wage krawedzi (u, v) (ozn.w((u, v))). Jesli krawedz (u, v) nie istnieje, to przyjmujemy, ze jejwaga wynosi nieskonczonosc i wpisujemy ∗.Algorytm Forda-Bellmana w kazdym kroku oblicza górneoszacowanie odległosci od wierzchołka r do wszystkichpozostałych wierzchołków v (ozn. d(v)).

W pierwszym kroku przyjmujemy d(v) = w((r , v)).Gdy stwierdzimy, ze d(v) > d(u) + w((u, v)), to kazdorazowopolepszamy aktualne oszacowanie i podstawiamyd(v) := d(u) + w((u, v)).Algorytm konczy sie, gdy zadnego oszacowania nie mozna juzpoprawic. Wówczas macierz d(v) zawiera najkrótsze odległosciod wierzchołka r do wszystkich pozostałych.

Bozena Wozna-Szczesniak (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 kazdejpary wierzchołków u i v zawiera wage krawedzi (u, v) (ozn.w((u, v))). Jesli krawedz (u, v) nie istnieje, to przyjmujemy, ze jejwaga wynosi nieskonczonosc i wpisujemy ∗.Algorytm Forda-Bellmana w kazdym kroku oblicza górneoszacowanie odległosci od wierzchołka r do wszystkichpozostałych wierzchołków v (ozn. d(v)).W pierwszym kroku przyjmujemy d(v) = w((r , v)).

Gdy stwierdzimy, ze d(v) > d(u) + w((u, v)), to kazdorazowopolepszamy aktualne oszacowanie i podstawiamyd(v) := d(u) + w((u, v)).Algorytm konczy sie, gdy zadnego oszacowania nie mozna juzpoprawic. Wówczas macierz d(v) zawiera najkrótsze odległosciod wierzchołka r do wszystkich pozostałych.

Bozena Wozna-Szczesniak (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 kazdejpary wierzchołków u i v zawiera wage krawedzi (u, v) (ozn.w((u, v))). Jesli krawedz (u, v) nie istnieje, to przyjmujemy, ze jejwaga wynosi nieskonczonosc i wpisujemy ∗.Algorytm Forda-Bellmana w kazdym kroku oblicza górneoszacowanie odległosci od wierzchołka r do wszystkichpozostałych wierzchołków v (ozn. d(v)).W pierwszym kroku przyjmujemy d(v) = w((r , v)).Gdy stwierdzimy, ze d(v) > d(u) + w((u, v)), to kazdorazowopolepszamy aktualne oszacowanie i podstawiamyd(v) := d(u) + w((u, v)).

Algorytm konczy sie, gdy zadnego oszacowania nie mozna juzpoprawic. Wówczas macierz d(v) zawiera najkrótsze odległosciod wierzchołka r do wszystkich pozostałych.

Bozena Wozna-Szczesniak (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 kazdejpary wierzchołków u i v zawiera wage krawedzi (u, v) (ozn.w((u, v))). Jesli krawedz (u, v) nie istnieje, to przyjmujemy, ze jejwaga wynosi nieskonczonosc i wpisujemy ∗.Algorytm Forda-Bellmana w kazdym kroku oblicza górneoszacowanie odległosci od wierzchołka r do wszystkichpozostałych wierzchołków v (ozn. d(v)).W pierwszym kroku przyjmujemy d(v) = w((r , v)).Gdy stwierdzimy, ze d(v) > d(u) + w((u, v)), to kazdorazowopolepszamy aktualne oszacowanie i podstawiamyd(v) := d(u) + w((u, v)).Algorytm konczy sie, gdy zadnego oszacowania nie mozna juzpoprawic. Wówczas macierz d(v) zawiera najkrótsze odległosciod wierzchołka r do wszystkich pozostałych.

Bozena Wozna-Szczesniak (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 r1: for each v ∈ V do2: d(v) = w((r , v));3: end for4: for k := 1 to |V | − 2 do5: for each v ∈ V \ {r} do6: for each u ∈ V do7: d(v) := min{d(v),d(u) + w((u, v))}8: end for9: end for

10: end for

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 44 / 53

Algorytm Forda-Bellman - przykład

1 2 3 4 5 61 0 2 4 * * *2 * 0 * * 4 *3 * * 0 -2 3 *4 1 * * 0 * 25 * * * * 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 4c2 0 2 4 2 5d 43 0 2 4 2 5 4

k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawedzi.

a. W kroku k = 0, d(4) = ∗, gdyz nie istnieje krawedz (1,4). Mozemy jednak przejsc przez wierzchołek 3 (odległosc od 1do 3 wynosi 4) a nastepnie do 4 (waga krawedzi [3, 4] = −2), długosc drogi od 1 do 4 wynosi wiec 4 − 2 = 2.

b. Do wierzchołka 5 mozemy dojsc przez 2, 3, lub 6. Wybieramy droge o najmniejszej długosci:d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = ∗ + 1. Wybieramy opcje z wierzchołkiemnr. 2.

c. Do wierzchołka 6 mozemy dojsc przez 4 (do którego dochodzimy przez 3) droga jest wiec nastepujaca: 1, 3, 4, 6 a jejdługosc wynosi d(4) + w(4, 6) = 2 + 2 = 4.

d. Z punktu (b.) wynika, ze do wierzchołka 5 mozemy dojsc takze poprzez wierzchołek 6. W poprzednim kroku poznalismyodległosc do wierzchołka 6 i nie wynosi ona juz nieskonczonosc. Zatem długosc drogi do wierzchołka 5 poprzez 6:d(6)+w(6,5)=4+1=5. Jest to wartosc mniejsza niz aktualna (6), wiec znalezlismy krótsza droge.

k=3 Nic sie nie zmieniło od kroku k=2. Konczymy obliczenia i mamy wektor najkrótszych dróg od wierzchołka r = 1 dowszystkich pozostałych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 45 / 53

Algorytm Forda-Bellman - przykład

1 2 3 4 5 61 0 2 4 * * *2 * 0 * * 4 *3 * * 0 -2 3 *4 1 * * 0 * 25 * * * * 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 4c2 0 2 4 2 5d 43 0 2 4 2 5 4

k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawedzi.

a. W kroku k = 0, d(4) = ∗, gdyz nie istnieje krawedz (1,4). Mozemy jednak przejsc przez wierzchołek 3 (odległosc od 1do 3 wynosi 4) a nastepnie do 4 (waga krawedzi [3, 4] = −2), długosc drogi od 1 do 4 wynosi wiec 4 − 2 = 2.

b. Do wierzchołka 5 mozemy dojsc przez 2, 3, lub 6. Wybieramy droge o najmniejszej długosci:d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = ∗ + 1. Wybieramy opcje z wierzchołkiemnr. 2.

c. Do wierzchołka 6 mozemy dojsc przez 4 (do którego dochodzimy przez 3) droga jest wiec nastepujaca: 1, 3, 4, 6 a jejdługosc wynosi d(4) + w(4, 6) = 2 + 2 = 4.

d. Z punktu (b.) wynika, ze do wierzchołka 5 mozemy dojsc takze poprzez wierzchołek 6. W poprzednim kroku poznalismyodległosc do wierzchołka 6 i nie wynosi ona juz nieskonczonosc. Zatem długosc drogi do wierzchołka 5 poprzez 6:d(6)+w(6,5)=4+1=5. Jest to wartosc mniejsza niz aktualna (6), wiec znalezlismy krótsza droge.

k=3 Nic sie nie zmieniło od kroku k=2. Konczymy obliczenia i mamy wektor najkrótszych dróg od wierzchołka r = 1 dowszystkich pozostałych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 45 / 53

Algorytm Forda-Bellman - przykład

1 2 3 4 5 61 0 2 4 * * *2 * 0 * * 4 *3 * * 0 -2 3 *4 1 * * 0 * 25 * * * * 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 4c2 0 2 4 2 5d 43 0 2 4 2 5 4

k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawedzi.

a. W kroku k = 0, d(4) = ∗, gdyz nie istnieje krawedz (1,4). Mozemy jednak przejsc przez wierzchołek 3 (odległosc od 1do 3 wynosi 4) a nastepnie do 4 (waga krawedzi [3, 4] = −2), długosc drogi od 1 do 4 wynosi wiec 4 − 2 = 2.

b. Do wierzchołka 5 mozemy dojsc przez 2, 3, lub 6. Wybieramy droge o najmniejszej długosci:d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = ∗ + 1. Wybieramy opcje z wierzchołkiemnr. 2.

c. Do wierzchołka 6 mozemy dojsc przez 4 (do którego dochodzimy przez 3) droga jest wiec nastepujaca: 1, 3, 4, 6 a jejdługosc wynosi d(4) + w(4, 6) = 2 + 2 = 4.

d. Z punktu (b.) wynika, ze do wierzchołka 5 mozemy dojsc takze poprzez wierzchołek 6. W poprzednim kroku poznalismyodległosc do wierzchołka 6 i nie wynosi ona juz nieskonczonosc. Zatem długosc drogi do wierzchołka 5 poprzez 6:d(6)+w(6,5)=4+1=5. Jest to wartosc mniejsza niz aktualna (6), wiec znalezlismy krótsza droge.

k=3 Nic sie nie zmieniło od kroku k=2. Konczymy obliczenia i mamy wektor najkrótszych dróg od wierzchołka r = 1 dowszystkich pozostałych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 45 / 53

Algorytm Forda-Bellman - przykład

1 2 3 4 5 61 0 2 4 * * *2 * 0 * * 4 *3 * * 0 -2 3 *4 1 * * 0 * 25 * * * * 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 4c2 0 2 4 2 5d 43 0 2 4 2 5 4

k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawedzi.

a. W kroku k = 0, d(4) = ∗, gdyz nie istnieje krawedz (1,4). Mozemy jednak przejsc przez wierzchołek 3 (odległosc od 1do 3 wynosi 4) a nastepnie do 4 (waga krawedzi [3, 4] = −2), długosc drogi od 1 do 4 wynosi wiec 4 − 2 = 2.

b. Do wierzchołka 5 mozemy dojsc przez 2, 3, lub 6. Wybieramy droge o najmniejszej długosci:d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = ∗ + 1. Wybieramy opcje z wierzchołkiemnr. 2.

c. Do wierzchołka 6 mozemy dojsc przez 4 (do którego dochodzimy przez 3) droga jest wiec nastepujaca: 1, 3, 4, 6 a jejdługosc wynosi d(4) + w(4, 6) = 2 + 2 = 4.

d. Z punktu (b.) wynika, ze do wierzchołka 5 mozemy dojsc takze poprzez wierzchołek 6. W poprzednim kroku poznalismyodległosc do wierzchołka 6 i nie wynosi ona juz nieskonczonosc. Zatem długosc drogi do wierzchołka 5 poprzez 6:d(6)+w(6,5)=4+1=5. Jest to wartosc mniejsza niz aktualna (6), wiec znalezlismy krótsza droge.

k=3 Nic sie nie zmieniło od kroku k=2. Konczymy obliczenia i mamy wektor najkrótszych dróg od wierzchołka r = 1 dowszystkich pozostałych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 45 / 53

Algorytm Forda-Bellman - przykład

1 2 3 4 5 61 0 2 4 * * *2 * 0 * * 4 *3 * * 0 -2 3 *4 1 * * 0 * 25 * * * * 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 4c2 0 2 4 2 5d 43 0 2 4 2 5 4

k=0 d(v) = w((1, v)). Przepisujemy pierwszy wiersz macierzy wag krawedzi.

a. W kroku k = 0, d(4) = ∗, gdyz nie istnieje krawedz (1,4). Mozemy jednak przejsc przez wierzchołek 3 (odległosc od 1do 3 wynosi 4) a nastepnie do 4 (waga krawedzi [3, 4] = −2), długosc drogi od 1 do 4 wynosi wiec 4 − 2 = 2.

b. Do wierzchołka 5 mozemy dojsc przez 2, 3, lub 6. Wybieramy droge o najmniejszej długosci:d(2) + w(2, 5) = 2 + 4 = 6, d(3) + w(3, 5) = 4 + 3 = 7, d(6) + w(6, 5) = ∗ + 1. Wybieramy opcje z wierzchołkiemnr. 2.

c. Do wierzchołka 6 mozemy dojsc przez 4 (do którego dochodzimy przez 3) droga jest wiec nastepujaca: 1, 3, 4, 6 a jejdługosc wynosi d(4) + w(4, 6) = 2 + 2 = 4.

d. Z punktu (b.) wynika, ze do wierzchołka 5 mozemy dojsc takze poprzez wierzchołek 6. W poprzednim kroku poznalismyodległosc do wierzchołka 6 i nie wynosi ona juz nieskonczonosc. Zatem długosc drogi do wierzchołka 5 poprzez 6:d(6)+w(6,5)=4+1=5. Jest to wartosc mniejsza niz aktualna (6), wiec znalezlismy krótsza droge.

k=3 Nic sie nie zmieniło od kroku k=2. Konczymy obliczenia i mamy wektor najkrótszych dróg od wierzchołka r = 1 dowszystkich pozostałych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 45 / 53

Algorytm Dijkstry

Algorytm Dijkstry słuzy do wyznaczania najmniejszej odległosciod ustalonego wierzchołka r do wszystkich pozostałych w grafieskierowanym.

W odróznieniu jednak od Algorytmu Forda-Bellmana, grafwejsciowy nie moze zawierac krawedzi o ujemnych wagach.W algorytmie tym pamietany jest zbiór Q wierzchołków, dlaktórych nie obliczono jeszcze najkrótszych sciezek, oraz wektord [v ] odległosci od wierzchołka r do v . Poczatkowo zbiór Qzawiera wszystkie wierzchołki, a wektor d jest pierwszymwierszem macierzy zawierajacym wagi krawedzi.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 46 / 53

Algorytm Dijkstry

Algorytm Dijkstry słuzy do wyznaczania najmniejszej odległosciod ustalonego wierzchołka r do wszystkich pozostałych w grafieskierowanym.W odróznieniu jednak od Algorytmu Forda-Bellmana, grafwejsciowy nie moze zawierac krawedzi o ujemnych wagach.

W algorytmie tym pamietany jest zbiór Q wierzchołków, dlaktórych nie obliczono jeszcze najkrótszych sciezek, oraz wektord [v ] odległosci od wierzchołka r do v . Poczatkowo zbiór Qzawiera wszystkie wierzchołki, a wektor d jest pierwszymwierszem macierzy zawierajacym wagi krawedzi.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 46 / 53

Algorytm Dijkstry

Algorytm Dijkstry słuzy do wyznaczania najmniejszej odległosciod ustalonego wierzchołka r do wszystkich pozostałych w grafieskierowanym.W odróznieniu jednak od Algorytmu Forda-Bellmana, grafwejsciowy nie moze zawierac krawedzi o ujemnych wagach.W algorytmie tym pamietany jest zbiór Q wierzchołków, dlaktórych nie obliczono jeszcze najkrótszych sciezek, oraz wektord [v ] odległosci od wierzchołka r do v . Poczatkowo zbiór Qzawiera wszystkie wierzchołki, a wektor d jest pierwszymwierszem macierzy zawierajacym wagi krawedzi.

Bozena Wozna-Szczesniak (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 wartosci d [v ] iusun go ze zbioru.Dla kazdego nastepnika i wierzchołka v sprawdz czyd [i] > d [v ] + w((v , i)), tzn. czy aktualne oszacowanie odległosci dowierzchołka i jest wieksze od oszacowania odległosci dowierzchołka v plus waga krawedzi (v , i).

Jak widac z powyzszego pseudokodu algorytm wybiera z kolejki Q“najlzejszy” wierzchołek, tzn. jest oparty o strategie zachłanna.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 47 / 53

Algorytm Dijkstry - przykład

a b c d ea 0 10 * * 5b * 0 1 * 2c * * 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

Najlzejszy wierzchołek jest podkreslony. Wierzchołki, dla którychwyznaczono juz najkrótsze sciezki sa pogrubione

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 48 / 53

Wyznaczanie najkrótszej drogi w grafie dla znanejodległosci

Algorytm słuzy do wyznaczania w grafie ciagu wierzchołkówus,us+1 . . . ut tworzacych droge miedzy wierzchołkami us i ut odługosci d(us,ut) i jest on najczesciej uzywany razem zalgorytmem Forda-Bellmana lub Dijkstry.

Po wyznaczeniu najkrótszej odległosci d(us,ut) miedzy parawierzchołków w grafie, mozna skonstruowac droge miedzy tymiwierzchołkami taka, ze suma wag jej krawedzi jest równad(us,ut), tzn. mozemy wyznaczyc droge miedzy wierzchołkami usi ut o najkrótszej długosci.Załózmy wiec, ze dla danego grafu opisanego za pomocamacierzy wag krawedzi wywołalismy algorytm wyznaczanianajkrótszej odległosci od ustalonego wierzchołka (us) dowszystkich pozostałych i w jego wyniku otrzymalismy wektorodległosci D.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 49 / 53

Wyznaczanie najkrótszej drogi w grafie dla znanejodległosci

Algorytm słuzy do wyznaczania w grafie ciagu wierzchołkówus,us+1 . . . ut tworzacych droge miedzy wierzchołkami us i ut odługosci d(us,ut) i jest on najczesciej uzywany razem zalgorytmem Forda-Bellmana lub Dijkstry.Po wyznaczeniu najkrótszej odległosci d(us,ut) miedzy parawierzchołków w grafie, mozna skonstruowac droge miedzy tymiwierzchołkami taka, ze suma wag jej krawedzi jest równad(us,ut), tzn. mozemy wyznaczyc droge miedzy wierzchołkami usi ut o najkrótszej długosci.

Załózmy wiec, ze dla danego grafu opisanego za pomocamacierzy wag krawedzi wywołalismy algorytm wyznaczanianajkrótszej odległosci od ustalonego wierzchołka (us) dowszystkich pozostałych i w jego wyniku otrzymalismy wektorodległosci D.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 49 / 53

Wyznaczanie najkrótszej drogi w grafie dla znanejodległosci

Algorytm słuzy do wyznaczania w grafie ciagu wierzchołkówus,us+1 . . . ut tworzacych droge miedzy wierzchołkami us i ut odługosci d(us,ut) i jest on najczesciej uzywany razem zalgorytmem Forda-Bellmana lub Dijkstry.Po wyznaczeniu najkrótszej odległosci d(us,ut) miedzy parawierzchołków w grafie, mozna skonstruowac droge miedzy tymiwierzchołkami taka, ze suma wag jej krawedzi jest równad(us,ut), tzn. mozemy wyznaczyc droge miedzy wierzchołkami usi ut o najkrótszej długosci.Załózmy wiec, ze dla danego grafu opisanego za pomocamacierzy wag krawedzi wywołalismy algorytm wyznaczanianajkrótszej odległosci od ustalonego wierzchołka (us) dowszystkich pozostałych i w jego wyniku otrzymalismy wektorodległosci D.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 49 / 53

Wyznaczanie najkrótszej drogi w grafie dla znanejodległosci

Z wektora D odczytujemy najmniejsza odległosc miedzywierzchołkami us i ut : D[ut ] = d(us,ut).Po wykonaniu ponizszego algorytmu na stosie otrzymamy ciagwierzchołków us, . . . ,ut bedacych droga miedzy wierzchołkiem usi ut o długosci d(us,ut).

AlgorytmRequire: Stos S, wierzchołki poczatkowy us i koncowy ut

1: push(S,ut);2: v := ut ;3: while v ! = us do4: znajdz wierzchołek u taki, ze D(v) = D(u) + w((u, v));5: push(S,u);6: v := u;7: end while

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 50 / 53

Przykład

1 2 3 4 5 61 0 2 4 * * *2 * 0 * * 4 *3 * * 0 -2 3 *4 1 * * 0 * 25 * * * * 0 *6 * 2 * * 1 0

Jak widac z macierzy wag graf ten makrawedzie o ujemnych wagach, musimy wieczastosowac algorytm Forda-Bellmana. Wwyniku jego działania otrzymamy wektor dpostaci:D[1] = 0, D[2] = 2, D[3] = 4, D[4] = 2,D[5] = 5, D[6] = 4.

Załózmy ze wierzchołkiem, wzgledem któregowyznaczac bedziemy najkrótsza droge jestwierzchołek o indeksie 1. Dlatego tezD[1] = 0. Musimy tez wybrac wierzchołekkoncowy – niech bedzie to wierzchołek nr. 5.Z wektora D odczytujemy najmniejszaodległosc miedzy wierzchołkami 1 i 5, tj.D[5] = d(1, 5) = 5. Wyznaczamy drogełaczaca wierzchołek 1 i 5 o długosci równej 5.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 51 / 53

Przykład, cd.

Po wykonaniu pierwszej linii algorytmu otrzymamy anstepujaceparametry: Stos = {5}, v = 5, D[v ] = 5, u =?,D[u] + w((u, v)) =?.Poszukujemy teraz wierzchołka u. Sprawdzamy wartosciD[u] + w((u, v)) tylko dla tych wierzchołków u, które sapoprzednikami wierzchołka v . W naszym przypadkupoprzednikami wierzchołka 5 sa wierzchołki 2, 3 i 6. Sprawdzamywiec: D[2] + w((2,5)) = 2 + 4 = 6! = D[5],D[3] + w((3,5)) = 4 + 3 = 7! = D[5], orazD[6] + w((6,5)) = 4 + 1 = 5 = D[5].Znalezlismy wierzchołek u = 6, wykonujemy zatem instrukcje 5 i 6algorytmu: Stos = {5,6}, v = 6, D[v ] = 4, u =?,D[u] + w((u, v)) =?.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 52 / 53

Przykład, cd.

Tym razem nie mamy zbyt duzego wyboru, gdyz jedynympoprzednikiem wierzchołka nr. 6 jest 4. A wiecD[4] + w((4,6)) = 2 + 2 = 4 = d [6], zatem m = 4. Dalej algorytmprzebiega 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 sie konczy, gdyz w nastepnej iteracji v = 1. A zatemdroga miedzy wierzchołkiem 1 i 5 o długosci 5 jest nastepujaca:(1,3,4,6,5).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 9 53 / 53