Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

DOMINOWANIE W GRAFACH Magdalena Lemańska.
Grafy spełniające nierówność Γ(G) < IR(G)
Zadania przygotowawcze na egzamin
ALGORYTMY GRAFOWE.
Grażyna Mirkowska PJWSTK 15 listopad 2000
Grafy inaczej, czyli inne modele grafów
WYKŁAD 6. Kolorowanie krawędzi
ELEMENTY TEORII GRAFÓW
Minimalne drzewa rozpinające
Algorytm Dijkstry (przykład)
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Ciągi de Bruijna generowanie, własności
-skeletony w przestrzeniach R 2 i R 3 Mirosław Kowaluk Wydział Matematyki, Informatyki i Mechaniki Uniwersytet Warszawski.
ZŁOŻONOŚĆ OBLICZENIOWA
WYKŁAD 5. Skojarzenia – ciąg dalszy
WYKŁAD 2. Kolorowanie wierzchołków
WYKŁAD 7. Spójność i rozpięte drzewa
WYKŁAD 4. Skojarzenia Skojarzenie w grafie G to niezależny zbiór krawędzi (rozłączne, bez wspólnych konców). Skojarzenie M w G traktujemy jak podgraf.
WYKŁAD 8. Siła spójności Wierzchołek v nazywamy wierzchołkiem cięcia grafu G, gdy podgraf G-v ma więcej składowych spójności niż G. Krawędź e nazywamy.
WĘDRÓWKI PO GRAFACH Obchody Eulera Cykle Hamiltona.
WYKŁAD 8. Siła spójności A,B – dowolne podzbiory V(G)
WYKŁAD 3. Kliki i zbiory niezależne
GRAFY PLANARNE To grafy, które można narysować na płaszczyźnie tak, by krawędzie nie przecinały się (poza swoimi końcami). Na przykład K_4, ale nie K_5.
WYKŁAD 4. Skojarzenia Skojarzenie w grafie G to niezależny zbiór krawędzi (rozłączne, bez wspólnych konców). Skojarzenie M w G traktujemy jak podgraf G.
Dariusz Odejewski Krzysztof Wójcik
Teoretyczne podstawy informatyki
Wykład 10 Prowadzący: dr Paweł Drozda
Materiały pomocnicze do wykładu
Materiały pomocnicze do wykładu
Klasyfikacja Obcinanie drzewa Naiwny klasyfikator Bayes’a kNN
Macierz incydencji Macierzą incydencji grafu skierowanego D = (V, A), gdzie V = {1, ..., n} oraz A = {a1, ..., am}, nazywamy macierz I(D) = [aij]i=1,...,n,
Algorytmy grafowe Reprezentacja w pamięci
WYKŁAD 7. Spójność i rozpięte drzewa Graf jest spójny, gdy dla każdego podziału V na dwa rozłączne podzbiory A i B istnieje krawędź z A do B. Definicja.
Minimalne drzewa rozpinające
Przepływy w sieciach. Twierdzenie minimaksowe.
SKIEROWANE Marek Bil Krzysztof Fitrzyk Krzysztof Godek.
Geometria obliczeniowa Wykład 8
Graf - jest to zbiór wierzchołków, który na rysunku przedstawiamy za pomocą kropek oraz krawędzi łączących wierzchołki. Czasami dopuszcza się krawędzie.
Algorytmy i struktury danych
Reprezentacja grafów i operacje na grafach na przykładzie algorytmu Dijkstry i algorytmu na odnajdywanie Silnych Spójnych Składowych Temat Opracowali:
Rodzaje, przechodzenie grafu
ALGORYTMY ROZWIĄZYWANIA GIER C.D.
Algorytm Dijkstry 1 Zbiory: T - zbiór wierzchołków
Algorytmy i Struktury Danych
Geometria obliczeniowa Wykład 13 Planowanie ruchu 1.Znajdywanie ścieżki między dwoma punktami. 2.Ruch postępowy robota wielokątnego na płasz- czyźnie.
Geometria obrazu Wykład 6
PLANARNOŚĆ i KOLOROWANIE MAP. Problem Jaka jest minimalna liczba kolorów, za pomocą których można pokolorować obszary województw na mapie Polski tak,
Algorytmy i Struktury Danych Grafy
Drogi i cykle Eulera w grafach nieskierowanych
WĘDRÓWKI PO GRAFACH Obchody Eulera Cykle Hamiltona.
Algorytmy grafowe Minimalne drzewa rozpinające
Algorytmy równoległe Algorytm równoległy pozwala na wykonywanie w danej chwili więcej niż jednej operacji. EREW - wyłączny odczyt i wyłączny zapis; CREW.
Przeszukiwanie wszerz
GRA CHOMP. Czym jest chomp? Jest to gra dla dwóch osób, rozgrywana na prostokątnej tablicy, zwanej „tabliczką czekolady”
NP-zupełność Problemy: rozwiązywalne w czasie wielomianowym - O(nk)
WYKŁAD 5. Skojarzenia – ciąg dalszy Skojarzenie w grafie G to niezależny zbiór krawędzi (rozłączne, bez wspólnych końców). α’(G) – moc największego skojarzenia.
Autor: Michał Salewski
Grafy.
Zarządzanie projektami
Modelowanie matematyczne – złożoność obliczeniowa, teoria a praktyka
ALGORYTMY I STRUKTURY DANYCH
Pojęcia podstawowe c.d. Rachunek podziałów Elementy teorii grafów
Algorytmy i struktury danych
Obwody elektryczne wykład z 14.12
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

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

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=<v0, v1, …, vk> nazywamy sumę wag tworzących ją krawędzi: Natomiast wagę najkrótszej ścieżki z wierzchołka u do wierzchołka v definiujemy jako:    

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.

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)=-∞.

