Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem Najkrótsze ścieżki między wszystkimi parami wierzchołków.

Podobne prezentacje


Prezentacja na temat: "Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem Najkrótsze ścieżki między wszystkimi parami wierzchołków."— Zapis prezentacji:

1 Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem Najkrótsze ścieżki między wszystkimi parami wierzchołków

2 Wagi Niech będzie dany ważony graf skierowany G=(V,E) z funkcją wagową w:E R przyporządkowującą krawędziom wagi o wartościach rzeczywistych. Wagą ścieżki s= nazywamy sumę wag tworzących ją krawędzi: Natomiast wagę najkrótszej ścieżki z wierzchołka u do wierzchołka v definiujemy jako:

3 Warianty najkrótszych ścieżek Najkrótsze ścieżki z jednym źródłem Najkrótsze ścieżki z jednym wierzchołkiem docelowym Najkrótsza ścieżka między parą wierzchołków. Najkrótsze ścieżki miedzy wszystkimi parami wierzchołków.

4 Krawędzie z ujemnymi wagami Jeśli żaden cykl o ujemnej wadze nie jest osiągalny ze źródła s, to dla każdego wierzchołka v V waga najkrótszej ścieżki (s,v) jest dobrze zdefiniowana, nawet jeśli ma wartość ujemną. Jeżeli jednak cykl o ujemnej wadze jest osiągalny ze źródła s, to wagi najkrótszych ścieżek nie są dobrze zdefiniowane. Jeżeli pewna ścieżka z s do v zawiera cykl o ujemnej wadze, to definiujemy (s,v)=-.

5 KRAWĘDZIE Z UJEMNYMI WAGAMI

6 Reprezentacja najkrótszych ścieżek. Dla danego grafu G=(V,E) dla każdego wierzchołka v V poprzednik zapamiętujemy przez [v], gdzie jest to albo inny wierzchołek albo wartość NIL. Szukając najkrótszej ścieżki zaczynamy od wierzchołka v i czytając w porządku odwrotnym szukamy ciągu poprzedników aż dojdziemy do źródła s.

7 Reprezentacja najkrótszych ścieżek Zdefiniujemy zbiór wierzchołków V jako zbiór tych wierzchołków grafu G, których poprzedniki są różne od NIL plus wierzchołek s: V ={v V: [v] NIL} {s} Zbiorem krawędzi skierowanych E jest zbiór krawędzi indukowany przez wartości dla wierzchołków z V : E ={( [v], v) E:v V -{s}}

8 Reprezentacja najkrótszych ścieżek Niech graf G=(V,E) będzie ważonym grafem z funkcją wagową w:E R. Załóżmy, że graf G nie zawiera cykli o ujemnych wagach, które są osiągalne z wierzchołka źródłowego s V. Tak więc najkrótsze ścieżki są dobrze zdefiniowane. Drzewem najkrótszych ścieżek o korzeniu w s nazywamy podgraf skierowany G=(V,E), w którym V V, E E, taki, że: 1. V jest zbiorem wierzchołków w grafie G osiągalnych z s. 2. G jest drzewem z korzeniem; s jest korzeniem drzewa. 3. Dla każdego wierzchołka v V jedyna ścieżka z s do v w grafie G jest najkrótszą ścieżką z s do v w grafie G.

9

10 Optymalna podstruktura najkrótszej ścieżki Każda najkrótsza ścieżka między dwoma parami wierzchołków zawiera w sobie inne najkrótsze ścieżki. Lemat 6.1 (Podścieżki najkrótszych ścieżek są najkrótszymi ścieżkami) Niech będzie dany ważony graf skierowany G=(V,E) z funkcją wagową w:E R i niech najkrótsza ścieżka z wierzchołka v 1 do wierzchołka v k będzie p= oraz dla każdych i,j takich, że 1 i j k, niech p ij = będzie podścieżką p z wierzchołka v i do wierzchołka v j. Wtedy p ij jest najkrótszą ścieżką z v i do v j.

11 Optymalna podstruktura najkrótszej ścieżki

12 Optymalna podstruktura najkrótszej ścieżki Lemat 6.3 Niech G=(V,E) będzie ważonym grafem skierowanym z funkcją wagową w:E R i źródłem s. Wtedy dla każdej krawędzi (u,v) E zachodzi zależność (s,v) (s,u)+w(u,v).

13 Relaksacja Relaksacja polega na wielokrotnym zmniejszaniu górnego ograniczenia aż się dojdzie do rzeczywistej najkrótszej ścieżki.

