toky v sítích párování v grafech

22
Teoretická informatika Tomáš Foltýnek [email protected] Toky v sítích Párování v grafech

Upload: amie

Post on 20-Mar-2016

90 views

Category:

Documents


2 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Toky v sítích Párování v grafech

Teoretická informatikaTomáš Foltý[email protected]

Toky v sítíchPárování v grafech

Page 2: Toky v sítích Párování v grafech

Teoretická informatika

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?

strana 2

Page 3: Toky v sítích Párování v grafech

Teoretická informatika

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)

Page 4: Toky v sítích Párování v grafech

Teoretická informatika

Tok

• Je dána síť N = (G, s, t, c). Tokem v 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)

strana 4

)()(

)()(:},{vHhvHh

hfhftsUv

Page 5: Toky v sítích Párování v grafech

Teoretická informatika

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í

strana 5

0)(:},{)(

vHh

hftsUv

Page 6: Toky v sítích Párování v grafech

Teoretická informatika

Řez

• Řez v síti je taková množina hran, po jejichž odstranění by v síti nezbyla žádná cesta ze zdroje do stoku– velikost řezu je 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

strana 6

Page 7: Toky v sítích Párování v grafech

Teoretická informatika

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:

strana 7

HVWvwHWVwvHWVwv

vwfwvfwvcWVc)(),()(),()(),(

),(),(),(),(

||)(...)(

fhfsHh

Page 8: Toky v sítích Párování v grafech

Teoretická informatika

Další síťové pojmy• Rezervní kapacita hrany

cf(h) = c(h) – f(h)– je-li cf(h) = 0, hovoříme o nasycení hrany h

• Rezervní kapacita cesty je minimum rezervních kapacit hran na této cestě

• Nasycená cesta je 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í tok v síti je takový tok, který má největší možnou velikost.

strana 8

Page 9: Toky v sítích Párování v grafech

Teoretická informatika

Rozšiřující cesta a polocesta

• Rozšiřující (též zlepšující) cesta je 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

strana 9

Page 10: Toky v sítích Párování v grafech

Teoretická informatika

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.

strana 10

Page 11: Toky v sítích Párování v grafech

Teoretická informatika

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)

strana 11

Page 12: Toky v sítích Párování v grafech

Teoretická informatika

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

strana 12

),()()(|| BAchchffHBAhHBAh

Page 13: Toky v sítích Párování v grafech

Teoretická informatika

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

strana 13

Page 14: Toky v sítích Párování v grafech

Teoretická informatika

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

strana 14

Page 15: Toky v sítích Párování v grafech

Teoretická informatika

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

strana 15

Page 16: Toky v sítích Párování v grafech

Teoretická informatika

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

Page 17: Toky v sítích Párování v grafech

Teoretická informatika

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

Page 18: Toky v sítích Párování v grafech

Teoretická informatika

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

Page 19: Toky v sítích Párování v grafech

Teoretická informatika

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

Page 20: Toky v sítích Párování v grafech

Teoretická informatika

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é

Page 21: Toky v sítích Párování v grafech

Teoretická informatika

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

Page 22: Toky v sítích Párování v grafech

Teoretická informatika

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í