• Nem Talált Eredményt

Hálózati folyamok

In document A számítástudomány alapjai (Pldal 60-63)

9. Párosítások és folyamok

9.4. Hálózati folyamok

2.9.17. definíció.

Legyen G egy irányított gráf. Rendeljünk minden éléhez egy nemnegatív valós számot, amit az él kapacitásának nevezünk. Jelöljünk ki továbbá két pontot G-ben, melyeket termelőnek illetve fogyasztónak hívunk. Ekkor a négyest hálózatnak nevezzük.

Szemléltetésképp feltehetjük, hogy a hálózattal egy vízvezetékrendszert ábrázolunk. A kapacitások a vezeték vastagságát jelentik, vagyis azt, hogy egységnyi idő alatt mennyi víz folyhat át azon a vezetékdarabon. A kérdés az, hogy egy adott hálózaton mennyi víz folyhat át s-ből t-be. Szoktak beszélni úthálózatokról is, ahol a kapacitás az utak áteresztőképessége, és árukat kell eljuttatni a termelőtől a fogyasztókhoz.

2.9.18. definíció.

Legyen az a vízmennyiség, ami az e élen folyik át. Ez az f függvény megengedett függvény, ha minden élre, és

minden -re, kivéve az s és t pontokat. Egy megengedett függvényt folyamnak hívunk. Könnyen belátható, hogy . Ezt a közös értéket a folyam értékének nevezzük és -el jelöljük. Egy élet telítettnek hívunk egy folyamban, ha , és

telítetlennek, ha .

A feladat tehát a maximális értékű folyam meghatározása. Nézzünk néhány példát. A 2.41. ábrán az éleken szereplő első szám a folyam értéke azon az élen, míg a második (zárójelben) az él kapacitása.

2.41. ábra

-Nyilvánvaló, hogy ha van egy olyan irányított út s-ből t-be, amelynek minden élén a folyam értéke kisebb mint az él kapacitása, vagyis minden él telítetlen, akkor ezen út mentén a folyam értékét minden élen megnövelhetjük annyival, hogy az egyik él telített legyen. Ezt szemlélteti a 2.41. ábra első gráfja.

Ilyen javításra azonban nem mindig van lehetőség. Legyen a gráfban egy út, aminek most nem kell feltétlenül az irányítás szerint haladnia. Növelhetjük a folyam értékét abban az esetben,

ha minden -re vagy és , vagy és

. Ekkor az első típusú éleken – mint a következő tételben látni fogjuk – növeljük a folyam értékét, míg a második típusúakon csökkentjük, így az össz folyamérték nő. Az ilyen utakat javító útnak hívjuk. Egy ilyet szemléltet a 2.41. ábra második gráfja, míg a harmadik gráfban nincs javító út.

2.9.19. tétel.

Egy folyam értéke akkor és csak akkor maximális, ha nincs javító út s-ből t-be.

Bizonyítás:

Legyen P egy javító út. Ekkor P minden első típusú élére a , a második típusúra pedig az érték szigorúan pozitív. Legyen ezeknek a minimuma d. Az első típusú élekre növeljük -t d-vel, a második típusúaknál pedig csökkentsük -t d-vel. Ekkor a módosított folyam is megengedett marad, értéke viszont d-vel nőtt.

Tegyük most fel, hogy nincs javító út s-ből t-be. Lehetnek azonban olyan pontok a gráfban amelyek elérhetők s-ből javító úton. (Most nem követeljük meg, hogy a javító út t-be érjen, azaz, hogy legyen.) Legyen az ilyen pontok halmaza . Ekkor sem X,

sem nem üres, hiszen . Tekintsünk egy olyan e élet,

amely egy X-beli x pontból egy nem X-beli y-ba mutat. Ekkor , hiszen ellenkező esetben az s-ből x-be vezető javító út e-vel meghosszabbítva egy s-ből y-ba vezető javító utat szolgáltatna. Ugyanígy egy olyan élre, amelyik egy nem X-beliből egy X-belibe mutat, teljesül, hogy . Tehát az X és között futó élek mind telítettek, és a visszafelé mutató éleket nem használjuk, tehát ezen a vágáson nem folyhat át több víz.

Vagyis f maximális folyam. □

Ez a tétel más formában vált igazán híressé.

2.9.20. definíció.

Legyen , így nyilvánvaló, hogy sem X, sem nem üres

