5. Najkrótsze ścieżki

Podobne dokumenty
Digraf. 13 maja 2017

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

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

Algorytmy wyznaczania centralności w sieci Szymon Szylko

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

Zagadnienie najkrótszej drogi w sieci

Matematyczne Podstawy Informatyki

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

Algorytmy i Struktury Danych.

Sortowanie topologiczne skierowanych grafów acyklicznych

Programowanie sieciowe. Tadeusz Trzaskalik

5c. Sieci i przepływy

TEORIA GRAFÓW I SIECI

TEORETYCZNE PODSTAWY INFORMATYKI

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

Programowanie dynamiczne

Ogólne wiadomości o grafach

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

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

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

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.

Kolejny krok iteracji polega na tym, że przechodzimy do następnego wierzchołka, znajdującego się na jednej krawędzi z odnalezionym już punktem, w

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

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 sieci neuronowych, wykład 11 Łańcuchy Markova

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

Programowanie liniowe metoda sympleks

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

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

Matematyka dyskretna

Programowanie liniowe metoda sympleks

Metoda graficzna może być stosowana w przypadku gdy model zawiera dwie zmienne decyzyjne. Metoda składa się z dwóch kroków (zobacz pierwszy wykład):

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

Sieć (graf skierowany)

Elementy teorii grafów Elementy teorii grafów

Algorytmy mrówkowe (optymalizacja kolonii mrówek, Ant Colony optimisation)

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

Graf. Definicja marca / 1

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

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

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

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Zaawansowane metody numeryczne

Algorytmiczna teoria grafów Przepływy w sieciach.

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

Macierze. Rozdział Działania na macierzach

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Sprawozdanie do zadania numer 2

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

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

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.

Wstęp do programowania

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

Zagadnienie transportowe

Spacery losowe generowanie realizacji procesu losowego

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

7. Skojarzenia w grafach. 7.1 Definicje i twierdzenia

TEORIA GRAFÓW I SIECI

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

Algorytm. Krótka historia algorytmów

Algorytmy mrówkowe. H. Bednarz. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

1 Macierz odwrotna metoda operacji elementarnych

Programowanie celowe #1

DWA ZDANIA O TEORII GRAFÓW. przepływ informacji tylko w kierunku

Układy równań liniowych

Optymalizacja. Przeszukiwanie lokalne

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

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

1 Automaty niedeterministyczne

TEORIA GRAFÓW I SIECI

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

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

Programowanie liniowe metoda sympleks

9.9 Algorytmy przeglądu

Rozwiązywanie układów równań liniowych

Wykład 14. Elementy algebry macierzy

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Programowanie dynamiczne cz. 2

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

PROGRAMOWANIE SIECIOWE. METODA ŚCIEŻKI KRYTYCZNEJ

Podejście zachłanne, a programowanie dynamiczne

Lista 4. Kamil Matuszewski 22 marca 2016

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Metody Programowania

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

Algorytm. Krótka historia algorytmów

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu

Algorytmy z powracaniem

Informatyka w logistyce przedsiębiorstw wykład 5

Matematyczne Podstawy Informatyki

Minimalne drzewa rozpinające

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

TEORIA GRAFÓW I SIECI

Znajdowanie skojarzeń na maszynie równoległej

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

Teoretyczne podstawy programowania liniowego

Transkrypt:

p. Definicja 5. Najkrótsze ścieżki 5.1 Odległości w grafach: definicje i własności (Długość ścieżki). Długościa ścieżki nazywamy liczbę krawędzi występujacych w tej ścieżce. Bardziej formalnie, jeżeli W = v 0 e 1 v 1 e 2,...,e k v k jest ścieżka, to jej długościa k (bo występuja w niej kolejno krawędzie (łuki) e 1, e 2,..., e k ).

p. Definicja (Odległość wierzchołków). Jeżeli dwa wierzchołki v i u należa do tej samej składowej spójności grafu G = (V,E) to ich odległość ρ(v,u) = ρ G (v,u) jest długości G, w przeciwnym przypadku (v i u należ ρ(v,u) =. a najkrótszej (v, u)-ścieżki w a do różnych składowych) jeżeli krawędziom grafu zostały przyporzadkowane pewne liczby (wagi krawędzi), to graf z taka dodatkowo określona na zbiorze krawędzi funkcja nazywać będziemy grafem z wagami długość ścieżki w takim grafie to suma wag jej krawędzi graf bez wag możemy traktować jako graf z wagami jednostkowymi

