Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

TI 8.1 NEJKRATŠÍ CESTY MEZI VŠEMI UZLY Nejkratší cesty - kap. 7.

Podobné prezentace


Prezentace na téma: "TI 8.1 NEJKRATŠÍ CESTY MEZI VŠEMI UZLY Nejkratší cesty - kap. 7."— Transkript prezentace:

1 TI 8.1 NEJKRATŠÍ CESTY MEZI VŠEMI UZLY Nejkratší cesty - kap. 7

2 TI 8.2 Nejkratší cesty mezi všemi uzly Seznámíme se s následujícími pojmy: • matice w-délek, matice w-vzdáleností, matice předchůdců • Floydův-Warshallův algoritmus • Johnsonův algoritmus, přehodnocení hran Skripta kap. 7, str. 123 – 138 Nejkratší cesty – kap. 7

3 TI 8.3 Jak zjistíme nejkratší cesty mezi všemi páry uzlů ? Označme |U| = n Pro nezáporné ohodnocení hran lze uvažovat O(n 2. lg n + n. |H|) Fibonacci-ho halda n x Dijkstra... O(|H|. n. lg n) binární halda O(n 3 ) fronta jako sekvenční seznam A pro záporné ohodnocení hran n x Bellman-Ford... O(n 2. |H|) ~ O(n 4 ) !? ? Jde to lépe ? ANO ! Nejkratší cesty - kap. 7

4 TI 8.4 Graf G reprezentujeme maticí w-délek W (vychází z matice sousednosti V a zahrnuje současně délky hran w): 0 pro i = j w ij = w(u i, u j ), i  j, (u i,u j )H + jinak Cesty a matice - odst. 7.1 Výsledky získáme ve formě matice w-vzdáleností D = [ d ij ] : d ij = d w (u i,u j ) Doplňující informace o samotných cestách ukládáme do matice předchůdců P = [ p ij ] p ij = nil... i=j nebo neexistuje cesta u i  u j, u k... u k je předchůdce u j na cestě u i  u j

5 TI 8.5 Algoritmus Floyda-Warshalla Floyd-Warshall - odst. 7.2 Základní myšlenka: postupně rozšiřujeme povolené vnitřní uzly minimálních cest: , {u 1 }, {u 1, u 2 },..., {u 1, u 2,..., u k },..., {u 1, u 2,..., u n } cesta P : u i  u j s vnitřními uzly z {u 1, u 2,..., u k } d ij (k) - délka minimální cesty P d ij (0) = w ij uiui ukuk ujuj {u 1, u 2,..., u k-1 } d ij (k) = min (d ij (k-1), d ik (k-1) + d kj (k-1) ) d ij (n) = d ij

6 TI 8.6 Algoritmus Floyda-Warshalla 1D (0)  W 2for k  1 to n { 3 for i  1 to n { 4 for j  1 to n { 5 d ij (k)  min (d ij (k-1), d ik (k-1) + d kj (k-1) ) 6} } } 7 return D (n) Floyd-Warshall - odst. 7.2 !!! Časová složitost :O(n 3 ) !!! ? A co paměťová složitost ? ?A co, když chceme znát cesty, ne jen vzdálenosti ?

7 TI 8.7 Výpočet matice předchůdců: p ij (0) = nil pro i=j nebo w ij =  i jinak (tedy pro (u i,u j )  H) p ij (k) =p ij (k-1) pro d ij (k-1)  d ik (k-1) + d kj (k-1) p kj (k-1) pro d ij (k-1) > d ik (k-1) + d kj (k-1) Floyd-Warshall - odst. 7.2 Reflexivně-tranzitivní uzávěr grafu (relace) W = V + E d ij (k) = d ij (k-1)  (d ik (k-1)  d kj (k-1) )

