• Nie Znaleziono Wyników

Szukanie najkrótszych dróg z

N/A
N/A
Protected

Academic year: 2021

Share "Szukanie najkrótszych dróg z "

Copied!
11
0
0

Pełen tekst

(1)

Szukanie najkrótszych dróg z

jednym ródłem

(2)

Algorytm Dijkstry

Zało enia:

• dany jest spójny graf prosty G z wagami na kraw dziach

• waga w(e) dla ka dej kraw dzi e jest nieujemna

• dany jest wyró niony wierzchołek s

Wyj cie: dla ka dego wierzchołka v algorytm znajduje d[v], długo najkrótszej drogi z wierzchołka s do v. Przez długo drogi rozumiemy sum wag kraw dzi nale cych do drogi.

Uwaga: Algorytm mo na łatwo zmodyfikowa tak, aby oprócz długo ci drogi wyznaczał kraw dzie do niej nale ce oraz tak, aby działał w przypadku grafów skierowanych.

(3)

Pseudokod

Procedure Dijkstra(G, s) begin

S := ∅; d[s] = 0; d[ v] = +∞ dla v ≠ s;

for i := 1 to n do begin

znajd v ∈ V\S, posiadaj cy minimaln etykiet d[ v];

S := S ∪ {v};

for ka dy s siad u ∈ V\S do begin

d[ u] := min{d[ u], d[ v] + w({u,v}) };

endend end

Uwaga S jest pomocniczym zbiorem wierzchołków (nazywany zbiorem pewno ci). O wierzchołku v nale cym do S wiadomo, e jego etykieta d[v]

jest równa długo ci najkrótszej drogi z s do v.

(4)

Przykład

Procedure Dijkstra(G, s) begin

S := ∅; d[s] = 0; d[ v] = +∞ dla v ≠ s;

for i := 1 to n do begin

znajd v ∈ V\S, o minimalnym d[ v];

S := S ∪ {v};

for ka dy s siad u ∈ V\S do begin

d[ u] := min{d[ u], d[ v] + w({u,v}) };

endend end

Szukamy długo ci najkrótszej drogi z s do t.

Elementy zbioru S oznaczamy kolorem czerwonym.

8 7

4

3 1

2

1 3

2

5 2

6 2

4 4

t 0

4 7 8

7

13

9

11 7

Odpowied : najkrótsza droga z s do t ma długo 16. 16

11

(5)

Uwagi o implementacji

• operacje „znajd v ∈ V\S, o minimalnym d[ v]; S := S ∪ {v};” s wykonywane O(n) razy

• operacja „ d[ u] := min{d[ u], d[ v] + w({u,v}) };” jest wykonywana O(m) razy

• do wydajnej implementacji wykorzystujemy kopiec binarny o tej własno ci, e klucz zapami tany w danym w le jest mniejszy od kluczy jego synów

• elementami kopca s wierzchołki V\S, a klucze to liczby d[v]

• w ogólnym przypadku czas budowy kopca to O(nlogn), lecz w algorytmie Dijkstry (wykorzystuj c fakt, e inicjalnie wszystkie klucze, z wyj tkiem d[s]

s identyczne) czas ten jest liniowy

• wyszukiwanie wierzchołka w zbiorze V\S o minimalnym kluczu, dzi ki własno ci kopca, mo e by wykonana w czasie stałym

• usuni cie elementu o minimalnym kluczu (czyli instrukcja „S := S ∪ {v};”) wymaga czasu O(log(|V\S|)) = O(logn)

• operacja „ d[ u] := min{d[ u], d[ v] + w({u,v}) };” wymaga czasu O(log(|V\S|))

• ostatecznie, czas działania algorytmu Dijkstry to O((n+m)logn)

(6)

Algorytm Bellmana-Forda

• Wej cie: obci ony spójny digraf G.

• Dozwolone ujemne wagi na kraw dziach.

• Algorytm stwierdza czy istnieje cykl o ujemnej sumie wag.

• Je li taki cykl istnieje, to algorytm zwraca informacj o bł dzie

• Je li powy szego cyklu nie ma, to algorytm znajduje długo ci najkrótszych dróg ze ródła s do wszystkich pozostałych

wierzchołków grafu

(7)

Szkic algorytmu

• algorytm szuka długo ci najkrótszych dróg z wyró nionego wierzchołka s do wszystkich pozostałych wierzchołków grafu

• długo znalezionej drogi z s do v jest zapami tana jako d[v]

• inicjalnie d[s] = 0 oraz d[v] = +∞ dla s v

• główna p tla algorytmu jest wykonywana n – 1 razy

• ka dy przebieg głównej p tli polega na wykonaniu relaksacji ka dej kraw dzi

• relaksacja kraw dzi (u,v) jest zmniejszeniem oszacowania d[v] je li warto dotychczas zapami tana jest wi ksza ni d[u] + w((u,v)), gdzie w((u,v)) to waga kraw dzi (u,v)

