220 likes | 463 Views
Toky v sítích Párování v grafech. Opakování. Co je to obarvení grafu? Jaké způsoby barvení grafu znáte? Co je to platónské těleso? Kolik platónských těles existuje?. Síť. Síť je orientovaný graf, jehož hrany jsou ohodnoceny nezápornými reálnými čísly a ve kterém vyznačíme dva uzly
E N D
Opakování • Co je to obarvení grafu? • Jaké způsoby barvení grafu znáte? • Co je to platónské těleso? • Kolik platónských těles existuje?
Síť • Síť je orientovaný graf, jehož hrany jsou ohodnoceny nezápornými reálnými čísly a ve kterém vyznačíme dva uzly • zdroj – obvykle značíme s • stok (nor) – obvykle značíme t • Formálně: Síť je čtveřice (G, s, t, c), kde • G je orientovaný graf • s je uzel grafu G, do nějž nevchází žádné hrany • t je uzel grafu G, z nějž nevychází žádné hrany • c: HR+0 je funkce přiřazující hranám ohodnocení (kapacitu, průtok)
Tok • Je dána síť N = (G, s, t, c). Tokemv síti nazveme takové ohodnocení hran f: HR+0, které splňuje • kapacitní omezení: 0≤f(h)≤c(h) pro každé hH • zachování toku: pro každý uzel kromě zdroje a stoku je součet toků ve vstupních hranách roven součtu toků ve výstupních hranách • Velikost toku |f| je součet toků výstupních hran zdroje (vstupních hran stoku)
Tok – analogická definice • Za tok považujeme funkci f: VVR • Není-li mezi uzly u a v hrana, položíme f(u,v) = 0 • Pro každou dvojici uzlů platí, že f(u,v) = -f(v,u) • je-li v hraně tok f, je v protisměrné hraně tok –f • Pak zákon zachování toku platí zvlášť pro kladné a záporné toky • Navíc platí
Řez • Řezv síti je taková množina hran, po jejichž odstranění by v síti nezbyla žádná cesta ze zdroje do stoku • velikost řezuje rovna součtu kapacit hran v řezu • Analogická definice řezu je rozklad množiny uzlů na dvě disjunktní podmnožiny, z nichž jedna obsahuje zdroj a druhá stok • velikost řezu je rovna součtu kapacit hran spojujících uzly v různých třídách rozkladu • Velikost řezu značíme • c(H), je-li H množina hran tvořící řez • c(A,B) jsou-li A, B třídy rozkladu tvořící řez • Počet všech možných řezů je 2|V|-2
Velikost toku a velikost řezu • Věta: Je-li f tok a (V,W) řez, pak platí|f| ≤ c(V,W) • Tedy: Pro každý tok a každý řez platí, že velikost toku není větší než velikost řezu • Důkaz:
Další síťové pojmy • Rezervní kapacita hranycf(h) = c(h) – f(h) • je-li cf(h) = 0, hovoříme o nasyceníhrany h • Rezervní kapacita cestyje minimum rezervních kapacit hran na této cestě • Nasycená cestaje cesta s nulovou rezervní kapacitou • tj. některé hrana je nasycená • Rezervní síťje podgraf tvořený pouze hranami s kladnou rezervní kapacitou • Maximální tokv síti je takový tok, který má největší možnou velikost.
Rozšiřující cesta a polocesta • Rozšiřující (též zlepšující) cestaje cesta z s do t taková, že pro každou hranu platí, že cf(h)>0 • Rozšiřující (též zlepšující) polocesta je cesta z s do t v symetrizaci sítě taková, že • pro každou hranu ve směru cesty platí, že f(h) < c(h) • pro každou hranu proti směru cesty platí, že f(h) > 0 • Tok po hraně ve směru cesty lze snížit, tok po hraně proti směru cesty lze zvýšit. • Rezerva hrany je rovna • rezervní kapacitě hrany, tj. c(h) – f(h) pro hrany ve směru cesty • toku přiřazenému hraně, tj. f(h) pro hrany proti směru cesty
Maximální tok a rozšiřující polocesta • Věta: Velikost toku v síti je maximální právě tehdy, když v rezervní síti neexistuje rozšiřující polocesta • Důkaz: Kdyby existovala rozšiřující cesta, bylo by možné navýšit tok o rezervní kapacitu této cesty, tudíž by tok nebyl maximální • Důkaz : Pokud by tok nebyl maximální, bylo by možné nalézt tok větší. Označme rozdíl velikosti toků d. Je-li však možné tok zvýšit o d, musí existovat rozšiřující cesta s rezervní kapacitou d.
Věta o maximálním toku a minimálním řezu • Věta: Maximální velikost toku v síti je rovna minimální velikosti řezu • Zobecnění: Následující tvrzení jsou ekvivalentní • f je maximální tok • v síti neexistuje zlepšující cesta • existuje řez (S,T) takový, že |f| = c(S,T)
Věta o maximálním toku a minimálním řezu – důkaz • 12 jsme již dokázali • 31 jsme již dokázali • 23 • nechť A je množina uzlů dosažitelná ze zdroje po nenasycených hranách • B = U – A • protože platí 2, stok patří do B • (A,B) je tedy řez • všechny hrany (u,v), uA, vB musí být nasycené (jinak by vA) a tedy f(u,v) = c(u,v) • odtud
Hledání maximálního toku v síti • Fordův-Fulkersonův algoritmus • U každé hrany udržujeme dvojici (tok, kapacita) • Nalezneme rezervní polocestu ze zdroje do stoku • Identifikujeme nejmenší rezervu hrany na této cestě – to je rezerva polocesty • Na hranách ve směru cesty zvýšíme tok o • Na hranách proti směru cesty snížíme tok o • Opakujeme tak dlouho, dokud existuje rezervní cesta
Edmonds-Karpův algoritmus I. • Zefektivnění Fordova-Fulkersonova algoritmu • Nejnižšího počtu iterací dosáhneme, hledáme-li rezervní tok na nejkratší možné polocestě (vzhledem k počtu hran) • Edmonds-Karpův algoritmus k nalezení nejkratší rezervní cesty využívá prohledávání grafu do šířky
Edmonds-Karpův algoritmus II. • Inicializace • nastav tok ve všech hranách na nulu • Iterace • Najdi nejkratší rezervní cestu Moorovým algoritmem • Každý uzel dostane značku (p,,d,) • p = předchůdce • + = hrana je ve směru cesty (následník) • – = hrana je proti směru cesty (předchůdce) • d = vzdálenost od zdroje • = rezerva cesty • Při zpracování uzlu i dostane každý neoznačkovaný • následník j značku (i,+,di+1,min(,cij-fij)) • předchůdce j značku (i,-,di+1,min(,fij)) • Zvyš/sniž tok všech hran rezervní cesty o její rezervu • Opakuj, dokud existuje rezervní cesta
Goldbergův algoritmus I. • U každého uzlu udržujeme jeho výšku • Ke každé hraně přidáme protisměrnou hranu s nulovou kapacitou • Vždy platí, že f(u,v) = -f(v,u) • Vlna splňuje kapacitní omezení hran, nemusí splňovat zákon zachování toku • v uzlech jsou povoleny přebytky • uzel s přebytkem je aktivní • Dvě operace • zvednutí uzlu = zvýšení výšky tak, aby byl o 1 výš než nejnižší z následníků na rezervních hranách • protlačení vlny = zvýšení toku hrany o minimum z rezervní kapacity a přebytku počátku
Goldbergův algoritmus II. • Nastav v(s) = |U|, výšku ostatních uzlů na 0 • Nasyť všechny hrany vedoucí ze zdroje • koncové uzly se stávají aktivními • přidej je do fronty • Dokud není fronta aktivních uzlů prázdná • odeber uzel z fronty • existuje-li nižší následník na rezervní hraně, protlač tok po této hraně • jinak zvedni uzel • je-li zel stále aktivní, přidej jej na konec fronty
Párování v grafech • Párování v grafu je množina hran, z nichž žádné dvě nemají společný uzel • Jedná se tedy o dvojice sousedních uzlů • Maximální párování je takové párování, k němuž nelze přidat další hranu • Největší párování je takové párování, které má největší možnou velikost • Perfektní (kompletní) párování je párování pokrývající všechny uzly • V hranově ohodnoceném grafu má smysl hledat maximální párování s nejvyšším/nejnižším ohodnocením
Aplikace: Přiřazovací problém • Je dána množina pracovníků a množina úkolů • dvě množiny uzlů v bipartitním grafu • Hrany vyjadřují schopnost pracovníka splnit daný úkol • obvykle se jedná o úplný bipartitní graf • Ohodnocení hran vyjadřuje čas/cenu/zisk/… • Hledáme maximální párování (každý pracovník bude zaúkolován a každý úkol bude řešen) • s maximálním/minimálním součtem ohodnocení • Zvláštní případ dopravního problému
Hledání největšího párování I. • Hallův teorém: Je dán bipartitní graf G = ((A,B),H). Párování pokrývající celou množinu A existuje právě tehdy, když SA: |V(S)||S| • Je dáno párování P v grafu G. Střídavá cesta je taková cesta, jejíž hrany střídavě leží a neleží v párování P. • Volný uzel je takový uzel, který není incidentní s žádnou hranou z párování • Zlepšující cesta je taková střídavá cesta, jejíž oba krajní uzly jsou volné
Hledání největšího párování II. • Symetrický rozdíl množinAB = (A–B)(B–A)=(AB)–(AB) • Je-li P párování v grafu, |P|=n a C je zlepšující cesta, pak P’ = PC je rovněž párování a platí, že |P’|=n+1 • Algoritmus hledání maximálního párování pomocí střídavých cest • najdeme libovolné párování PH • najdeme střídavou cestu C začínající ve volném vrcholu z A a končící ve volném vrcholu z B • P := PC • opakujeme dokud existuje zlepšující cesta
Maximální párování pomocí toku • Předpokládejme bipartitní graf G = ((A,B),H) • orientace hran je vždy z uzlu ležícího v A do uzlu ležícího v B • Graf G rozšíříme na síť přidáním nových uzlů s a t • pro každé uA přidáme hranu (s,u) o kapacitě 1 • pro každé vB přidáme hranu (v,t) o kapacitě 1 • pro každou hranu hH nastavíme c(h)=L • kde L je libovolné velké číslo • najdeme maximální tok z s do t • tok jednoznačně určuje maximální párování