halmaz. Azoknak az éleknek a C halmazát, amelyeknek egyik végpontja X-beli, másik -beli, a hálózati folyam egy -vágásának nevezzük. A vágás értéke, , azon éleken levő kapacitások összege, amelyek egy X-beli pontból egy -beli pontba mutatnak. Ezeket előremutató éleknek nevezzük. Tehát a vágás értékében nem játszanak szerepet a visszafelé mutató élek, vagyis azok, amelyek egy X-beli pontba mutatnak.

Megjegyezzük, hogy ez a definíció nem azonos a a 1. és a 6. szakaszokban található vágás definícióval.

Így az előző tétel egyszerű következménye a következő, ebben a témakörben leggyakrabban felhasznált tétel.

2.9.21. tétel (Ford–Fulkerson).

A maximális folyam értéke egyenlő a minimális vágás értékével, azaz

Bizonyítás:

A maximális folyam nyilván nem lehet nagyobb a minimális vágásnál, hiszen ha minden előremutató él telített, a visszafelé mutatókon pedig 0 a folyam értéke, akkor ezen a vágáson nem folyhat át több víz. Az előző tételben pedig láttuk, hogy ha létezik egy f maximális folyam, akkor van ilyen értékű vágás. Azt, hogy maximális folyam mindig létezik, a következőkben bemutatott algoritmus segítségével bizonyíthatjuk. □

E tétel segítségével könnyen bebizonyítható egy adott folyamról (amit valahogy megsejtettünk), hogy az maximális. Ha megsejtünk egy ugyanilyen értékű vágást, akkor a Ford–Fulkerson tétel biztosítja, hogy a folyam értéke maximális. Ha viszont nem tudjuk megsejteni a maximális folyamot, akkor rendelkezésre áll egy algoritmus. Ez lényegében abból áll, hogy a kiindulási folyamra vonatkozólag (ha ilyen nem volt, akkor az azonosan 0 folyam használható) keresünk egy javító utat, és a már ismert módszer szerint e mentén növeljük a folyam értékét. Hogyan tudunk, ilyen javító utat keresni, illetve hogyan jövünk rá, hogyha nincs javító út?

2.42. ábra

-Az irányított G gráfon adott f folyamhoz definiálunk egy irányított gráfot: Legyen és -ben fusson egy irányított él x-ből y-ba, ha vagy (1) és , vagy (2) és . (2.42. ábra). Könnyen látható, hogy ha -ben van egy irányított út s-ből t-be, akkor az ennek az útnak megfelelő élek G-ben épp egy javító utat adnak az f folyamra nézve. Ha pedig van javító út G-ben, akkor lesz irányított út s-ből t-be -ben.

Így tehát elegendő megnézni, hogy az így kapott gráfban van-e út s-ből t-be. Ezt viszont a BFS algoritmussal könnyen eldönthetjük. Ha van ilyen út, akkor találtunk egy javító utat G-ben, ha nincs, akkor viszont nincs javító út. Ekkor viszont a fenti tétel miatt tudjuk, hogy a folyam maximális.

2.43. ábra

-Nem mindegy azonban, hogy melyik javító utat vesszük. Például a 2.43. ábrán látható hálózati folyamon felváltva az és utakat vesszük, akkor minden lépésben csak 1-gyel tudjuk növelni a folyam értékét, és így a maximális folyam értékéhez csak lépésben jutunk el, míg ha az első lépésben az javító utat vesszük, akkor 2 lépésben jutunk a maximumhoz. Sőt, konstruálható olyan példa is, ahol a javító utak ügyetlen sorrendben való alkalmazása esetén sohasem ér véget az algoritmus.

2.9.22. tétel (Edmonds-Karp).

Ha mindig a legrövidebb javító utat vesszük, akkor a maximális folyam meghatározásához szükséges lépések száma felülről becsülhető a pontok számának polinomjával.

Ezt a tételt itt nem bizonyítjuk be. Ha tehát az előbbi algoritmusban a segédgráfban szélességi kereséssel a legrövidebb utat határozzuk meg s-ből t-be, akkor polinomiális idejű algoritmust kapunk.

Megemlítünk még egy fontos következményt.

2.9.23. tétel.

Ha a kapacitások egész számok, akkor a maximális folyam értéke egész szám, és ez olyan f függvénnyel is megvalósítható, mely minden élen egész értéket vesz fel.

Bizonyítás:

Az állítás nyilvánvaló, hiszen a kiindulási, azonosan 0 folyam rendelkezik a kívánt tulajdonsággal, majd az algoritmus során minden lépésben a folyamértékek minden élen csak

egész számmal változhattak. □

In document A számítástudomány alapjai (Pldal 60-63)