p. Definicja (Średnica grafu). Średnica grafu G = (V,E), oznaczana diam(g), nazywamy największa odległość między wierzchołkami grafu, to jest diam(g) = max{ρ G (v,u) : v,u V (G)}. Definicja (Promień grafu). Promieniem grafu G = (V, E), oznaczanym r(g), nazywamy wielkość r(g) = min v V (G) max{ρ G(v,u) : u V (G)}.

p. Wierzchołki dla których osiagnięte jest powyższe minimum, to znaczy wierzchołki v V (G) takie, że max{ρ G (v,u) : u V (G)} = r(g), nazywamy wierzchołkami centralnymi, a zbiór wierzchołków centralnych nazywamy centrum grafu. 1. Najkrótsza ścieżka między dwoma wierzchołkami (odległość wierzchołków). 2. Najkrótsze ścieżki z dowolnego wierzchołka do pozostałych wierzchołków. 3. Najkrótsze ścieżki między wszystkimi parami wierzchołków (promień, średnica i centrum grafu).

p. 5.1 Najkrótsze ścieżki: wagi jednostkowe Opis algorytmu znajdowania najkrótszej ścieżki między dwoma ustalonymi wierzchołkami (przy pomocy BFS ). 1. Etykietujemy wierzchołek s cecha 0 ; i := 0. 2. Znajdujemy wszystkich niezaetykietowanych jeszcze sasiadów (wszystkie następniki w przypadku grafu skierowanego) wierzchołków zaetykietowanych cecha i. Jeżeli takich wierzchołków nie ma, to STOP. 3. Etykietujemy wszystkie wierzchołki znalezione w kroku 2 cech a i + 1. 4. Jeżeli wierzchołek t został zaetykietowany, to STOP. W przeciwnym razie zmieniamy i := i + 1 i wracamy do kroku 2.

p. bardziej precyzyjnie procedura ta przedstawiona jest w postaci pseudokodu jako algorytm DISTBFS w algorytmie tym d jest tablica wyznaczonych już odległości. wewnatrz pętli repeat P jest zbiorem wierzchołków o odległości k 1 od s, N jest aktualnie wyznaczanym zbiorem wierzchołków o odległości k Γ(v) to zbiór sasiadów wierzchołka v działanie programu kończy się, gdy znajdziemy odległość s od t (warunek w = t) lub znajdziemy odległości s od wszystkich wierzchołków w składowej zawierajacej s (warunek N = ).

p. G, s, t v V (G) d[v] d[s] 0; P {s}; k 0 P N; N ; k k + 1 v P w Γ(v) d[w] = d[w] k N N {w} w = t N = (d[t])

p. Prosta modyfikacja tego algorytmu usunięcie instrukcji if w = t then break spowoduje obliczenie, w tablicy d, odległości wierzchołka s od wszystkich wierzchołków grafu (to znaczy, po wyjściu z procedury będzie zachodziła dla wszystkich v V (G) równość d[v] = ρ(s,v)). Przykład. Wyznacz odległość ρ(a, i) w grafie zadanego macierza przyległości A(G) = a b c d e f g h i a 0 1 0 0 0 0 0 0 0 b 1 0 1 0 0 1 0 0 0 c 0 1 0 1 1 1 0 0 0 d 0 0 1 0 1 0 1 1 0 e 0 0 1 1 0 1 0 1 0. f 0 1 1 0 1 0 0 0 0 g 0 0 0 1 0 0 0 1 0 h 0 0 0 1 1 0 1 0 1 i 0 0 0 0 0 0 0 1 0

p. g h i d e f 0 a b c

p. 1 g h i d e f 0 1 a b c

p. 1 g h i d e f 2 0 1 a b c 2

p. 1 g h i 3 3 d e f 2 0 1 a b c 2

p. 1 g 4 4 h i 3 3 d e f 2 0 1 a b c 2

p. 1 g 4 4 5 h i 3 3 d e f 2 0 1 a b c 2

p. 1 5.2 Najkrótsze ścieżki: wagi nieujemne przypomnijmy, że w grafie z wagami na krawdędziach, najkrótsza ścieżka między dwoma wierzchołkami to ścieżka o najmniejszej wadze nie koniecznie majaca najmniej krawędzi w przypadku, gdy wszystkie wagi sa nieujemne do wyznaczenia najkrótszej ścieżki między dwoma ustalonymi wierzchołkami s i t stosujemy najczęściej algorytm Dijkstry