• po zako czeniu oblicze w głównej p tli algorytmu nast puje sprawdzenie czy w digrafie istnieje cykl o ujemnej sumie wag, co jest realizowane poprzez sprawdzenie czy mo na dokona relaksacji dowolnej kraw dzi

• je li relaksacja jest mo liwa, to graf zawiera cykl o ujemnej sumie wag, co oznacza, e najkrótszych dróg nie mo na obliczy

• je li relaksacja nie jest mo liwa, to zapami tane warto ci d[v] s szukanymi długo ciami najkrótszych dróg z s

(8)

procedure Bellman-Ford( G, w, s ) begin

d[s] = 0;

for each v ∈ V(G)\{s} do d[v] = +∝;

for i := 1 to n – 1 do

for each (u,v) ∈E(G) do

if d[u] + w((u,v)) < d[v] then d[v] := d[u] + w((u,v));

for each (u,v) ∈E(G) do

if d[u] + w((u,v)) < d[v] then return false;

return true;

end

Pseudokod

(9)

Przykład

8

6

3 –1

–2

–2 2

3 +∞

+∞

+∞

+∞

+∞

0 8

6

3 –1

–2

–2 2

3 +∞

+∞

+∞

8

6

0 8

6

3 –1

–2

–2 2

3 +∞

4 7 8

6 0

8

6

3 –1

–2

–2 2

3 6

4 7 8

5

0 8

6

3 –1

–2

–2 2

3 6

3 7 8

5

0 8

6

3 –1

–2

–2 2

3 5

3 7 8

5 0

Rys. 1: Sytuacja po inicjalizacji. Rys. 2: Sytuacja po

wykonaniu p tli dla i = 1 Rys. 3: Sytuacja po wykonaniu p tli dla i = 2

Rys. 4: Sytuacja po

wykonaniu p tli dla i = 3 Rys. 5: Sytuacja po

wykonaniu p tli dla i = 4 Rys. 6: Sytuacja po wykonaniu p tli dla i = 5

(10)

Poprawno

Tw Je li digraf G nie posiada ujemnych cykli osi galnych ze ródła s, to po zako czeniu algorytmu Bellmana-Forda d[v] jest równe długo ci

najkrótszej cie ki z s do v dla ka dego wierzchołka v osi galnego z s.

Dowód:

• niech s=v0,...,vk=v b dzie najkrótsz cie k z s do v

• mamy k < |V(G)|

• dowodzimy indukcyjnie, e d[vi] jest równe długo ci najkrótszej cie ki z s do vi po i-tym przebiegu „drugiej” p tli for

• je li i=0, to własno wynika z faktu, e w fazie inicjalizacji

algorytmu podstawiamy d[s]=0 i równo ta nie ulega zmianie podczas działania algorytmu

• niech i > 0. Po dokonaniu relaksacji kraw dzi (vi-1,vi) w i-tym

przebiegu p tli liczba d[vi] przyjmuje warto najkrótszej cie ki z s do vi.

(11)

Poprawno

Tw. Je li digraf G zawiera cykl o ujemnej wadze osi galny z s, to algorytm Bellmana-Forda zwraca warto false.

Dowód:

• niech v0,...,vk=v0 b dzie cyklem o ujemnej sumie wag, tzn.

• Gdyby algorytm zwrócił warto true, to dla ka dego wierzchołka cyklu mamy d[vi] ≤ d[vi-1] + w((vi-1,vi)).

• Sumuj c nierówno ci parami otrzymujemy

•Warto ci pierwszych dwóch sum w powy szym wyra eniu s sobie równe wi c

co prowadzi do sprzeczno ci.

= <

k i

i

i v

v w

1

1, )) 0 ((

=

=

=

+

k

i

i i

k i

i k

i

i d v w v v

v d

1

1 1

1 1

)) , ((

] [

] [

=

k i

i

i v

v w

1

1, )) 0 ((

Cytaty

Powiązane dokumenty

[r]

Układamy obrazki w rzędach obok siebie - wykorzystujemy 3 kartki w

Przydziel zadania dla zespołów/poszczególnych osób Opracuj sposoby komunikowania się uczestników projektu Określ, w jaki sposób i jak często będą się odbywały

Przydziel zadania dla zespołów/poszczególnych osób Opracuj sposoby komunikowania się uczestników projektu Określ, w jaki sposób i jak często będą się odbywały

Wymyśl dwa różne sposoby powitania mamy, która przyszła po Ciebie do szkoły. Dopisz właściwe rzeczowniki, w których wystąpi „ó”

20 Ekonomiścidobramaterialneuznająza„rywala”,gdyżsątoprodukty,którerazskonsu- mowaneniemogąbyćponowniewykorzystane.W świeciecyfrowymnatomiastdobrasąnieskoń-

Dodaj w formularzu do dodawania nowych tytułów (Dodaj_tytuly_w_aplikacji) komponenty obsługujące wyświetlanie liczby tytułów, tak aby jednocześnie podczas wywołania formularza

W stylizowanej literze M (rysunek poniżej) wpisz w kółeczka liczby naturalne od 1 do 9 tak, by sumy trzech liczb na każdym odcinku były równe.. Łącznie w kopercie jest