tisk
Transkript
Problém nejkratší cesty orientovaný graf G=(V,E) ohodnocení hran c: E→ R P orientovaná cesta, P = v0 ,v1 ,…,vk Problém nejkratší cesty k c( P ) = ∑ c(vi −1 , vi ) i =1 δ(u,v)=min{c(P) | P je cesta z u do v} nejkratší cesta z u do v = taková cesta P z u do v, pro niž c(P) = δ(u,v). δ(u,v) = ∞ značí, že cesta z u do v neexistuje ∞ + r = ∞, ∞ > r pro každé r ∈ R UIN009 Efektivní algoritmy 1 Problémy UIN009 Efektivní algoritmy 2 Dijkstrův algoritmus Najít nejkratší cestu z E.W.Dijkstra(1959) Vstup: orientovaný graf G=(V,E) nezáporné ohodnocení hran c: E→R 0+ s ∈V Výstup: d(v), π(v) pro každý vrchol v∈V d(v)= δ(s,v) π(v)= předchůdce vrcholu v na nejkratší cestě z s do v c u do v, u,v∈V pevné d u do x, pro každé x ∈V, u ∈V pevné e x do y, pro každé x , y∈V Init(G,s) for all v∈V(G) do d(v) := ∞ ; π(v) := NIL od d(s) := 0 . UvolněníHrany(u,v) if d(v) > d(u) + c(u,v) then d(v) := d(u) + c(u,v); π(v) := u fi UIN009 Efektivní algoritmy 3 Dijkstra(G,s) UIN009 Efektivní algoritmy 4 Časová složitost Dijkstrova algoritmu |V| = n, |E| = m Init(G,s); D := ∅ ; Ν := V while N ≠ ∅ do u := OdeberMin(N) D := D ∪ {u} for all v∈Sousedé[u], v∈Ν do UvolněníHrany(u,v) od od. UIN009 Efektivní algoritmy operace OdeberMin SníženíKlíče počet n m T(Dijkstra) = n ⋅ T(OdeberMin) + m ⋅ T(SníženíKlíče) D pole binární halda Fibonacciho halda 5 T(OdeberMin) T(SníženíKlíče) T(Dijkstra) O(n) O(1) O(n2) O(log n) O(log n) O(m log n) O(log n) amortizovaná O(1) amortizovaná UIN009 Efektivní algoritmy O(n log n + m) 6 1 Lemmata Bellman - Fordův algoritmus Buď G graf bez záporných cyklů dosažitelných z s. Lemma 1. Je-li v1,...,vk nejkratší cesta z v1 do vk , pak vi,...,vj je též nejkratší cesta z vi do vj pro každé 1 ≤ i < j ≤ k. Lemma 2(Ì nerovnost). δ(s,v) ≤ δ(s,u) + c(u,v) pro každou hranu (u,v). Dále předpokládejme, že po provedení Init(G,s) je ohodnocení vrcholů měněno jen prostřednictvím UvolněníHrany. Lemma 3(horní mez). d(v) ≥ δ(s,v) pro každý vrchol v, a po dosažení hodnoty δ(s,v) se d(v) už nemění. Lemma 4(uvolnění cesty). Je-li v0,..., vk nejkratší cesta z s = v0 do vn , pak po uvolnění hran v pořadí (v0,v1), (v1,v2),..., (vk-1,vk) je d(v) = δ(s, vk). UIN009 Efektivní algoritmy R.Bellman(1958), L.R.Ford(1962) Vstup: orientovaný graf G=(V,E) c: E→ R s ∈V Výstup: NE pokud G obsahuje záporný cyklus dosažitelný z s ANO,d(v),π(v) pro každé v ∈V jinak 7 UIN009 Efektivní algoritmy 8 Další algoritmy pro problém d Bellman-Ford(G,s) Init(G,s) for i:= 1 to |V|-1 do for all (u,v) ∈ E do UvolněníHrany(u,v) od od for all (u,v) ∈ E do if d[v]>d[u]+c(u,v) then return „NE“ od return „ANO“. nezáporné ohodnocení hran – – – – buď c maximální cena hrany O(m + n √log c) (Ahuja, Mehlhorn, Orlin, Tarjan, 1990) O(m + n min{(log n)1/3+ε,(log c)1/4+ε}) (Raman, 1997) O(m ·log log n) (Thorup, 2000) ohodnocení přirozenými čísly – O(m + n) (Thorup, 1999) záporné ohodnocení hran – O(log c’ ·m ·√ n) (Goldberg, 1995) kde c’ je maximální absolutní hodnota ceny hrany UIN009 Efektivní algoritmy 9 Floyd-Warshallův algoritmus UIN009 Efektivní algoritmy 10 Floyd-Warshall(D,Π) Řeší problém e: Nalézt δ(u,v) pro každé u,v∈V(G) R.W.Floyd, S.Warshall (1962) Idea: i j {1,2,…,k} Vstup: orientovaný graf G=(V,E) + nezáporné ohodnocení hran c: E→ R 0 Výstup: Matice D, Π, kde D[i,j]= δ(i,j) Π[i,j]=předchůdce vrcholu j na nejkratší cestě z i do j δk(i,j) = délka nejkratší cesty z i do j, jejíž všechny vnitřní vrcholy jsou v množině {1,2,…,k} δk(i,j) = c(i,j) pro k=0 min{δk-1(i,j), δk-1(i,k)+ δk-1(k,j)} pro k>0 UIN009 Efektivní algoritmy 11 UIN009 Efektivní algoritmy 12 2 Další algoritmy pro problém e Floyd-Warshall(D,Π) for i:=1 to n do for j:=1 to n do if i=j then D[i,j]:=0 else if (i,j)∉E then D[i,j]:=∞; else D[i,j]:=c(i,j) fi fi ∏[i,j]:= NIL od od for k:=1 to n do for i:=1 to n do for j:=1 to n do if D[i,k]+D[k,j]<D[i,j] then D[i,j]:=D[i,k]+D[k,j] ∏[i,j]:= ∏[k,j] fi od od od . Čas: O(n3) Prostor: O(n2) UIN009 Efektivní algoritmy O(n2 · logn + n · m) (Johnson, 1977) O(n3 · (log log n / log n)1/3), O(n2.5) porovnání cen hran (Fredman, 1976) O(nw ·p(n)) (Galil,Margalit, 1997, Seidel, 1995) – O(nw) je časová složitost násobení dvou čtvercových matic řádu n – p(n) je jistá funkce shora omezená polylogaritmickou funkcí v n O(e ·n3 ·p(e ·n)) (Shoshan, Zwick, 1999) – ceny hran ∈ {1,2,...,e} 13 UIN009 Efektivní algoritmy 14 3
Podobné dokumenty
tisk
Věta (“Gap Theorem“). Pro každou vyčíslitelnou funkci
ϕ(n)≥n existuje vyčíslitelná funkce f(n) taková, že
TIME(ϕ(f(n))) = TIME(f(n)).
Věta (o zrychlení). Pro každou vyčíslitelnou funkci ϕ(n)
existu...
Algoritmus pro hledání nejkratší cesty orientovaným grafem
+ platí, že
● A(i,j) = 0, pokud i = j
● A(i,j) = r, pokud vede hrana z i do j a její ohodnocení je rovno r
● A(i,j) = ∞, jinak
S takovou maticí bude muset umět funkce pracovat. Floydův-Warshallův a...
Grafové algoritmy
Úkolem této skupiny algoritmů je nalézt nejkratší orientovanou cestu:
• z daného vrcholu do daného vrcholu,
• z daného výchozího vrcholu do každého vrcholu grafu,
• z každého vrcholu do daného konc...
Erev Shel Shoshanim
1. Je večer růží, pojďme do zahrady, Myrha koření a kadidlo jsou jako koberec pod tvýma nohama
Noc pomalu padá, a větřík z růží vane , Dovol mi šeptat pro tebe tichounce, píseň lásky.
2. Za svítání...
Grafové algoritmy
páry vrcholů (all-pair shortest path algorithm)
• Vhodný pro husté grafy – v tom případě rychlejší
než Dijkstra opakovaný pro všechny vrcholy
• Pracuje s maticí sousednosti
• Složitost O(n3)
• Může...