p. 1 podstawowa idea algorytmu jest przemieszczanie się po krawędziach grafu z wierzchołka s w kierunku wierzchołka t i cechowanie wierzchołków ich bieżacymi odległościami od wierzchołka s cecha wierzchołka v staje się stała, gdy jest równa długości najkrótszej ścieżki z s do v wierzchołki, które nie zostały ocechowane stałymi cechami maja cechy tymczasowe cechę tymczasowa możemy interpretować jako długość najkrótszej z dotychczas znalezionych ścieżek z s do t.

p. 1 W algorytmie posługujemy się następujacymi oznaczeniami: 1. Cecha[v] długość aktualnie najkrótszej ścieżki między s i v; 2. P oprzednik[v] bezpośredni poprzednik wierzchołka v na aktualnie najkrótszej ścieżce z s do v; 3. Tymczasowe zbiór wierzchołków majacych aktualnie cechy tymczasowe. Uwaga: opis algorytmu zakłada, że mamy do czynienia z digrafem; dla grafów nieskierowanych poprzednik oznacza po prostu sasiad

p. 1 Algorytm Dijkstry 1. Nadaj wierzchołkowi s cechę równa 0 (Cecha[s] 0). Pozostałym wierzchołkom v, v s, nadaj cechę równa (Cecha[v] := ) oraz P oprzednik niezdefiniowany (P oprzednik[v] 0). Zdefiniuj wartości pozostałych zmiennych Tymczasowe V \ {s}, z s. 2. Wszystkim następnikom u wierzchołka z, które nie maja cechy stałej (u T ymczasowe), dla których Cecha[u] > Cecha[z] + w zu, nadaj nowe cechy tymczasowe Cecha[u] Cecha[z] + w zu. Zmień dla nich również druga etykietę Poprzednik[u] z.

p. 1 3. Spośród wierzchołków z T ymczasowe wybierz jeden o najmniejszej cesze i zapisz go jako x. Nadaj x cechę stała Tymczasowe Tymczasowe {x}; z := x. 4. Jeżeli z t to wróć do kroku 2. 5. STOP długość najkrótszej ścieżki z wierzchołka s do t wynosi Cecha[t], natomiast sama ścieżka ma następujac a postać : (s,...,poprzednik[poprzednik[t]],poprzednik[t],t).

p. 2 % &' # $!" +, ) * ) * ( -./01 5 4 3 2 G = (V, W), s, t 6 v V Cecha[v] ; Poprzednik[v] 0 Cecha[s] 0; Tymczasowe V \ {s}; z s; 7 #$8 ; # ' 9 : & 9 8 < 8 $ M 7 #$8 ; # ' 9 : u Γ(z) Tymczasowe Cecha[u] { > Cecha[z] + W[z, u] Cecha[u] Cecha[z] + W[z, u] % 7 ' 8= & Poprzednik[u] z Cecha[u] M % 7 ' 8=x u; M Cecha[u] & Tymczasowe Tymczasowe \ {x} z x x = t (Cecha[t]) &%! = > & >$= 8 $

p. 2 Uwaga! Jeżeli w opisie algorytmu zamienimy krok czwarty na: 4. jeżeli Tymczasowe to wróć do kroku 2. lub, równoważnie, jeżeli w pseudokodzie zamienimy linię until x = t na until Tymczasowe, to algorytm Dijkstry wyznaczy odległość s od wszystkich pozostałych wierzchołków grafu. Przykład. Wyznaczyć za pomoca algorytmu Dijkstry długość najkrótszej ścieżki między wierzchołkami e i h w poniższym grafie:

p. 2 e f g h 15 13 12 0, 12 12 14 15 11 15 11 12 13 13 a b c d

p. 2 e f g h 15 13 12 0, 15, e 12 12 14 15 11 15 11 12, e 12, e 12 13 13 a b c d

p. 2 e f g h 15 13 12 0, 15, e 12 12 14 15 11 15 11 12, e 12, e 12 13 13 a b c d

p. 2 e f g h 15 13 12 0, 15, e 27, b 12 12 14 15 11 15 11 12, e 12, e 25, b 12 13 13 a b c d

p. 2 e f g h 15 13 12 0, 15, e 27, b 12 12 14 15 11 15 11 12, e 12, e 25, b 12 13 13 a b c d

p. 2 e f g h 15 13 12 0, 15, e 27, b 40, c 12 12 14 15 11 15 11 12, e 12 12, e 13 25, b 13 38, c a b c d