8 TI 8.8 Kontrolní otázky 1.Podobně jako je při provádění Floyd-Warshallova algoritmu možné počítat matici P předchůdců uzlů na nejkratších cestách, je možné také počítat matici Q následníků uzlů na nejkratších cestách. Určete pravidlo, podle něhož se nastaví počáteční hodnoty prvků q ij (0) této matice, a pravidlo pro přechod od (k-1)-ní ke k-té iteraci hodnot q ij. 2.Dalším rozšířením Floyd-Warshallova algoritmu zajistěte, aby po ukončení výpočtu byl znám počet hran na nejkratších cestách mezi všemi uzly (opět ve formě matice označené např. R). (Návod: Inspirujte se řešením obdobného problému pro algoritmus Dikstrův a Bellman-Fordův.) 3.Zdůvodněte, proč je provádění Floyd-Warshallova algoritmu možné všechny iterace matice D (k) uchovávat v jediném poli. (Návod: Ověřte, že vnitřní dva cykly nemění hodnotu prvků v k-tém řádku a k-tém sloupci, na nichž závisí hodnoty prvků v nové iteraci.) 4.Jak se při použití Floyd-Warshallova algoritmu zjistí případná existence záporných cyklů v grafu? Nejkratší cesty – kap. 7

9 TI 8.9 Johnsonův aloritmus Úvaha: (označíme |U|=n) Pro řídké grafy (|H|<

10 TI 8.10 ? Jak najít přehodnocení w', které bude zachovávat minimálnost cest? Johnson - odst. 7.3 V: Nechť je pro graf G = H, U s ohodnocením hran w: H  R dána funkce h: U  R. Nechť je ohodnocení w' pro každou hranu (u,v) dané vztahem w'(u,v) = w(u,v)+h(u)-h(v) Potom pro cestu L: u  v platí, že L je minimální podle w, právě když je minimální podle w'. D: platí w'(L) = w(L)+h(u)-h(v)  cesta minimální pro w je minimální i pro w' a naopak Zbývá nalézt vhodné h, aby bylo w'(u,v)  0 !!!

11 TI 8.11 Úprava G na G': •přidáme uzel s: U' = U  {s} a hrany H = H  {(s,u): u  U}, w(x) = 0 pro nové hrany x v u Johnson - odst. 7.3 •položíme h(u)=d(s,u)... platí h(v)  h(u) + w(u,v), tedy w'(u,v) = w(u,v) + h(u) - h(v)  0 !!! s

12 TI 8.12 Johnsonův algoritmus 1G  G' 2Bellman-Ford(G',w,s) pokud false STOP 3for každý uzel uU { h(u)  d(s,u) } 4for každou hranu (u,v)H { 5w'(u,v)  w(u,v) + h(u) - h(v) 6for každý uzel uU { 7 Dijkstra(G, w', u) 8 for každý uzel vU { 9 d(u,v)  d'(u,v) - h(u) + h(v) 10} 11} Johnson - odst. 7.3 O(n.|H|) O(n 2.lg n + n.|H|) (pro Fib. heap) O(n.|H|.lg n) pro binární heap

13 TI /0 3/1 2/33/1 3/3 4/4 1/0 -1/0 6/7 4/4 h(u) = min (0, délka nejkratší cesty s  u) w'(u,v) = w(u,v) + h(u) - h(v) Johnson - odst. 7.3 s

14 TI 8.14 Algebraické souvislosti Floyd-Warshall: d ij (k) = min (d ij (k-1), d ik (k-1) + d kj (k-1) ) Algebraické souvislosti - odst. 7.4 dvojoperace min, + označíme ,  ?Jaké vlastnosti musí tyto operace mít, aby to fungovalo? efekt složení dvou spojení u  v  v  x efekt kombinování alternativních spojení u v 

15 TI 8.15 Polookruh P P = P, , , 0, 1 : a  (b  c) = (a  b)  c P, , 0 a  0 = 0  a = aje komutativní a  b = b  amonoid a  a = aidempotence a  (b  c) = (a  b)  c P, , 1 a  1 = 1  a = aje monoid a  0 = 0  a = 0s nulovým prvkem a  (b  c) = (a  b)  (a  c) distributivnost (b  c)  a = (b  a)  (c  a) zleva a zprava Algebraické souvislosti - odst. 7.4 Teď přijde trochu matematiky, podrobněji viz skripta...

16 TI 8.16 Uzavřený polookruh: a 1  a 2  a 3 ... je definováno pro lib. a 1, a 2, a 3,... a je •asociativní, komutativní, idempotentní a navíc •distributivní vůči  Algebraické souvislosti - odst. 7.4 Kdy máme  mnoho spojení? Když máme cykly! Uzávěr c* = 1  c  (c  c)  (c  c  c)... 0* = 1, c  c* = c*  c,c* = 1  (c*  c),... Příklady polookruhů R + {}, min, +, , 0 a* = min (0, a, a+a, a+a+a,...) = 0 R {, -}, min, +, , 0a* = 0 nebo - (pro a<0)

17 TI 8.17 Řešení obecné úlohy o spojeních Máme jednoduchý OG G = H,U a ohodnocení P : H  P, (h)  0, kde P = P, , , 0, 1 je polookruh. Doplníme ohodnocení o (u,v) = 0 pro (u,v)  H. Spojení L = u 1,u 2,...,u k  ohodnotíme pomocí jeho hran (L) = (u 1,u 2 )  (u 2,u 3 ) ...  (u k-1,u k ) takže platí (L 1  L 2 ) = (L 1 )  (L 2 ) (L 1  L 2 ...  L r ) = (L 1 )  (L 2 ) ...  (L r ) Rozšíříme  i na množiny spojení {L i } iI mezi stejnými uzly  ({L i } iI ) =  iI  (L i ) Algebraické souvislosti - odst. 7.4

18 TI 8.18 F-W algoritmus zobecníme, aby pro všechna u,v  U počítal s uv =  L : uv (L) Předpokládáme U = {1,2,...|U|}, L(i,j,k) - všechna spojení z i do j s vnitřními uzly pouze z množiny {1,2,...,k}. Postupně se počítají s ij (k) =  L  L(i,j,k) (L) pomocí rekurence s ij (k) = s ij (k-1)  (s ik (k-1)  (s kk (k-1) )*  s kj (k-1) ) a počátečního nastavení s ij (0) = (i,j) pro i j, s ij (0) = 1  (i,j) pro i=j Algebraické souvislosti - odst. 7.4 Ta trocha matematiky pokračuje...

19 TI 8.19 Zobecněný F-W algoritmus Floyd-Warshall-G(G, ) 1 for i1 to n { 2 for j  1 to n { s ij (0)  (i,j) } 3 s ii (0)  1  (i,i) 4 } 5 for k  1 to n { 6 for i  1 to n { 7 for j  1 to n { 8 s ij (k)  s ij (k-1)  (s ik (k-1)  (s kk (k-1) )*  s kj (k-1) ) 9 } } } 8return S (n) za co je tam ta 1 ??? Algebraické souvislosti - odst. 7.4

20 TI 8.20 Pro polookruh R + {}, min, +, , 0 a* = min (0, a, a+a, a+a+a,...) = 0 uzávěrový činitel (s kk (k-1) )* odpadá s ij (k) = s ij (k-1)  (s ik (k-1)  s kj (k-1) ) Pro polokruh R {, -}, min, +, , 0a* = 0 nebo - (pro a<0) hodnota (s kk (k-1) )* je - pokud spojení z u do v prochází cyklem < 0 P =  0,1, max,., 0, 1 a*=1 - nejspolehlivější spojení P =  R k, max, min, r min, r max  - spojení s maximální propustností R k je konečná množina reálných čísel Algebraické souvislosti - odst. 7.4 A tohle je několik výsledků...

21 TI 8.21 Kontrolní otázky 1.Jak je třeba definovat operace  a  a nosič (tj. množinu P) v odpovídajícím polookruhu, aby zobecněný Floyd-Warshallův algoritmus určil počet různých spojení mezi jednotlivými dvojicemi uzlů. Nejkratší cesty – kap. 7


Stáhnout ppt "TI 8.1 NEJKRATŠÍ CESTY MEZI VŠEMI UZLY Nejkratší cesty - kap. 7."

Podobné prezentace


Reklamy Google