Krawędzie z ujemnymi wagami

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.

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}}

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: V’ jest zbiorem wierzchołków w grafie G osiągalnych z s. G’ jest drzewem z korzeniem; s jest korzeniem drzewa. 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.

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 v1 do wierzchołka vk będzie p=<v1,v2, …, vk> oraz dla każdych i,j takich, że 1ijk, niech pij=<vi, vi+1, …,vj> będzie podścieżką p z wierzchołka vi do wierzchołka vj. Wtedy pij jest najkrótszą ścieżką z vi do vj.

Optymalna podstruktura najkrótszej ścieżki  

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).

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

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.

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

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.

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).

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.

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) 1 INITIALIZE-SINGLE-SOURCE(G,s) 2 for i=1 to |G.V|-1 3 for każda krawędź (u,v)G.E 4 RELAX(u,v,w) 5 for każda krawędź (u,v)G.E 6 if v.d>u.d+w(u,v) 7 return FALSE 8 return TRUE

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<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. Wówczas dla każdego wierzchołka vV istnieje ścieżka ze źródła s do v wtedy i tylko wtedy, gdy po zakończeniu wykonywania procedury BELLMAN-FORD dla grafu G zachodzi zależność v.d<∞.

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.

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.

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}

s - 1 koniec - 6 wierzch. Nr j    d 1 2 ∞ 3 4 8 5 - 6

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.

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.

 

Macierz poprzedników oznaczmy jako =(ij) 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}}.

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

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

Struktura najkrótszej ścieżki Wewnętrznym wierzchołkiem ścieżki prostej p=<v1,v2,…,vl> jest każdy wierzchołek ze ścieżki p różny od v1 i vl, tzn. każdy wierzchołek ze zbioru {v2,v3,…,vl-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}.

 

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

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)=(dij(k)) będzie nową macierzą nxn for (int i=1; i<=n; i++) for(int j=1;j<=n;j++) dij(k)=min(dij(k-1), dik(k-1)+ dkj(k-1)) return D(n)

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.

 

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

 

Algorytm Johnsona Algorytm Johnsona znajdowania najkrótszych ścieżek między wszystkimi parami wierzchołków działa w czasie O(V2lg 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.

 

 

Otrzymywanie nieujemnych wag  

Algorytm Johnsona  

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