p. 2 e f g h 15 13 12 0, 15, e 27, b 39, g 12 12 14 15 11 15 11 12, e 12 12, e 13 25, b 13 38, c a b c d

p. 2 e f g h 15 13 12 0, 15, e 27, b 39, g 12 12 14 15 11 15 11 12, e 12 12, e 13 25, b 13 38, c a b c d

p. 3 e f g h 15 13 12 0, 15, e 27, b 39, g 12 12 14 15 11 15 11 12, e 12 12, e 13 25, b 13 38, c a b c d

p. 3 zauważmy, że zewnętrzna pętla repeat w algorytmie Dijkstry może być wykonana co najwyżej V 1 razy (z może być, co najwyżej jeden raz, pewnym wierzchołkiem z V \ {s}) maksymalny przebieg tej pętli ma miejsce wtedy, gdy wierzchołek końcowy t otrzymuje cechę stała jako ostatni podczas każdego wykonania tej pętli wykonujemy O( V ) operacji złożoność obliczeniowa algorytmu, w obu wersjach wyznaczenie ρ(s, t) i wyznaczenie odległości s od wszystkich wierzchołków, jest rzędu O(n 2 ), gdzie n = V

p. 3 5.3 Najkrótsze ścieżki: wagi dowolne jeżeli wagi pewnych krawędzi grafu sa ujemne to algorytm Dijkstry nie będzie działał poprawnie, ponieważ mechanizm nadawania cech stałych zakłada, że właczenie do ścieżki dodatkowych krawędzi może ja tylko wydłużyć

p. 3 5.3 Najkrótsze ścieżki: wagi dowolne jeżeli wagi pewnych krawędzi grafu sa ujemne to algorytm Dijkstry nie będzie działał poprawnie, ponieważ mechanizm nadawania cech stałych zakłada, że właczenie do ścieżki dodatkowych krawędzi może ja tylko wydłużyć w przypadku ujemnych wag, dodanie krawędzi może długość ścieżki zmniejszyć

p. 3 5.3 Najkrótsze ścieżki: wagi dowolne jeżeli wagi pewnych krawędzi grafu sa ujemne to algorytm Dijkstry nie będzie działał poprawnie, ponieważ mechanizm nadawania cech stałych zakłada, że właczenie do ścieżki dodatkowych krawędzi może ja tylko wydłużyć w przypadku ujemnych wag, dodanie krawędzi może długość ścieżki zmniejszyć Bellman i Ford zaproponowali modyfikację algorytmu Dijkstry, polegajac a na tym, że cechy tymczasowe otrzymuja te wierzchołki, których cechy w ostatnim kroku zmieniły się; algorytm kończy się, gdy w którymś kroku, żadne cechy wierzchołków nie zmieniły się

w przypadku wag ujemnych potrzebujemy dodatkowego zabezpieczenia algorytmu przed zapętleniem się p. 3

p. 3 w przypadku wag ujemnych potrzebujemy dodatkowego zabezpieczenia algorytmu przed zapętleniem się jeżeli w grafie istnieje cykl, którego suma wag jest ujemna ( ujemny cykl), to przechodzac ten cykl w kółko będziemy stale zmniejszać wagę ścieżki

p. 3 w przypadku wag ujemnych potrzebujemy dodatkowego zabezpieczenia algorytmu przed zapętleniem się jeżeli w grafie istnieje cykl, którego suma wag jest ujemna ( ujemny cykl), to przechodzac ten cykl w kółko będziemy stale zmniejszać wagę ścieżki dla grafu z ujemnym cyklem problem znajdowania długości najkrótszych ścieżek jest źle postawiony!

p. 3 w przypadku wag ujemnych potrzebujemy dodatkowego zabezpieczenia algorytmu przed zapętleniem się jeżeli w grafie istnieje cykl, którego suma wag jest ujemna ( ujemny cykl), to przechodzac ten cykl w kółko będziemy stale zmniejszać wagę ścieżki dla grafu z ujemnym cyklem problem znajdowania długości najkrótszych ścieżek jest źle postawiony! zauważmy, że zbadanie czy dla danego grafu problem jest dobrze czy źle postawiony, czyli sprawdzanie długości wszystkich cykli w grafie jest bardziej skomplikowane niż szukanie najkrótszych ścieżek!

powyższy problem daje się jednak rozwiazać w bardzo prosty sposób! p. 3

