NEJKRATŠÍ CESTY MEZI VŠEMI UZLY

Slides:



Advertisements
Podobné prezentace
Grafové algoritmy.
Advertisements

LOGISTICKÉ SYSTÉMY 14/15.
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Iterativní algoritmy pro Gaussovské grafické modely Implementace do SW Mathematica Vladislav Chýna.
PLANARITA A TOKY V SÍTÍCH
Stavový prostor. • Existují úlohy, pro které není k dispozici univerzální algoritmus řešení • různé hry • problém batohu, problém obchodního cestujícího.
Dualita úloh lineárního programování a analýza citlivosti
Programování funkcí v Excelu (pole)
LOGISTICKÉ SYSTÉMY 6/14.
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
Red-Black Stromy Binární Vyhledávací Stromy, u kterých je časová složitost operací v nejhorším případě rovná O(log n)
Grafové algoritmy Programovací techniky.
Aplikace teorie grafů Základní pojmy teorie grafů
Sample Solutions CTU Open Contest ANALOG CLOCK.
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Varianty Turingova stroje Výpočet funkcí pomocí TS
Algoritmy I Cvičení č. 4.
Algoritmy I Cvičení č. 3.
ADT Strom.
FORMALIZACE PROJEKTU DO SÍŤOVÉHO GRAFU
Matematické metody v ekonomice a řízení II
LOGISTICKÉ SYSTÉMY 8/14.
SÍŤOVÁ ANALÝZA.
TI 6.1 STROMY A KOSTRY Stromy a kostry. TI 6.2 Stromy a kostry Seznámíme se s následujícími pojmy: kostra grafu, cyklomatické číslo grafu, hodnost grafu.
ANALÝZA KONSTRUKCÍ 7. přednáška.
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
Základní teorie grafů a její aplikace
KIV/PRO Cvičení Přátelské mince Mějme nově založený stát – Je potřeba vydat vlastní měnu – Uvažujme pouze mince, bankovky zanedbáme Vstup:
Stromy.
CW – 05 TEORIE ROZHODOVACÍCH PROCESŮ Ústav technologie, mechanizace a řízení staveb Fakulta stavební VUT v Brně © Ing. Václav Rada, CSc. 15. PŘEDNÁŠKA.
Fakulta životního prostředí Katedra informatiky a geoinformatiky
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Další typy dopravních problémů
Univerzita Karlova Matematicko-fyzikální fakulta Lukáš Jirovský Teorie grafů – prezentace Bc. Práce Vedoucí práce: RNDr. Pavla Pavlíková, Ph.D.
CW – 05 TEORIE ROZHODOVACÍCH PROCESŮ
Modulární systém dalšího vzdělávání pedagogických pracovníků JmK v přírodních vědách a informatice CZ.1.07/1.3.10/ Grafové pojmy Projekt učitelé.
VLASTNOSTI GRAFŮ Vlastnosti grafů - kap. 3.
Pre-algebra Antonín Jančařík.
Algoritmus a jeho vlastnosti
Kostra grafu Prohledávání grafu
Rozpoznávání v řetězcích
Směrování - OSPF.
Časová analýza stochastických sítí - PERT
Tomáš Vambera. Přístroje  Mobilní telefony  Přenosné počítače (Pda)  GPS Přístroje.
Kanonické indexování vrcholů molekulového grafu Molekulový graf: G = (V, E, L, ,  ) Indexování vrcholů molekulového grafu G: bijekce  : V  I I je indexová.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)Prohledávání stavového prostoruGRA, LS 2013/14, Lekce 11.
Směrování -RIP. 2 Základy směrování  Předpoklady:  Mějme směrovač X  Směrovač nemůže znát topologii celé sítě  X potřebuje určit směrovač pro přístup.
Sylabus V rámci PNV budeme řešit konkrétní úlohy a to z následujících oblastí: Nelineární úlohy Řešení nelineárních rovnic Numerická integrace Lineární.
Matice přechodu.
Vstup: Úplný graf G=(V,E), ohodnocení hran d:E → R + Výstup: Nejkratší Hamiltonovská cesta HC v grafu G Najdi minimální kostru K grafu G Pokud K neobsahuje.
Vyhledávání vzorů (template matching)
Radim Farana Podklady pro výuku
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)NP-úplné problémyGRA, LS 2012/13, Lekce 13 1 / 14 NP-ÚPLNÉ.
VLASTNOSTI GRAFŮ Doc. RNDr. Josef Kolář, CSc
CPM - Critical Path Method
Jak je to s izomorfismem
Problém obchodního cestujícího Zpracoval Ing. Jan Weiser.
TI 3.1 UPOZORNĚNÍ Reprezentace grafů, odst. 4.1 dne (za týden) bude X36TIN dvakrát dne (za 5 týdnů) bude X36OSY dvakrát skripta.
NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6.
ALGORITMY UMĚLÉ INTELIGENCE
STROMY A KOSTRY Stromy a kostry - odst. 3.2.
MODELY TEORIE GRAFŮ.
MINIMÁLNÍ KOSTRA V GRAFU
Výukový materiál zpracován v rámci projektu
Běžné reprezentace grafu
Výpočetní složitost algoritmů
Toky v sítích.
NEJKRATŠÍ CESTY MEZI VŠEMI UZLY
Prakticky identické postupy:
Transkript prezentace:

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

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

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