14 Procedura nadająca wartości początkowe atrybutom i d. INITIALIZE-SINGLE-SOURCE(graf G, źródło s) For każdy wierzchołek v V[G] do d[v]= [v] =NIL d[s]=0 Po fazie inicjowania mamy [v]=NIL dla każdego v V, d[v]=0 dla v=s oraz d[v]=, dla v V-s.

15 Relaksacja krawędzi Relaksacja krawędzi (u,v) polega na sprawdzeniu, czy przechodząc przez wierzchołek u, można znaleźć krótszą od dotychczas najkrótszej ścieżki do v, i jeśli taka możliwość istnieje, na zaktualizowaniu d[v] oraz [v]. RELAX(u,v,w) if d[v]>d[u]+w(u,v) then d[v]=d[u]+w(u,v) [v]=u

16 Własności relaksacji Lemat 6.4 Niech G=(V,E) będzie ważonym grafem skierowanym z funkcją wagową w:E R i niech (u,v) E. Wtedy bezpośrednio po wykonaniu RELAX(u, v, w) zachodzi zależność d[v] d[u]+w(u,v). Lemat 6.5 Niech G=(V,E) będzie ważonym grafem skierowanym z funkcją wagową w:E R. Niech s V będzie wierzchołkiem źródłowym i załóżmy, że została wykonana procedura inicjująca INITIALIZE-SINGLE-SOURCE(G, s). Wtedy dla każdego wierzchołka v V zachodzi zależność d[v] (s,v) i warunek ten jest niezmiennikiem dowolnego ciągu relaksacji krawędzi grafu G. Ponadto kiedy tylko d[v] osiągnie swoje dolne ograniczenie (s,v), nigdy więcej nie ulega zmianie.

17 Własności relaksacji Wniosek 6.6 Załóżmy, że w ważonym grafie skierowanym G=(V,E) z funkcją wagową w:E R nie istnieje ścieżka ze źródła s V do danego wierzchołka v V. Wtedy po fazie inicjowania za pomocą procedury INITIALIZE-SINGLE-SOURCE(G,s) mamy d[v]= (s,v) i równość ta jest niezmiennikiem dowolnego ciągu relaksacji krawędzi grafu G. Lemat 6.7 Niech G=(V,E) będzie ważonym grafem skierowanym z funkcją wagową w:E R, niech s V będzie wierzchołkiem źródłowym i niech s u v będzie najkrótszą ścieżką w grafie G dla pewnych wierzchołków u,v V. Przypuśćmy, że została wykonana procedura inicjująca INITIALIZE-SINGLE-SOURCE(G,s), a następnie został wykonany ciąg kroków relaksacji zawierający wywołanie procedury RELAX(u,v,w). Jeśli w dowolnej chwili przed wywołaniem procedury RELAX (u,v,w) zachodzi d[u]= (s,u), to po wykonaniu tej procedury zawsze zachodzi d[v]= (s,v).

18 Drzewo najkrótszych ścieżek Lemat 6.8 Niech G=(V,E) będzie ważonym grafem skierowanym z funkcją wagową w:E R i wierzchołkiem źródłowym s V. Załóżmy, że graf G nie ma cykli o ujemnych wagach, które są osiągalne ze źródła s. Wtedy po fazie inicjowania za pomocą procedury INITIALIZE- SIGNLE-SOURCE(G,s) graf poprzedników G jest drzewem z korzeniem w s, a własność ta jest niezmiennikiem każdego ciągu kroków relaksacji wykonywanych na krawędziach grafu G. Lemat 6.9 Niech G=(V,E) będzie ważonym grafem skierowanym z funkcją wagową w:E R i wierzchołkiem źródłowym s V. Załóżmy, że graf G nie zawiera cykli o ujemnych wagach, które są osiągalne ze źródła s. Jeśli po wykonaniu procedury inicjującej INITIALIZE-SINGLE- SOURCE(G,s), a następnie po wykonaniu dowolnego ciągu kroków relaksacji na krawędziach grafu G zachodzi d[v]= (s,v) dla wszystkich v V, to podgraf poprzedników G jest drzewem najkrótszych ścieżek o korzeniu w s.

19 Algorytm Bellmana-Forda W algorytmie Bellmana-Forda wykorzystuje się metodę relaksacji, zmniejszając stopniowo oszacowanie v.d na wagę najkrótszej ścieżki ze źródła s do każdego wierzchołka v V, aż zostanie osiągnięta rzeczywista waga najkrótszej ścieżki (s,). Algorytm zwraca wartość logiczną TRUE wtedy i tylko wtedy, gdy graf nie zawiera cykli o ujemnych wagach osiągalnych ze źródła. BELLMAN-FORD(graf G, wagi w, źródło s) 1INITIALIZE-SINGLE-SOURCE(G,s) 2for i=1 to |G.V|-1 3for każda krawędź (u,v) G.E 4RELAX(u,v,w) 5for każda krawędź (u,v) G.E 6if v.d>u.d+w(u,v) 7return FALSE 8return TRUE