p. 3 powyższy problem daje się jednak rozwiazać w bardzo prosty sposób! zauważmy, że jeżeli graf o n wierzchołkach nie zawiera ujemnych cykli, to najkrótsza ścieżka przechodzi przez każdy wierzchołek co najwyżej raz, czyli zawiera co najwyżej n 1 krawędzi i zwiazku z tym w algorytmie wystarczy wykonać co najwyżej n 1 kroków

p. 3 powyższy problem daje się jednak rozwiazać w bardzo prosty sposób! zauważmy, że jeżeli graf o n wierzchołkach nie zawiera ujemnych cykli, to najkrótsza ścieżka przechodzi przez każdy wierzchołek co najwyżej raz, czyli zawiera co najwyżej n 1 krawędzi i zwiazku z tym w algorytmie wystarczy wykonać co najwyżej n 1 kroków jeżeli po wykonaniu n 1 kroków mamy w grafie wierzchołki ze zmieniajacymi się cechami to oznacza, że w grafie sa ujemne cykle!

p. 3 Opis algorytmu Bellmana-Forda znajdujacego najkrótsze ścieżki z ustalonego wierzchołka s do wszystkich pozostałych wierzchołków (dowolne wagi krawędzi). Oznaczenia: l k (v) etykieta wierzchołka v w k-tej iteracji, p k (v) poprzednik wierzchołka v w k-tej iteracji, Γ(v) zbiór następników wierzchołka v, Γ 1 (v) zbiór poprzedników wierzchołka v.

p. 3 Algorytm Bellmana-Forda 1. k 1, S Γ(s), l 1 (v) 0, v = s, w(s,v), v Γ(s),, v / Γ(s) {s}, p 1 (u) 0, v = s, s, v Γ(s),, v / Γ(s) {s}.