matice w-vzdáleností D = [ dij ] : dij = dw(ui,uj) 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 wij = w(ui, uj), i  j, (ui,uj)H + jinak Výsledky získáme ve formě matice w-vzdáleností D = [ dij ] : dij = dw(ui,uj) Doplňující informace o samotných cestách ukládáme do matice předchůdců P = [ pij ] pij = nil ... i=j nebo neexistuje cesta ui  uj, uk ... uk je předchůdce uj na cestě ui  uj Cesty a matice - odst. 7.1

Algoritmus Floyda-Warshalla Základní myšlenka: postupně rozšiřujeme povolené vnitřní uzly minimálních cest: , {u1}, {u1, u2},..., {u1, u2, ..., uk},..., {u1, u2, ..., un} cesta P : ui  uj s vnitřními uzly z {u1, u2, ..., uk} dij(k) - délka minimální cesty P ui uk uj {u1, u2, ..., uk-1} dij(0) = wij dij(k) = min (dij(k-1) , dik(k-1) + dkj(k-1)) dij(n) = dij Floyd-Warshall - odst. 7.2

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

Výpočet matice předchůdců: pij(0) = nil pro i=j nebo wij=  i jinak (tedy pro (ui,uj)  H) pij(k) = pij(k-1) pro dij(k-1)  dik(k-1) + dkj(k-1) pkj(k-1) pro dij(k-1) > dik(k-1) + dkj(k-1) Reflexivně-tranzitivní uzávěr grafu (relace) W = V + E dij(k) = dij(k-1)  (dik(k-1)  dkj(k-1)) Floyd-Warshall - odst. 7.2

Kontrolní otázky 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ů qij(0) této matice, a pravidlo pro přechod od (k-1)-ní ke k-té iteraci hodnot qij. 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.) 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.) Jak se při použití Floyd-Warshallova algoritmu zjistí případná existence záporných cyklů v grafu? Nejkratší cesty – kap. 7

Johnsonův aloritmus Úvaha: (označíme |U|=n) Pro řídké grafy (|H|<<O(n2)) je O(|H|.n) lepší než O(n3) takže O(n.(|H| + n.lg n)) je lepší než O(n3) Idea: n x Dijkstra (+ Fib. heap), ale co s w(h) < 0 ?? Přehodnocení w  w' takové, že pro každé u,v je cesta u  v minimální podle w' minimální také podle w w'(u,v)  0 Johnson - odst. 7.3

Zbývá nalézt vhodné h, aby bylo w'(u,v)  0 !!! ? Jak najít přehodnocení w' , které bude zachovávat minimálnost cest? 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 !!! Johnson - odst. 7.3

w'(u,v) = w(u,v) + h(u) - h(v)  0 !!! Ú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 s u 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 !!! Johnson - odst. 7.3

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

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

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

Teď přijde trochu matematiky, podrobněji viz skripta ... Polookruh Teď přijde trochu matematiky, podrobněji viz skripta ... P = P, , , 0, 1 : a  (b  c) = (a  b)  c P, , 0 a  0 = 0  a = a je komutativní a  b = b  a monoid a  a = a idempotence a  (b  c) = (a  b)  c P, , 1 a  1 = 1  a = a je monoid a  0 = 0  a = 0 s 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

Kdy máme  mnoho spojení? Když máme cykly! Uzavřený polookruh: a1  a2  a3  ... je definováno pro lib. a1, a2, a3, ... a je asociativní, komutativní, idempotentní a navíc distributivní vůči  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) Algebraické souvislosti - odst. 7.4

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

Ta trocha matematiky pokračuje ... F-W algoritmus zobecníme, aby pro všechna u,v  U počítal suv = 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í sij(k) = L  L(i,j,k) (L) pomocí rekurence sij(k) = sij(k-1)  (sik(k-1)  (skk(k-1))*  skj(k-1) ) a počátečního nastavení sij(0) = (i,j) pro i j, sij(0) = 1  (i,j) pro i=j Algebraické souvislosti - odst. 7.4

Zobecněný F-W algoritmus Floyd-Warshall-G(G, ) 1 for i1 to n { for j  1 to n { sij(0)  (i,j) } sii(0)  1  (i,i) 4 } 5 for k  1 to n { 6 for i  1 to n { 7 for j  1 to n { 8 sij(k)  sij(k-1)  (sik(k-1)  (skk(k-1))*  skj(k-1) ) 9 } } } 8 return S(n) za co je tam ta 1 ??? Algebraické souvislosti - odst. 7.4

A tohle je několik výsledků ... Pro polookruh R+ {}, min, +, , 0 a* = min (0, a, a+a, a+a+a, ...) = 0 uzávěrový činitel (skk(k-1))* odpadá sij(k) = sij(k-1)  (sik(k-1)  skj(k-1) ) Pro polokruh R {, -}, min, +, , 0 a* = 0 nebo - (pro a<0) hodnota (skk(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 =  Rk, max, min , rmin, rmax - spojení s maximální propustností Rk je konečná množina reálných čísel Algebraické souvislosti - odst. 7.4

Kontrolní otázky 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