20

21 Lemat 6.10 Niech G=(V,E) będzie ważonym grafem skierowanym ze źródłem s i funkcją wagową w:E R. Załóżmy, że G nie ma cykli o ujemnych wagach osiągalnych ze źródła s. Wtedy po wykonaniu |V|-1 przebiegów pętli for w wierszach 2 – 4 procedury BELLMAN-FORD zachodzi równość v.d= (s,v) dla wszystkich wierzchołków v osiągalnych ze źródła s. Wniosek 6.11 Niech G=(V

22 Twierdzenie 6.12 na poprawność algorytmu Bellmana-Forda Niech G=(V,E) będzie ważonym grafem skierowanym ze źródłem s i funkcją wagową w:E R. Załóżmy, że dla grafu G została wykonana procedura BELLMAN-FORD. Jeśli graf G nie ma cykli o ujemnych wagach osiągalnych ze źródła s, to algorytm zwraca wartość TRUE, zachodzi v.d= (s,v) dla każdego wierzchołka v V i graf poprzedników G jest drzewem najkrótszych ścieżek o korzeniu w s. Jeśli natomiast graf G ma cykl o ujemnej wadze osiągalny z s, to algorytm zwraca wartość FALSE.

23 Algorytm Dijkstry Służy do szukania najkrótszej ścieżki w grafie ważonym i skierowanym G=(V,E) w przypadku gdy wagi wszystkich krawędzi są nieujemne czyli, że w(u,v) 0 dla każdej krawędzi (u,v) E. W algorytmie Dijkstry zapamiętujemy zbiór S składający się z wierzchołków dla których wagi najkrótszych ścieżek ze źródła s zostały już obliczone. W każdym kroku powtarzamy operacje: wybór wierzchołka u V-S o najmniejszym oszacowaniu wagi najkrótszej ścieżki, dodanie wierzchołka u do S i wykonanie relaksacji krawędzi wychodzących z wierzchołka u.

24 Algorytm Dijkstry-pseudokod Wykorzystano tu kolejkę priorytetową Q typu min, w której wierzchołki są zorganizowane według wartości d. DIJKSTRA( graf G, wagi w, źródło s) INITIALIZE-SINGLE-SOURCE(G,s) S= Q=G.V while Q u=EXTRACT-MIN(Q) S=S {u}

25 s - 1 koniec - 6 wierzch. Nr j d d d d d

26

27 Twierdzenie 6.13 (Poprawność algorytmu Dijkstry) Algorytm Dijkstry uruchomiony dla ważonego grafu skierowanego G=(V,E) z nieujemną funkcją wagową w i źródłem s kończy swoje działanie z u.d= (s,u) dla każdego wierzchołka u V. Wniosek 6.14 Jeśli wykonamy algorytm Dijkstry dla ważonego grafu skierowanego G=(V,E) z nieujemną funkcją wagową w i źródłem s, to po zakończeniu jego działania graf poprzedników G jest drzewem najkrótszych ścieżek z korzeniem w s.

28 Najkrótsze ścieżki między wszystkimi parami wierzchołków Mamy dany ważony graf skierowany G=(V,E) z funkcją wagową w:E R, która przypisuje krawędziom wagi o wartościach rzeczywistych. Dla każdej pary wierzchołków u,v V należy znaleźć najkrótszą (o najmniejszej wadze) ścieżkę z wierzchołka u do v, gdzie waga ścieżki jest sumą wag jej składowych krawędzi. Wynik będzie zapisany w macierzy, której element w u-tym wierszu i v-tej kolumnie powinien być wagą najkrótszej ścieżki z wierzchołka u do v. Problem można rozwiązać wykonując |V| razy algorytm dla problemu najkrótszych ścieżek z jednym źródłem dla każdego z wierzchołków. W zależności od tego czy dopuszczamy wagi ujemne czy też nie możemy wykorzystać odpowiednio algorytm Bellmana-Forda lub Dijkstry.

29

30 Macierz poprzedników oznaczmy jako =( ij ). Jeśli i=j lub nie istnieje ścieżka z i do j, to ij jest równe NIL. W przeciwnym razie ij jest poprzednikiem j na pewnej najkrótszej ścieżce z i do j. Tak jak graf G jest drzewem najkrótszych ścieżek dla pewnego wierzchołka źródłowego, tak podgraf indukowany przez i-ty wiersz macierzy jest drzewem najkrótszych ścieżek o korzeniu i. Dla każdego wierzchołka i V definiujemy podgraf poprzedników grafu G dla wierzchołka i jako graf G,i =(V,i,E,i ) w którym V,i ={j V: ij NIL} {i} oraz E,i ={( ij,, j):j V,i –{i}}.

31 Procedura wypisywania najkrótszej ścieżki PRINT-ALL-PAIRS-SHORTEST- PATH(,i,j) if i==j wypisz i elseif ij ==NIL wypisz brak ścieżki z i do j else PRINT-ALL-PAIRS- SHORTEST-PATH(, i, ij ) wypisz j

32 Algorytm Floyda-Warshalla Czas działania tego algorytmu wynosi (V 3 ). Dopuszczamy występowanie krawędzi o ujemnych wagach z tym,ze zakładamy, że w grafie nie ma cykli o wagach ujemnych.

33 Struktura najkrótszej ścieżki Wewnętrznym wierzchołkiem ścieżki prostej p= jest każdy wierzchołek ze ścieżki p różny od v 1 i v l, tzn. każdy wierzchołek ze zbioru {v 2,v 3,…,v l-1 }. Niech zbiorem wierzchołków grafu G będzie V={1,2,…,n}. Dla pewnego k rozważmy podzbiór {1,2,…,k}, a dla każdej pary wierzchołków i,j V rozważmy wszystkie ścieżki z wierzchołka i do wierzchołka j, których wewnętrzne wierzchołki należą do zbioru {1,2,…,k}. Niech p będzie taką ścieżką p a najkrótszymi ścieżkami z i do j, których wszystkie wewnętrzne wierzchołki należą do zbioru {1,2,…,k-1}.

34

35 Rekurencyjne rozwiązanie problemu najkrótszych ścieżek między wszystkimi parami wierzchołków

36 Obliczanie wag najkrótszych ścieżek metodą wstępującą Dane wejściowe procedury stanowi macierz W wymiaru nxn. W wyniku działania procedury powstaje macierz wag najkrótszych ścieżek D (n). FLOYD-WARSHALL(W) n=W.rows D (0) =W for (int k=1;k<=n;k++) niech D (k) =(d ij (k) ) będzie nową macierzą nxn for (int i=1; i<=n; i++) for(int j=1;j<=n;j++) d ij (k) =min(d ij (k-1), d ik (k-1) + d kj (k-1) ) return D (n)

37 Konstruowanie najkrótszej ścieżki Można znaleźć kilka metod konstruowania najkrótszych ścieżek w algorytmie Floyda-Warshall. Jedną z nich jest obliczenie macierzy poprzedników przy wykorzystaniu macierzy D. Wówczas wystarczy użyć procedury PRINT-ALL- PAIRS-SHORTEST-PATH do wypisania wierzchołków żądanej najkrótszej ścieżki. Macierz poprzedników można także obliczać na bieżąco, razem z obliczaniem macierzy D (k). Oznacza to obliczenie ciągu macierzy (0), (1), …, (n), gdzie = (n) i ij (k) jest poprzednikiem wierzchołka j na najkrótszej ścieżce z wierzchołka i, której wszystkie wewnętrzne wierzchołki należą do zbioru {1,2,…,k}. Poprzednik ij (k) można określić rekurencyjnie. Gdy k=0, najkrótsza ścieżka z wierzchołka i do wierzchołka j nie ma w ogóle wewnętrznych wierzchołków.

38

39 Przykład (Źródło: Cormen)

40

41 Algorytm Johnsona Algorytm Johnsona znajdowania najkrótszych ścieżek między wszystkimi parami wierzchołków działa w czasie O(V 2 lg V+VE). Algorytm Johnsona albo zwraca macierz wag najkrótszych ścieżek dla wszystkich wierzchołków, albo informuje, że graf wejściowy ma cykl o ujemnej wadze. W algorytmie Johnsona jako podprogramy są używane algorytm Dijkstry i algorytm Bellmana-Forda.

42

43

44 Otrzymywanie nieujemnych wag

45 Algorytm Johnsona

46 Bibliografia Cormen Thomas; Leiserson Charles; Rivest Ronald; Stein Clifford, Wprowadzenie do Algorytmów, Wydawnictwo Naukowe PWN, Warszawa 2012,


Pobierz ppt "Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem Najkrótsze ścieżki między wszystkimi parami wierzchołków."

Podobne prezentacje


Reklamy Google