p. 3 2. Dla każdego następnika v wierzchołków z S, czyli v Γ(S): l k+1 (v) min{l k (v), min u T v {l k (u) + w(u,v)}, gdzie T v = Γ 1 (v) S. Dla każdego wierzchołka v Γ(S), dla którego l k+1 (v) = l k (u) + w(u,v): p k+1 (v) u, a dla pozostałych v p k+1 (v) p k (v). Dla v Γ(S): l k+1 (v) := l k (v) oraz p k+1 (v) := p k (v). Zauważmy, że zbiór S zawiera wszystkie wierzchołki, do których aktualnie najkrótsze ścieżki z s składaja się z k łuków. Zbiór T v składa się z wierzchołków, do których najkrótsze ścieżki z s składaja się z k łuków i których następnikiem jest v.

p. 3 3.(a) Jeżeli k n 1 oraz l k+1 (v) = l k (v) dla każdego v, to STOP znaleźliśmy wszystkie szukane odległości. (b) Jeżeli k < n 1 oraz l k+1 (v) l k (v) dla pewnego wierzchołka v, to przejdź do kroku 4. (c) Jeżeli k = n 1 oraz l k+1 (v) l k (v) dla pewnego wierzchołka v, to STOP graf ma cykle o ujemnych sumach wag. 4. S { v;l k+1 (v) l k (v) }, k k + 1 i przejdź do kroku 2. Zbiór S zawiera wierzchołki, do których najkrótsze ścieżki z s maja k + 1 łuków.

p. 3 zauważmy, że nie trzeba pamiętać wszystkich wektorów l k w każdej iteracji potrzebne sa tylko aktualnie tworzone (z indeksem k + 1) oraz te z poprzedniej iteracji (z indeksem k) dlatego w zamieszczonym poniżej pseudokodzie algorytmu BELLMAN-FORD używamy wektora CechaStara, dla oznaczenia wartości z poprzedniej iteracji i Cecha dla wartości z aktualnej iteracji (dla wektora p wystarczy tylko jeden wektor - P oprzednik)

p. 4 D EF B C?@A J K H I H I G L MNN P QR O S TUV G = (V, E, W), s W X v V CechaStara[v] ; P oprzednik[v] 0 CechaStara[s] 0; S {s}; k 0; Y BCZ ] B F [ \ E [ Z ^ Z C k k + 1; Cecha CechaStara u S v Γ(u) Cecha[v] { > CechaStara[u] + W[v, u] Cecha[v] CechaStara[u] + W[v, u] Y BCZ F [ \ ] B Y BCZ D Y ] B F [ \ F Z_ E Poprzednik[v] u S {v V : Cecha[v] CechaStara[v]} CechaStara Cecha S = k = ν 1 S a( (Cecha) ED@ _ ` D Y F Z_ E E`C_ Z C E E^` ` B hi cd d g e b cd f lmn j k hi q o ps ri q pi o ) u d t g

p. 4 ponieważ pętla repeat wykonywana jest co najwyżej n 1 razy, a zakres pętli ma złożoność O(n 2 ), więc algorytm Bellmana-Forda ma złożoność obliczeniowa O(n 3 ) Przykład. Wyznaczyć długości najkrótszych ścieżek między wierzchołkiem a a pozostałymi wierzchołkami grafu o następujacej macierzy wag: W = a b c d e f g h a 0 1 2 b 1 0 4 1 c 4 0 4 3 3 d 4 0 3 4 7 e 2 2 0 3. f 2 3 0 5 g 4 5 0 6 h 7 6 0

p. 4 e 3 f g h 5 6 2 2 1 1 2 3 3 4 7 0, 1 4 4 a b c d

p. 4 e 2,a 3 f g h 5 6 2 2 1 1 2 3 3 4 7 0, 1,a 1 4 4 a b c d

p. 4 e 2,a 3 f g h 5 6 2 2 1 1 2 3 3 4 7 0, 1,a 1 4 4 a b c d

p. 4 e 2,a 3 f g h 2,b 5 6 2 2 1 1 2 3 3 4 7 0, 1,a 5,b 1 4 4 a b c d

p. 4 e 2,a 3 f g h 2,b 5 8,c 6 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 5,b 4 9,c a b c d

p. 4 e 2,a 3 f g h 2,b 5 7,f 6 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 0,f 4 9,c a b c d

p. 4 e 2,a 3 f g h 2,b 5 7,f 6 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 0,f 4 9,c a b c d

p. 4 e f g h 3 1,c 2,b 5 3,c 6 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 0,f 4 4,c a b c d

p. 5 e f g h 3 1,c 2,b 5 3,c 6 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 0,f 4 4,c a b c d

p. 5 e f g h 3 1,c 2,b 5 3,c 6 9,g 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 0,f 4 4,c a b c d

p. 5 e f g h 3 1,c 2,b 5 3,c 6 9,g 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 0,f 4 4,c a b c d

p. 5 e f g h 3 1,c 2,b 5 3,c 6 9,g 2 2 1 1 2 3 3 4 7 0, 1 1,a 4 0,f 4 4,c a b c d

p. 5 znalezienie najkrótszych ścieżek między wszystkimi ( n) 2 parami wierzchołków w grafie G = (V,E) z nieujemnymi wagami, sprowadza się do n-krotnego zastosowania zmodyfikowanego algorytmu Dijkstry, znajdujacego dla każdego wierzchołka grafu osobno najkrótsze ścieżki do wszystkich pozostałych wierzchołków

p. 5 znalezienie najkrótszych ścieżek między wszystkimi ( n) 2 parami wierzchołków w grafie G = (V,E) z nieujemnymi wagami, sprowadza się do n-krotnego zastosowania zmodyfikowanego algorytmu Dijkstry, znajdujacego dla każdego wierzchołka grafu osobno najkrótsze ścieżki do wszystkich pozostałych wierzchołków ponieważ złożoność algorytmu Dijkstry wynosi O(n 2 ), zatem dla grafu z nieujemnymi wagami złożoność takiej procedury jest rzędu O(n 3 )

p. 5 znalezienie najkrótszych ścieżek między wszystkimi ( n) 2 parami wierzchołków w grafie G = (V,E) z nieujemnymi wagami, sprowadza się do n-krotnego zastosowania zmodyfikowanego algorytmu Dijkstry, znajdujacego dla każdego wierzchołka grafu osobno najkrótsze ścieżki do wszystkich pozostałych wierzchołków ponieważ złożoność algorytmu Dijkstry wynosi O(n 2 ), zatem dla grafu z nieujemnymi wagami złożoność takiej procedury jest rzędu O(n 3 ) w przypadku gdy w grafie występuja ujemne wagi n-krotne zastosowanie algorytmu Bellmana-Forda daje złożoność rzędu O(n 4 )

p. 5 znalezienie najkrótszych ścieżek między wszystkimi ( n) 2 parami wierzchołków w grafie G = (V,E) z nieujemnymi wagami, sprowadza się do n-krotnego zastosowania zmodyfikowanego algorytmu Dijkstry, znajdujacego dla każdego wierzchołka grafu osobno najkrótsze ścieżki do wszystkich pozostałych wierzchołków ponieważ złożoność algorytmu Dijkstry wynosi O(n 2 ), zatem dla grafu z nieujemnymi wagami złożoność takiej procedury jest rzędu O(n 3 ) w przypadku gdy w grafie występuja ujemne wagi n-krotne zastosowanie algorytmu Bellmana-Forda daje złożoność rzędu O(n 4 ) algorytm Floyda o złożoności obliczeniowej O(n 3 )

p. 5 Algorytm Floyda Rozpoczynajac z macierza wag W = (w ij ) wymiaru n n, która reprezentuje długości bezpośrednich połaczeń między wierzchołkami V = {1, 2,...,n} w grafie, konstruowany jest ciag macierzy W (1),W (2),...,W (n). Element w (k) ij macierzy W (k) jest długościa najkrótszej ścieżki spośród wszystkich ścieżek z wierzchołka i do wierzchołka j, których wierzchołki pośrednie należa do zbioru {1, 2,...,k}

p. 5 macierz W (k) tworzymy z macierzy W (k 1) przy czym: w (0) ij = w ij, w (k) ij = min{w (k 1) ij,w (k 1) ik + w (k 1) kj } dla k = 1, 2,...,n. Zauważmy, że powyższy algorytm wyznacza długości najkrótszych ścieżek między każda para wierzchołków i, j a nie same drogi. Aby je wyznaczyć posłużymy się dodatkowo budowana macierza P = (p ij ) wymiaru n n.

p. 5 Element p ij jest macierzy P przedostatnim wierzchołkiem na najkrótszej drodze z i do j. Jeśli ta droga ma, na przykład, postać (i,v 1,v 2,...,v q,j), to kolejne wierzchołki możemy otrzymać z macierzy P : i = p iv1,..., v q 2 = p ivq 1, v q 1 = p ivq, v q = p ij, j. Macierz P tworzymy w następujacy sposób: na poczatku ustalamy, że jeżeli w ij =, to p ij jest równe 0, w przeciwnym przypadku p ij jest równe i. W k-tej iteracji, jeśli wierzchołek k został właczony do ściezki z i do j (tzn. w ij > w ik + w kj ) za p ij przyjmujemy p kj (zmienia się poprzednik wierzchołka j).

w PStare[v, w] v p. 5 ˆ G = (V, E, W) ƒ { }~ y z vwx CechaStara W v V w V v = w W[v, w] = } Œ Š yz } Œ Š yz Ž y { Š Ž y } PStare[v, w] 0 V Cecha CechaStara; P PStare v V w V CechaStara[v, { w] > CechStara[v, k] + CechaStara[k, w] Cecha[v, w] CechStara[v, k] + CechaStara[k, w] y Š yz k = 1 } Œ Š yz } Œ Š yz Ž y { Š Ž y P[v, w] PStare[k, w] v V Cech[v, { v] < 0 ( stop } Ž y } Œ Š yz { Š Ž y ) š š š žÿ œ š y } z (Cecha, P) z

