TOKY V SÍTÍCH II Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 010/011, Lekce 10 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 1 / 15 31
Toky v sítích II Seznámíme se s následujícími pojmy: algoritmus Forda-Fulkersona sítě s omezeným tokem sítě se záporným tokem, neorientovane sítě cirkulace, nejlacinější cirkulace párování, maximální párování, přiřazovací úloha Skripta kap. 8, str. 18 155 Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 // 15 31
Algoritmus Forda-Fulkersona V: (max flow - min cut) Velikost maximálního toku sítě je rovna kapacitě jejího minimálního řezu. Ford-Fulkerson (S) 1 for ( Edge (u,v) in H(G) ) f(u,v) = 0; while ( NajdiCestu(S) ) ZvyšTok(S); 3 return f; Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 3 // 15 31
Algoritmus Forda-Fulkersona NajdiCestu hledá zlepšující cestu prohledáváním sítě d[u] průběžně počítané δ, stav[u], p[u] (+ pro, - pro ) boolean NajdiCestu (Node s) { 1 for ( Node u in U(G) ) stav[u]=fresh; p[s] = +s; d[s] = ; stav[s] = OPEN; 3 do { u = "libovolný otevřený uzel"; stav[u] = CLOSED; 5 for ( Node v in Γ(u) ) { 6 if ( (stav[v]==fresh) && (f(u,v)<q(u,v)) ) { 7 stav[v]=open; p[v]=+u; d[v]=min(d[u],q(u,v)-f(u,v)); 8 } } 9 for ( Node v in Γ -1 (u) ) { 10 if (stav[v]==fresh) && (f(v,u)>0) ) { 11 stav[v]=open; p[v]=-u; d[v]=min(d[u],f(v,u)); 1 } } 11 } while ( ( "neexistuje otevřený uzel" ) (u == t) ); 1 return (u == t); 13 } Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 // 15 31
Algoritmus Forda-Fulkersona void ZvyšTok (Node s) { 1 x = t; δ = d[t]; do { v = x; sgn = p[v]; u = abs(sgn); 3 if (sgn>0) f(u,v) += δ; else f(v,u) -= δ; 5 x = u; 6 } while ( v==s ); } u ux=v x=v u x=v s +δ -δ +δ t? Složitost? NajdiCestu... O( U + H ) ZvyšTok... O( U )? Celý algoritmus? O( U. H **), O( U **. H ), O( U **3) Další zrychlení pro speciální případy (planární sítě) O( U )... až na O( U. lg U ) Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 5 // 15 31
Příklad 3 z kontrolní otázky 9.10 s1 6 10 10 8 t1 8 s t 5 3 s 8 9 10 6 9 t Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 6 // 15 31
Příklad 3 z kontrolní otázky 9.10 s1 / 6/ 10/ 8/ t1 8 s t 5 3 s 8 9 10 6 t Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 7 // 15 31
Příklad 3 z kontrolní otázky 9.10 s1 / 6/ 10/ 8/ t1 8 s t 5 3 s 8/6 9/6 10/6 6/6 t Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 8 // 15 31
Příklad 3 z kontrolní otázky 9.10 s1 / 6/ 10/7 8/7 t1 8 /3 s t 5 /3 /3 3 s 8/6 9/9 10/6 6/6 t Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 9 // 15 31
Příklad 3 z kontrolní otázky 9.10 s1 / 6/5 10/8 8/8 t1 8 /3 s t 5 / /3 3 s 8/6 9/9 10/6 6/6 t Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 10 // 15 31
Příklad 3 z kontrolní otázky 9.10 s1 / 6/5 10/8 8/8 t1 8 /3 s t 5 / /3 3 s 8/6 9/9 10/6 6/6 t Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 11 // 15 31
Příklad 3 z kontrolní otázky 9.10 s1 / 6/5 10/8 8/8 t1 8 /3 s t 5 /5 /3 3/1 s 8/6 9/9 10/6 6/6 t Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 1 // 15 31
Příklad 3 z kontrolní otázky 9.10 / 6/6 10/8 8/8 8 /1 s t 5 /5 /3 3/3 8/8 9/9 10/6 6/6 q(h s x H t )=17 Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 13 // 15 31
Sítě s omezeným minimálním tokem Přípustný tok hranou (u,v) musí splňovat podmínku 0 r(u,v) f(u,v) q(u,v) Metoda řešení: převod na základní úlohu r1/q1 q1-r1 q-r r/q r s q3-r3 r3/q3 t r3 r1 r1 q-r r/q r r r3 r s' t' Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 1 // 15 31
Sítě s omezeným minimálním tokem? Co dál? Nalezneme maximální tok s' t'.?nasycuje nově přidané hrany? ANO - máme přípustný tok a zlepšujeme jej standardně podél zlepšujících cest (ale nesmí klesnout pod hodnotu omezení ve hranách, kde to je požadováno!!!) NE - úloha nemářešení Úprava definice kapacity hranového řezu pro sítě s omezeným minimálním tokem (musí se odečíst minima ve směru t s) kde (u,v) U s U t, (x,y) U t U s q(u s U t ) = q(u,v) - r(x,y), Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 15 // 15 31
Další varianty sítě Sítě se zápornými toky: r(u,v)<0 nebo také q(u,v)<0 pro r(u,v) q(u,v) 0 obrátíme orientaci hrany (u,v) na (v,u) a určíme meze 0 q(v,u) r(v,u) pro r(u,v) < 0 < q(u,v) přidáme opačně orientovanou hranu (v,u) s kapacitou q(v,u) = r(u,v), minima v obou budou 0 Tok v neorientované síti (předpokládáme nulový minimální tok): neorientovanou hranu nahradíme dvojicí opačně orientovaných hran se stejnou kapacitou q(u,v) = q(v,u) výsledný tok je rozdílem toků a má směr většího ze dvou Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 16 // 15 31
Cirkulace v síti Cirkulace splňuje podmínku f(u,v) - f(v,u) = (u,v) H (v,u) H 0 pro všechny uzly u U předpokládáme síť s omezením 0 r(u,v) f(u,v) q(u,v) přípustná cirkulace musí splňovat toto omezení Základní otázka KDY v síti existuje přípustná cirkulace? Právě tehdy, když každý hranový řez má nezápornou kapacitu q(u1 U) = q(u,v) - (u,v) U1 U (x,y) U U1 r(x,y) 0, "může odtéct aspoň tolik, kolik musí přitéct" pro konkrétní tok je samozřejmě f(u,v) - f(x,y) = 0 Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 17 // 15 31
Určení nějaké přípustné cirkulace Algoritmus určení přípustné cirkulace Vstup: síť S s omezeními r (minimální tok) a q (kapacita), f je libovolná cirkulace v síti (např. nulová) 1. Najdeme hranu (u,v) s nepřípustným tokem, pokud neexistuje, cirkulace je přípustná.. a) je-li f(u,v)<r(u,v), položíme =r(u,v)-f(u,v) b) hledáme zlepšující cestu C(v u), pokud neexistuje, pak přípustná cirkulace neexistuje c) zvýšíme cirkulaci kružnicí C (u,v) pro (u,v) uvažujeme kapacitu, pokračujeme krokem 1. 3. a) je-li f(u,v)>q(u,v), položíme =f(u,v)-q(u,v) b) hledáme zlepšující cestu C(u v), pokud neexistuje, pak přípustná cirkulace neexistuje c) zvýšíme cirkulaci kružnicí C (v,u) pro (v,u) uvažujeme kapacitu, pokračujeme krokem 1. Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 18 // 15 31
Hledání přípustné cirkulace - ilustrace Situace podle bodu : tok f(u,v) pod dolní mezí r(u,v), f(u,v) < r(u,v) tok hranou (u,v) zvyšujeme o hodnotu =r(u,v)-f(u,v) >0 u v orientace zvýšení cirkulace Situace podle bodu 3: tok f(u,v) nad kapacitou q(u,v) f(u,v) > q(u,v) tok hranou (u,v) snižujeme o hodnotu =f(u,v)-q(u,v) > 0 u v Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 19 // 15 31
Variantní určení přípustné cirkulace Opět: převodem na základní úlohu 1/5 /6 /6 1/ 3/5 /6 /6 / (+)-(1+3)= > 0 (1+)-(+)=-3 < 0 3 Spočteme rozdíly dolních mezí toku vystupující minus vstupující hrany s t Kladné uzly napojíme na t, do záporných vedeme z s Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 0 // 15 31
Variantní určení přípustné cirkulace Opět: převodem na základní úlohu 3/5 1/5 /6 /6 /6 /6 1/ 3 / 3 Určíme nové kapacity q (u,v) = q(u,v)-r(u,v) s t Opakujeme pro všechny uzly i hrany Nalezneme maximální s t tok Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 1 // 15 31
Variantní určení přípustné cirkulace 3 3/5 1/5 /6 0 3 /6 /6 1 /6 1 1/ 3 / 3 Dostali jsme maximální tok, který saturuje přidané hrany s t Nalezneme maximální s t tok Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 // 15 31
Variantní určení přípustné cirkulace 1/5 3+1 3/5 +3 /6 1+ /6 0+ 3+ /6 /6 1+ 3 1/ 3+1 / + Určíme nový tok přičtením dolní meze toku f (u,v) = f(u,v)+r(u,v) s t Provedeme pro všechny hrany Odstraníme s, t a všechny přidané hrany Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 3 // 15 31
Variantní určení přípustné cirkulace 3/5 5 1/5 /6 5 /6 /6 5 /6 3 1/ / Získali jsme přípustnou cirkulaci Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 // 15 31
Nejlevnější cirkulace S síť s kapacitou q, dolní mezí toku r a jednotkovou cenou toku c: H Z (cena může být i záporná) Cena cirkulace f: C(f) = (u,v) H f(u,v).c(u,v) Zlepšující kružnice definuje se analogicky jako zlepšující cesta: má jednu ze dvou možných orientací hrany ve směru (vpřed) musí mít rezervu q(u,v) f(u,v) > 0 hrany proti směru (vzad) musí mít rezervu f(u,v) r(u,v) > 0 hrana vpřed hrana vzad Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 5 // 15 31
Nejlevnější cirkulace Cena zlepšující kružnice je rovna součtu jednotkových cen hran vpřed minus součet jednotkových cen hran vzad. Je-li cena zlepšující kružnice p a změníme-li tok podle ní o hodnotu, pak celková cena cirkulace vzroste o hodnotu.p. Věta Přípustná cirkulace f je nejlevnější cirkulací v síti S právě tehdy, když v síti S neexistuje vzhledem k cirkulaci f žádná zlepšující kružnice se zápornou cenou. Přírůstková síť S f vzhledem k toku f má stejné uzly jako S a hrany H' pro (u,v) H: f(u,v) < q(u,v) je (u,v) H' a má kapacitu q(u,v)-f(u,v) pro (u,v) H: f(u,v) > r(u,v) je (v,u) H' a má kapacitu f(v,u)=f(u,v)-r(u,v) Zlepšující cesta (kružnice) v S = orientovaná cesta (cylus) v S' Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 6 // 15 31
Algoritmus nalezení nejlevnější cirkulace 1. Nalezneme přípustnou cirkulaci f v síti S, pokud neexistuje, končíme.. Sestrojíme přírůstkovou síť S f vzhledem k cirkulaci f. 3. Jednotkové ceny považujeme za délky hran v síti S f a najdeme zde cyklus se zápornou délkou. Pokud neexistuje, f je nejlevnější cirkulace.. V síti S sestrojíme zlepšující kružnici odpovídající nalezenému cyklu, provedeme úpravu cirkulace podél této kružnice a pokračujeme krokem. Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 7 // 15 31
Aplikace toků - maximální párování Párování v grafu - "nezávislá" podmnožina hran (žádné dvě nemají společný uzel). Perfektní párování pokrývá všechny uzly. Maximální párování pokrývá co nejvíce uzlů. Při ohodnocených hranách můžeme hledat nejlevnější maximální párování. Nejdražší párování má největší součet cen. Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 8 // 15 31
Úlohy na párování Přiřazovací úloha - určit nejlevnější perfektní párování v úplném bipartitním grafu K n,n. Příklad na maximální párování v neorientovaném bipartitním grafu G s rozkladem uzlů U = X Y původní graf X Y s 1 1 1 1 1 1 1 t 1 1 Nalezneme maximální tok pomocí algoritmu Ford-Fulkerson získáme maximální párování (hrany s nenulovým tokem). Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 9 // 15 31
Kontrolní otázky 9.9 Určete maximální tok ze zdrojů do spotřebičů v sítích G 1 až G 3. Dvojitě vytažené uzly v síti G 3 mají kapacitu omezenu uvedenou hodnotou. Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 30 // 15 31
Kontrolní otázky 9.10 Předpokládejte, že síť má tvar kořenového stromu, zdroj sítě je umístěn v kořeni s. Navrhněte efektivní algoritmus, který pro každý list u i stromu uvažovaný jako jediný spotřebič určí maximální tok s u i. 9.11 Předpokládejte, že síť má tvar kořenového stromu, zdroj sítě je umístěn v kořeni s. Navrhněte efektivní algoritmus pro určení takových minimálních kapacit jednotlivých hran, které zajistí, že do všech listů {u i } stromu lze současně dopravit maximální tok velikosti 1. Doc. Josef Kolář (ČVUT) Prohledávání Toky v sítíchgrafů II GRA, LS 010/11, Lekce 10 31 // 15 31