Gazdaságmatematika 2.
Gyakorlat – 12. hét Folyamfeladatok:
Maximális folyam, minimális vágás
Készítette: dr. Nagy Noémi
Példa
Adott az alábbi táblázattal egy hálózat. Határozza meg a forrást és a nyelőt, valamint az azokat elválasztó minimális kapacitású vágást! Adja meg a vágásbeli éleket, a vágás kapacitását,
valamint írja fel a feladat párjának (maximális folyam) optimális megoldását is!
honnan 1 3 3 3 4 4 5 5 5 5
hova 2 1 2 4 1 2 1 2 3 4
kapacitás 20 4 3 14 13 10 6 3 22 6
A feladat megoldásának első lépése, hogy a fenti táblázatot egy új táblázatba rendezzük
a következőképpen: hová
1 2 3 4 5
nnaho n
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
A nyelő az a pont lesz, ahol a „honnan” sor üres:
így a nyelő: 2
A forrás az a pont, ahol a „hová” oszlop üres:
így a forrás: 5
A többi helyre nulla kerül.
Példa
Adott az alábbi táblázattal egy hálózat. Határozza meg a forrást és a nyelőt, valamint az azokat elválasztó minimális kapacitású vágást! Adja meg a vágásbeli éleket, a vágás kapacitását,
valamint írja fel a feladat párjának (maximális folyam) optimális megoldását is!
honnan 1 3 3 3 4 4 5 5 5 5
hova 2 1 2 4 1 2 1 2 3 4
kapacitás 20 4 3 14 13 10 6 3 22 6
A feladat megoldásának első lépése, hogy a fenti táblázatot egy új táblázatba rendezzük
a következőképpen: hová
1 2 3 4 5
nnaho n
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
A táblázat másik ábrázolási módja, ha egy hálózatot rajzolunk fel:
2
1
5
3
4
20
6
4
22 3
6 10
13
14 3
nyelő
-5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
Példa
hová
1 2 3 4 5
nnaho n
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
2
1
5
3
4
20
6
4
22 3
6 10
13
14 3
nyelő
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
A feladat megoldása során hasznunkra fog válni az úgynevezett címkézési technikát:
a forrás száma fölé „-s”-et írunk. A felírásból s jelöli, hogy az a forrás, a
„-” pedig a címke, ami mindössze azt jelenti, hogy onnan még nem vizsgáltuk meg, hová tudunk továbbmenni.
Még véletlenül se gondolja senki, hogy az előjel lenne!
Ezt követően megnézzük, innen hová tudunk továbbmenni (ahol a sorban pozitív érték van, és még nincs címkézve).
Most ez az 1, 2, 3 és 4 csúcspont, így feléjük a „-5” kerül, a „-s” „+s”-re vált.
-s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 5 3 22 6
Példa
2
1
5
3
4
20
6
4
22 3
6 10
13
14 3
nyelő -5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6 -5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
Mivel eljutottunk a nyelőhöz, ezért visszakereshetjük az útvonalat:
5 2 A sor végén a nyelő áll.
A címke alapján meghatározzuk, hogy oda melyik csúcsból jutottunk.
Ezt addig folytatjuk, míg a forráshoz (s) nem érünk.
-5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
Példa
2
1
5
3
4
20
6
4
22 3
6 10
13
14 3
nyelő
5 2
A következő lépésben az oda utat karikázzuk, a vissza utat keretezzük.
Bevezetünk egy d értéket, mely a karikázottak közül a legkisebb. Így most d=3.
Ezt a karikázottakból kivonjuk, a keretezettekhez pedig hozzáadjuk.
Ezért a következő
táblázatunk: 1 2 3 4 5
1 20 0 0 0
2 0 0 0 3
3 4 3 14 0
4 13 10 0 0 5 6 0 22 6
Ez a hálózatban azt jelenti, hogy megtaláltuk az 5-2 útvonalat, melyen 3 a legkisebb kapacitás. Ennyivel csökken az útvonal minden szakaszán az érték.
Példa
2
1
5
3
4
20
6
4
22 6
10
13
14 3
nyelő
1 2 3 4 5
1 20 0 0 0
2 0 0 0 3
3 4 3 14 0
4 13 10 0 0 5 5 0 22 6
1 2 3 4 5
1 20 0 0 0
2 0 0 0 3
3 4 3 14 0
4 13 10 0 0 5 6 0 22 6
Ismét címkézünk.
-1 -5 -5 +s-s -5+5
Mivel eljutottunk a nyelőhöz, felírhatjuk, hogy milyen útvonalon történt:
2 5 1
Az odavezető utat karikázzuk, a visszafelé vezető utat keretezzük és meghatározzuk d-t, mint a karikázottak minimumát:
d=6
1 2 3 4 5
1 14 0 0 6
2 6 0 0 3
3 4 3 14 0
4 13 10 0 0 5 0 0 22 6
Felírjuk az új táblázatot (karikázottakból kivonunk d-t, keretezettekhez hozzáadunk d-t):
Ez itt:
14
-s
1 2 3 4 5
1 14 0 0 6
2 6 0 0 3
3 4 3 14 0
4 13 10 0 0 5 0 0 22 6
Példa
2
1
5
3
6 4
4
22 10
13
14 3
nyelő
1 2 3 4 5
1 14 0 0 6
2 6 0 0 3
3 4 3 14 0
4 13 10 0 0 5 0 0 22 6
14
Addig folytatjuk az algoritmust, amíg találunk utat a forrás és nyelő között.
+5
-3 -3 -5 -5 +s
Van út, mely a következő:
5 3 2
d=3
19
1 2 3 4 5
1 14 0 0 5
2 6 0 0 3
3 4 3 14 0
4 13 10 0 0 5 0 0 22 6
+5 +s
19
Példa
2
1
5
3
6 4
4
10
13
14
nyelő
14
-3 -3 -5
Van út, mely a következő:
5 3 2
d=3
1 2 3 4 5
1 14 0 0 6
2 6 3 0 3
3 4 0 14 3
4 13 10 0 0 5 0 0 19 6
+s-s -5 -5 -3 -1+3 +5
Van út:
1 2 5 3
d=4 10
15
Példa
15
1 2 3 4 5
1 14 0 0 6
2 6 3 0 3
3 4 0 14 3
4 13 10 0 0 5 0 0 19 6
+5 1 2 3 4 5 +3
1 14 0 0 5
2 5 0 0 3
3 4 3 14 0
4 13 10 0 0 5 0 0 22 6
+5 +s
2
1
5
3
6 4
10
13
14
nyelő -3 -3 -5
Van út, mely a következő:
5 3 2
d=3
-5 +s -1
Van út:
1 2 5 3
d=4 10
1 2 3 4 5
1 10 4 0 6
2 10 3 0 3
3 0 0 14 7
4 13 10 0 0 5 0 0 15 6
-5 -5 -s+s +5 +5 -4 -4
Van út: 5 4 2
d=6
4
+5 +s +5
4
Példa
15
2
1
5
3
4
13
14
nyelő
10
1 2 3 4 5
1 10 4 0 6
2 10 3 0 3
3 0 0 14 7
4 13 10 0 0 5 0 0 15 6
-4 -4
Van út: 5 4 2
d=6
1 2 3 4 5
1 10 4 0 6
2 10 3 6 3
3 0 0 14 7
4 13 4 0 6
5 0 0 15 0 +3 -5 +s-s +5 -3 -4 -4
Van út:
5 3 4 2
d=4
10 11
Van út:
5 3 4 2 d=4
+5 +s
10 11
Példa
2
1
5
3
4 nyelő 13
1 2
5 3 4
1 10
1 2 3 4 5
1 10 4 0 6
2 10 3 6 3
3 0 0 14 7
4 13 4 0 6
5 0 0 15 0 +3 -4 -4
1 2 3 4 5
1 10 4 0 6
2 10 3 10 3 3 0 0 10 11
4 13 0 4 6
5 0 0 11 0 -1 +5-5 -3 +s-s
+4 +3
-4
Van út:
d=10
3
Van út:
5 3 4 2 d=4
+s +3 +5
Példa
2
1
5
3
4 nyelő
1 2
5 3 4
1
1 2 3 4 5
1 10 4 0 6
2 10 3 6 3
3 0 0 14 7
4 13 4 0 6
5 0 0 15 0 +3 -4 -4
Van út:
5 3 4 2 d=4
1 2 3 4 5
1 10 4 0 6
2 10 3 10 3 3 0 0 10 11
4 13 0 4 6
5 0 0 11 0 -1 +5 +s +4
Van út:
d=10
3
1 2 3 4 5
1 0 4 10 6 2 20 3 10 3
3 0 0 0 21
4 3 0 14 6
5 0 0 1 0
-5 +s-s
+5 Nincs út, ami azt jelenti, hogy ez az utolsó táblánk.
Elkészítjük az S és T halmazokat:
S-ben azok a csomópontok lesznek, melyek kaptak címkét: S={3,5}
T-ben amelyek nem: T={1,2,4}
T S
Példa
Utolsó tábla:
Első tábla
A feladat kérdéseinek megválaszolásához szükségünk lesz az eredeti táblázatra és az ebből felírt első táblára, valamint a lépések során meghatározott d értékekre és az utolsó táblára.
Ezeket gyűjtjük össze elsőként:
+5 +s
1 2 3 4 5
1 0 4 10 6 2 20 3 10 3
3 0 0 0 21
4 3 0 14 6
5 0 0 1 0
honnan 1 3 3 3 4 4 5 5 5 5
hova 2 1 2 4 1 2 1 2 3 4
kapacitás 20 4 3 14 13 10 6 3 22 6
-5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
d=3, d=6, d=3, d=4, d=6, d=4, d=10
A vágásbeli élek meghatározásához az S és T halmazokra lesz szükségünk:
S={3,5} – utolsó táblában címkézett
T={1,2,4} – utolsó táblában nem címkézett A táblázatban meg kell keresnünk, mely élek indulnak S-ből és mutatnak T-be, és mennyi ezek kapacitása:
3→1 (4), 3 →2 (3), 3→4 (14), 5 →1 (6), 5 →2 (3), 5 →4 (6)
Ezek tehát a vágásbeli élek.
A vágás kapacitása a vágásbeli élek
kapacitásainak összege:
4+3+14+6+3+6=36.
Példa
Utolsó tábla:
Első tábla
A feladat kérdéseinek megválaszolásához szükségünk lesz az eredeti táblázatra és az ebből felírt első táblára, valamint a lépések során meghatározott d értékekre és az utolsó táblára.
Ezeket gyűjtjük össze elsőként:
+5 +s
1 2 3 4 5
1 0 4 10 6 2 20 3 10 3
3 0 0 0 21
4 3 0 14 6
5 0 0 1 0
honnan 1 3 3 3 4 4 5 5 5 5
hova 2 1 2 4 1 2 1 2 3 4
kapacitás 20 4 3 14 13 10 6 3 22 6
-5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
d=3, d=6, d=3, d=4, d=6, d=4, d=10
A feladat duálisa, azaz a maximális folyam kiszámítása úgy történik, hogy az első táblából kivonjuk az utolsót:
1 2 3 4 5
1 20-0 0-4 0-10 0-6 2 0-20 0-3 0-10 0-3 3 4-0 3-0 14-0 0-21 4 13-3 10-0 0-14 0-6 5 6-0 3-0 22-1 6-0
1 2 3 4 5 1 20 -4 -10 -6 2 -20 -3 -10 -3 3 4 3 14 -21 4 10 10 -14 -6 5 6 3 21 6
Példa
Utolsó tábla:
Első tábla
A feladat kérdéseinek megválaszolásához szükségünk lesz az eredeti táblázatra és az ebből felírt első táblára, valamint a lépések során meghatározott d értékekre és az utolsó táblára.
Ezeket gyűjtjük össze elsőként:
+5 +s
1 2 3 4 5
1 0 4 10 6 2 20 3 10 3
3 0 0 0 21
4 3 0 14 6
5 0 0 1 0
honnan 1 3 3 3 4 4 5 5 5 5
hova 2 1 2 4 1 2 1 2 3 4
kapacitás 20 4 3 14 13 10 6 3 22 6
-5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
d=3, d=6, d=3, d=4, d=6, d=4, d=10
A feladat duálisa, azaz a maximális folyam kiszámítása úgy történik, hogy az első táblából kivonjuk az utolsót:
A táblázatban a pozitív értékek azt jelentik, hogy például az első és második csúcs
között a kapacitásból felhasznált érték 20.
A táblázat antiszimmetrikus, a negatív értékek jelentése, hogy „visszafelé”
mekkora a folyam kapacitása.
1 2 3 4 5 1 20 -4 -10 -6 2 -20 -3 -10 -3 3 4 3 14 -21 4 10 10 -14 -6 5 6 3 21 6
Példa
Utolsó tábla:
Első tábla
A feladat kérdéseinek megválaszolásához szükségünk lesz az eredeti táblázatra és az ebből felírt első táblára, valamint a lépések során meghatározott d értékekre és az utolsó táblára.
Ezeket gyűjtjük össze elsőként:
+5 +s
1 2 3 4 5
1 0 4 10 6 2 20 3 10 3
3 0 0 0 21
4 3 0 14 6
5 0 0 1 0
honnan 1 3 3 3 4 4 5 5 5 5
hova 2 1 2 4 1 2 1 2 3 4
kapacitás 20 4 3 14 13 10 6 3 22 6
-5 -5 -5 -5 +s
1 2 3 4 5
1 20 0 0 0
2 0 0 0 0
3 4 3 14 0
4 13 10 0 0 5 6 3 22 6
d=3, d=6, d=3, d=4, d=6, d=4, d=10
A feladat duálisa, azaz a maximális folyam kiszámítása úgy történik, hogy az első táblából kivonjuk az utolsót:
1 2 3 4 5 1 20 -4 -10 -6 0 2 -20 -3 -10 -3 -36 3 4 3 14 -21 0 4 10 10 -14 -6 0 5 6 3 21 6 36
0 36 0 0 -36
Ha a sorokban és oszlopokban összegezzük az értékeket, megkapjuk, hogy az adott csúcson mekkora mennyiség megy tovább.
Itt is megkapjuk a 36 értéket, mint a
minimális vágás esetén. (Ez a d-k összege is)
Megjegyzés
Természetesen a feladat megoldásához a táblázatok számítása elegendő, azokat hálózatként ábrázolni nem szükséges. Az mindössze arra szolgált, hogy jobban el tudjuk képzelni, hogy miről szól a feladat. Nagyobb hálózat egyébként sem lenne átlátható.
A feladat megoldása során a végrehajtandó teendők a következők:
1. az induló tábla felírása 2. címkézés
3. a forrástól a nyelőhöz vezető út meghatározása 4. d értékének meghatározása
5. új tábla kiszámítása
6. 2-5. ismétlése, amíg találunk utat a forrás és a nyelő között
7. amikor már nem találunk utat, S és T felírása (címkézett és címkézetlen)
8. az eredeti táblázatból megkeresni, hogy mely élek vezetnek közvetlenül S és T között. Ezek lesznek a vágásbeli élek.
9. A vágás kapacitásának kiszámítása: vágásbeli élek kapacitásainak összege.
10. A maximális folyam felírása: az első és utolsó tábla különbségének meghatározása
11. A maximális folyam értékének meghatározása: a „különbség tábla” sorainak és oszlopainak összegeit kiszámolni.
Ugyanezt az értéket kell adnia a számolás során kapott d-k összegének is.