p. 5 Przykład. Znaleźć najkrótsza drogę między każda para wierzchołków w grafie przedstawionym na poniższym rysunku: v 5 1 10 1 1 1 1 v 4 1 8 4 2 v 2 1 v 1 2 v 3

p. 6 Macierz wag tego grafu oraz poczatkowa macierz ścieżek P maja postać: 0 2 1 0 1 0 0 1 2 0 1 4 8 2 0 2 2 2 W (0) = 1 0 2 i P (0) = 0 3 0 3 0 4 2 0 10 0 4 4 0 4 1 8 10 0 5 5 0 5 0.

p. 6 Ponieważ w macierzy W (1) zmienił się element w 25 (bo w (0) 25 > w(0) 21 + w(0) 15, czyli 8 > 2 + 1) oraz element w 52, dlatego też w macierzy P (1) zamieniamy dwa elementy: p 25 p 15 oraz p 52 p 12 : 0 2 1 0 1 0 0 1 2 0 1 4 3 2 0 2 2 1 W (1) = 1 0 2 i P (1) = 0 3 0 3 0. 4 2 0 10 0 4 4 0 4 1 3 10 0 5 1 0 5 0

p. 6 Tworzymy macierz W (2). Zmieniły się elementy w 13, w 14, w 31, w 35, w 41, w 53, w 54, zatem macierze W (2) i P (2) wygladaj a następujaco: 0 2 3 6 1 0 1 2 2 1 2 0 1 4 3 2 0 2 2 1 W (2) = 3 1 0 2 4 i P (2) = 2 3 0 3 1. 6 4 2 0 7 2 4 4 0 1 1 3 4 7 0 5 1 2 2 0

