Hálózati folyamok Definíció: Legyen G = (V,E) egy irányított gráf, adott egy c: E R + {0} ún. kapacitásfüggvény, amely minden (u,v) ε E élhez hozzárendel egy nem negatív c(u,v) kapacitást. A gráfnak van két kitüntetett pontja a termelő (forrás) s, és a fogyasztó (nyelő) t. Ekkor a (G,c,s,t) négyest hálózatnak nevezzük. Definíció: Legyen adott egy (G,c,s,t) hálózatunk. Ekkor az f: E R + {0} függvényt hálózati folyamnak nevezzük, ha a következő tulajdonságokkal rendelkezik: - kapacitás megszorítás f(u,v) c(u,v) (u,v) ε E -re - megmaradási szabály f(u, v) vεv =0 v ε V\{s,t}-re - ferde szimmetria f(u,v) = -f(v,u) u,v ε V -re A folyam értéke a forrásból kilépő éleken f értéke. Definíció: Vágásnak nevezzük az X V pontok halmazát, ahol s ε V, de t ε V. A vágás értékét az X - ből kilépő élek kapacitásainak összege. / Tétel: A maximális folyam értéke megegyezik a minimális vágás értékével. Javító út: ha egy út minden e előre élén f(e) < c(e) és minden hátra élén f(e) > 0, akkor ezt az utat javítóútnak nevezzük. Ha létezik ilyen javítóút, akkor a folyam értékét itt növelhetjük: az előre éleken növeljük a folyam értékét, a hátra éleken pedig csökkentjük ugyanazzal a mennyiséggel, DE az előre éleken nem mehetünk a kapacitás értéke fölé és a hátra éleken nem mehetünk nulla alá. Ford - Fulkerson algoritmus: - kezdetben legyen minden élre a folyam értéke nulla - amíg létezik javítóút, addig azon növeljük a folyam értékét - ha már nem létezik új javítóút, akkor megkaptuk a maximális folyamot
Feladatok: Maximális folyam minimális vágás meghatározása.. (A: termelő, D: fogyasztó) 0/6 A folyam értéke kezdetben minden élre nulla, most minden lépésben keresünk egy javító utat és a javítóút mentén növeljük a folyam értékét. Válasszuk az A,B,C,D javító utat. Itt 2vel tudunk javítani. 2/6 2/3
Válasszuk az A,E,C,D utat javító útnak, itt a (C,D) él miatt -el tudunk javítani. 2/6 /8 /4 Válasszuk az A,E,F,D javító utat. Az (E,F) él miatt 2-vel tudunk javítani. 2/6 3/8 /4 2/7 Az A,E,C,B,F,D út is javítóút. Itt viszont van egy hátra él; mivel a hátra élre f(hátra él) > 0 és az előre élekre is teljesül, hogy c(előre él) > f(előre él), ezért ez valóban jó javító út lesz. Az (B,C) él miatt 2-vel tudunk javítani.
0/6 2/7 3/4 5/8 4/7 Látható, hogy többet nem tudunk javítani: az (A,B) élre f(a,b) = c(a,b), tehát innen indulva nem tudunk javító utat keresni. Az (A,E) élen tudnánk javítani és az (E,C) élen is, viszont innen nem tudunk tovább haladni. A maximális folyam meghatározásához meg kell néznünk, hogy a termelőből (A) kilépő éleken mekkora a folyam étéke: MAX FOLYAM = 5 + 2 = 7 Minimális vágás: Látható, hogy A-ból B-be el tudunk jutni, hiszen az (A,E) él előre él és telítetlen, E-ből B-be nem tudunk eljutni, mivel ez egy olyan hátra él, ahol a folyamérték 0, az E-ből F-be sem tudunk eljutni, mivel ez olyan előre él, amely telített, az E-ből C-be el tudunk jutni, mivel ez olyan előre él, amely nem telített, a C-ből a D-be nem tudunk el jutni, mert telített, a C-ből az F-be és a B-be nem tudunk eljutni, mert ezek olyan hátra élek, amelyeken a folyam értéke nulla. A minimális vágás tehát {A, E, C}. A minimális vágás értéke pedig a kilépő éleken a kapacitások összege: MIN VÁGÁS = 7. Ez pedig meg kell, hogy egyezzen a maximális folyam értékével, ami szintén 7. 2. 0/9 0 0/ 00 0/9
Minden élre a folyamérték nulla. Válasszuk az S,A,B,T utat javító útnak. 8-al tudunk javítani. 8/8 8/9 0 0/ 8/0 00 0/9 Válasszuk az S,C,D,T utat. 3-mal tudunk javítani. 8/8 8/9 0 0/ 8/0 00 3/9 3/7 Legyen a következő javító út az S,C,B,T. A (C,B) él miatt -el tudunk javítani. 8/8 8/9 0 / 9/0 00 4/9 3/7 Nincs több javító út. MAX FOLYAM = 2, MIN VÁGÁS = {S, A, C}
3. (csak a kapacitás értékeket tüntettük fel) 7 4 3 8 2 2 2 6 5 2 MAX FOLYAM = MIN VÁGÁS = {S, C} 4. (csak a kapacitás értékeket tüntettük fel) 4 3 2 2 3 2 MAX FOLYAM = 5 MIN VÁGÁS = {S, A, B, C, D}
5. A T és az F is egy fogyasztót jelöl 2 8 20 8 6 3 2 9 4 2 Mivel két fogyasztónk is van, ezért bevezetünk egy új pontot (G-t), amelyet az F és a T fogyasztókkal kapcsolunk össze. Az (F,G) és a (T,G) élek kapacitását végtelenre állítjuk be. 0/2 0/8 0 0/6 0/ 0/ 0/9 Innentől pedig a feladat olyan, mintha egyetlen nyelőnk lenne. Az (F,G) és a (T,G) élek kapacitását azért választottuk végtelennek, hogy az utólagosan bevezetett G csúcs az eredményt ne befolyásolja majd. MAX FOLYAM = 9 MIN VÁGÁS = {S, D} 0/2 0/
6. Az A.B pontok források, az F,G pontok nyelők. 0/6 0/ Az előző példához hasonlóan vezessünk be egy új csúcsot, amelyet a két nyelővel kötünk össze és állítsuk a kapacitásukat végtelenre. Az A,B forrásokhoz is vezessünk be egy új pontot, amelyet a két forrással kötünk össze és a kapacitásukat ezeknek is végtelenre állítjuk. MAX FOLYAM = MIN VÁGÁS = {A, B, C, D, E} 7. 0/ 0/6