p. 6 Budujemy macierz W (3) i P (3) : 0 2 3 5 1 2 0 1 3 3 W (3) = 3 1 0 2 4 i P (3) = 5 3 2 0 6 1 3 4 6 0 0 1 2 3 1 2 0 2 3 1 2 3 0 3 1 2 3 4 0 1 5 1 2 3 0.

p. 6 Zauważmy, że W (3) = W (4) = W (5), zatem P (3) = P (4) = P (5). Utworzyliśmy więc potrzebny ciag macierzy W oraz P co kończy algorytm.

p. 6 Zauważmy, że W (3) = W (4) = W (5), zatem P (3) = P (4) = P (5). Utworzyliśmy więc potrzebny ciag macierzy W oraz P co kończy algorytm. Z macierzy tych możemy dla każdej pary wierzchołków odczytać najkrótsza ścieżkę łacz ac a te wierzchołki (nie koniecznie jedyna). Przykładowo, najkrótsza droga z wierzchołka v 4 do v 5 ma długość 6 i jest postaci p 43 p 42 p 41 p 45 v 5, czyli jest to ścieżka v 5 v 3 v 2 v 1 v 5. Konstruujemy ja od końca, ponieważ wiemy, że jej przedostatnim wierzchołkiem jest p 45 czyli v 1.

p. 6 Zauważmy, że W (3) = W (4) = W (5), zatem P (3) = P (4) = P (5). Utworzyliśmy więc potrzebny ciag macierzy W oraz P co kończy algorytm. Z macierzy tych możemy dla każdej pary wierzchołków odczytać najkrótsza ścieżkę łacz ac a te wierzchołki (nie koniecznie jedyna). Przykładowo, najkrótsza droga z wierzchołka v 4 do v 5 ma długość 6 i jest postaci p 43 p 42 p 41 p 45 v 5, czyli jest to ścieżka v 5 v 3 v 2 v 1 v 5. Konstruujemy ja od końca, ponieważ wiemy, że jej przedostatnim wierzchołkiem jest p 45 czyli v 1. Algorytm ten jak już wyżej wspomniano potrzebuje O(n 3 ) operacji (bez względu na gęstość rozpatrywanego grafu).

p. 6 Podsumowanie Wybór algorytmu spośród algorytmów Dijkstry, Bellmana-Forda i Floyda zależy oczywiście od rodzaju problemu, który mamy rozwiazać.

p. 6 Podsumowanie Wybór algorytmu spośród algorytmów Dijkstry, Bellmana-Forda i Floyda zależy oczywiście od rodzaju problemu, który mamy rozwiazać. Algorytm Dijkstry jest bardzo efektywny, może być stosowany do znajdowania najkrótszych dróg między każda para wierzchołków, o ile graf nie zawiera krawędzi z ujemnymi wagami.

p. 6 Podsumowanie Wybór algorytmu spośród algorytmów Dijkstry, Bellmana-Forda i Floyda zależy oczywiście od rodzaju problemu, który mamy rozwiazać. Algorytm Dijkstry jest bardzo efektywny, może być stosowany do znajdowania najkrótszych dróg między każda para wierzchołków, o ile graf nie zawiera krawędzi z ujemnymi wagami. Algorytm Floyda stosujemy, gdy chcemy znaleźć najkrótsze drogi między każda para wierzchołków, a w grafie znajduja się krawędzie o ujemnych wagach.

Podsumowanie Wybór algorytmu spośród algorytmów Dijkstry, Bellmana-Forda i Floyda zależy oczywiście od rodzaju problemu, który mamy rozwiazać. Algorytm Dijkstry jest bardzo efektywny, może być stosowany do znajdowania najkrótszych dróg między każda para wierzchołków, o ile graf nie zawiera krawędzi z ujemnymi wagami. Algorytm Floyda stosujemy, gdy chcemy znaleźć najkrótsze drogi między każda para wierzchołków, a w grafie znajduja się krawędzie o ujemnych wagach. Algorytm Bellmana-Forda stosujemy gdy w grafie sa ujemne wagi a jeden z wierzchołków jest zawsze poczatkiem ścieżki (źródłem, baza). p. 6