Gráfok 4. Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék 2018.12.04. Gráfok 4. Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék szlavi@ludens.elte.hu http://people.inf.elte.hu/szlavi 2000 Gráfok 4
Tartalom 0 Bevezetés 1 Hagyományos gráfábrázolások 2 A Gráftípus 2018.12.04. Tartalom 0 Bevezetés 1 Hagyományos gráfábrázolások 2 A Gráftípus 2.1 Specifikáció 2.2 Megvalósítás 3 A gráfok bejárásának módszerei 3.1 Szélességi 3.2 Mélységi 4 A gráfbejárások alkalmazásai 4.1 Összefüggő-e a gráf? 4.2 A gráf komponensei 4.3 Útkeresés két pont között 2018.12.04. Gráfok 4 Gráfok 4
2018.12.04. Tartalom 4.4 Két pont közötti legrövidebb út 4.5 A legrövidebb út súlyozott gráf esetén 4.6 Páros-e a gráf? 5 A feszítőfák 5.0 Fogalmak 5.1 Feszítőfák generálása 5.2 Minimális feszítőfák generálása 6 Az elérési és a távolsági mátrix meghatározása 6.1 Összefüggőség 6.2 Távolságmátrix súlyozott gráfokra 7 Hálózati folyamok 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák 5.0 Fogalmak Az algoritmusok elé: 2018.12.04. 5 A feszítőfák 5.0 Fogalmak Feszítőfa – a G részgráfja: maximális (G összes pont- ját tartalmazza), és fa (összefüggő, körmentes). Minimális költségű feszítőfa – egy súlyozott G gráf feszítőfája, amelynek a lehető legkisebb az élek össz- súlya (=hossza, költsége). Az algoritmusok elé: Csak összefüggő gráfnak van feszítőfája. Akármelyik bejárásra építhető (hisz mindkettő egy feszítőfát épít föl). Legkézenfekvőbb változat, amelyikben adminiszt- ráljuk az éleket: (Honnan(i),i). A Honnan-nal ábrázolható egy fa, hiszen a fa minden elemét egy elem előzhet meg (kivéve a gyökér elemet, amelyet 0). 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) Mivel itt egyszerre két gráffal manipulálunk, ezért a paraméterezés elkerülhetetlen. Föltesszük: TPont=0..???. (Ugyanígy teszünk az TÉl-lel is.) nem jelent meg-szorítást, l. Pont-függvényt 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) 5.1 Feszítőfa generálása Legfelsőbb szintű algoritmus: Változó Szín:Tömb(TPont:(Fehér,Szürke,Fekete)) Eljárás FeszítőFa(Konstans G:Gráf, x[kezdőpont]:TPont, Változó F[feszítőfa]:Gráf): Üres(F); F.pont:=G.pont [a G izolált pontjai] Szín(1..PontSzám(G)):=Fehér Bejárás(G,x,F) Eljárás vége. Az F.pont és a G.pont egy röpke jelölés. Valójában az F.pont:= G.pont értékadás egy ciklus, amelyben a G pontjaiból egy izolált pontokból álló gráfot hozunk létre az F-ben. 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) Kiindulunk a mélységi bejárás rekurzív változatából: Dölt betűkkel jelöltük a „lényegi” újdon-ságokat. Eljárás Bejárás(Konstans G:Gráf, x[kezdőpont]:TPont, Változó F[feszítőfa]:Gráf): pont:=x; Szín(pont):=Szürke Ciklus i=1-től PontSzám(G)-ig Ha VanÉl?(G,pont,i) és Szín(i)=Fehér akkor Összeköt(F,pont,i); Bejárás(G,i,F) Elágazás vége Ciklus vége Szín(pont):=Fekete Eljárás vége. 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) 5.2 Minimális költségű feszítőfa generálása Kruskal-módszere – (1-pontú) fák egyesítés-sorozata egyetlen fává... Melyik pont melyik kezdőpontú fához tartozik Változó fa:Tömb(TPont:TPont) Eljárás MinimálisFeszítőfa(Konstans G:Gráf, Változó F:Gráf): Üres(F) Ciklus i=1-től PontSzám(G)-ig fa(i):=i; BeillesztPont(F,i) Ciklus vége ÉlekRendezéseHosszSzerint(G) Ciklus e=1-től ÉlSzám(G)-ig VégPontok(G,e,i,j) Ha fa(i)fa(j) akkor Összeköt(F,i,j) Egyesít(i,j) Ciklus vége Eljárás vége. 1-pontú fák Ha nem úgy ábrázoltuk a gráfot, akkor az élmátrixot is előállítjuk. Világos, h. az F-beli élbővítős ciklus hamarabb is befejezhető. Ha már PontSzám(G)-1 ízben pontokat összekötöttünk, azaz ennyi élet létrehoztunk F-ben, akkor a további már nem lesz, hiszen a fának csak ennyi éle lehet. 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) A fák egyesítése – a pontok újra sorszámozása. Eljárás Egyesít(Konstans i,j:TPont): Változó l,k:Egész l:=fa(j) Ciklus k=1-től PontSzám(G)-ig Ha fa(k)=l akkor fa(k):=fa(i) Ciklus vége Eljárás vége. Eljárás MinimálisFeszítőfa(Konstans G:Gráf, Változó F:Gráf): Üres(F) Ciklus i=1-től PontSzám(G)-ig fa(i):=i; Beilleszt(F,i) Ciklus vége ÉlekRendezéseHosszSzerint(G) Ciklus e=1-től ÉlSzám(G)-ig VégPontok(G,e,i,j) Ha fa(i)fa(j) akkor Összeköt(F,i,j) Egyesít(i,j) Ciklus vége Eljárás vége. Hatékonyság: Egyesít – O(N) MinimálisFeszítőFa – O(N)+O(É)+O(É*N)= O(É*N) ad MinimálisFeszítőFa hatékonysága: tagok: inicializálás + rendezés (legkellemesebb ábrázolás mellett) + ciklus (Egyesítéssel) „legkellemesebb” ábrázolás mellett megy a számlálva szétosztó rendezés (l. ../PrM1felev/PrMea5.htm-ban 1.3.2. fejezetben) 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) Eljárás MinimálisFeszítőfa(Konstans G:Gráf, Változó F:Gráf): Üres(F) Ciklus i=1-től PontSzám(G)-ig fa(i):=i; Beilleszt(F,i) Ciklus vége ÉlekRendezéseHosszSzerint(G) Ciklus e=1-től ÉlSzám(G)-ig VégPontok(G,e,i,j) Ha fa(i)fa(j) akkor Összeköt(F,i,j) Egyesít(i,j) Ciklus vége Eljárás vége. Példa: a b c d h i g f e 11 4 8 7 2 1 6 10 9 14 A rendezett élsorozat: 1. hg 1 2. ic 2 3. gf 2 4. ab 4 5. cf 4 6. ig 6 7. cd 7 8. hi 7 9. ah 8 10. bc 8 11. de 9 12. ef 10 13. bh 11 14. df 14 8 7 b c d 4 9 2 i 4 a 11 14 e 7 6 10 8 h g f 1 2 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) Prim módszere – Pontok = {feszítőfabeliek} {azon kívüliek}. Kapcsoljuk a feszítőfához a legrövidebb éllel kap- csolható pontot (a „faság” megtartásával). Eredmény: feszítőfa=(Honnan(i),i) i=... (Ez is tipikus mohó-algoritmus.) Def: Egy „külső” pont távolsága a feszítőfától: azon legrövidebb él hossza, amely az adott pontot a feszítőfa valamely pontjával összekapcsolja. Azon pontok távolsága 0, amelyek már a feszí- tőfához tartoznak. 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) Algoritmus: A Fa Eljárás MinimálisFeszítőfa(Konstans G:Gráf, Változó Honnan:Tömb(TPont:TPont)): Táv(0..PontSzám(G)):=+ Honnan(0..PontSzám(G)):=0 [0=fiktív pont] pont:=1; Táv(pont):=0; Honnan(pont):=pont Ciklus i=1-től PontSzám(G)-1-ig [az összes pont kell] ip:=ElsőSzomszéd(G,pont) szDb:=SzomszédPontokSzáma(G,pont) Ciklus j=1-től szDb-1-ig Ha Táv(ip)>0 és ÉlHossz(G,pont,ip)<Táv(ip) akkor Honnan(ip):=pont Táv(ip):=ÉlHossz(G,pont,ip) ip:=KövetkezőSzomszéd(G,pont,ip) Ciklus vége Ha Táv(ip)>0 és ÉlHossz(G,pont,ip)<Táv(ip) akkor Honnan(ip):=pont Táv(ip):=ÉlHossz(G,pont,ip) pont:=MinimálisTávolságú(G) Ciklus vége Eljárás vége. a pontok ponttól vett távolsága Közelebb van Nincs még a feszítőfában A pont ip utáni szomszédja Vegyük észre: a ciklusban a Táv tömbnek csak az „új” pont szomszédjai indexű pontok módosulnak, e közben a MinimálisTávolságú-ban az összes pont közül történik a választás, ez éppen így jó! pont = továbblépés a legközelebbiből; följegyzés 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) Függvény MinimálisTávolságú(Konstans G:Gráf):TPont Változó pont:TPont pont:=0 [!] Ciklus i=1-től PontSzám(G)-ig Ha Táv(i)>0 és Táv(i)<Táv(pont) akkor pont:=i Ciklus vége Táv(pont):=0 MinimálisTávolságú:=pont Eljárás vége. Most már a feszí-tőfához tartozik. Hatékonyság: MinimálisTávolságú – O(N) MinimálisFeszítőFa – O(N)+O(É)+O(N2)= O(É+N2) ad MinimálisTávolságú: Miért nem lenne jó (mindig) a pont-ot 1-től (a ciklust 2-től) indítani? Mert nem biztos (sőt), hogy az 1 pont Táv-ja pozitív, azaz hogy még nincs a fában. ad MinimálisFeszítőFa hatékonysága: tagok: inicializálás + kettős ciklus (végső soron csak az éleket járja be) +MinimálisTávolságú ad Össz-hatékonyság: A négyzetes tag alkalmas adatszerkezettel (kupaccal) csökkenthető: Nlog(N)-re. 2018.12.04. Gráfok 4 Gráfok 4
5 A feszítőfák (folytatás) 2018.12.04. 5 A feszítőfák (folytatás) Példa: a b c d h i g f e 11 4 8 7 2 1 6 10 9 14 8 7 b c d 4 9 2 i 4 e a 11 14 7 6 10 8 h g f 1 2 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása 6.1 Összefüggő-e a gráf? Naiv válasz: Valahogy bejárjuk, majd a bejárás során kapott halmaz, ha megegyezik a pontok halmazával, akkor ÖSSZEFÜGGŐ! Célok: A gráf globális vizsgálata Elérési mátrix (E) generálása Újabb naiv megoldás: A baj: O(n4) műveletigény. Ciklus p=Min’TPont-tól Max’TPont-ig Ciklus q=Min’TPont-tól Max’TPont-ig E(p,q):=VanÚt?(p,q) Ciklus vége Ciklus vége 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) A naiv folytatása: szélességi bejárás Szélességi bejárás algoritmusa x kezdőpontból kiindulva… … E:=Hamis-mátrix Ciklus x=Min’TPont-tól Max’TPont-ig … Ha nem Eleme?(spont) akkor Sorba(spont) Halmazba(spont) E(x,spont):=Igaz [ez az újdonság] Elágazás vége … Ciklus vége … Most már „csak” O(n3) a műveletigény 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) A) E meghatározása az A1..An-1 kiszámításával Alapgondolat: elérhető-e legfeljebb 2 lépésben i-ből j, ha közbeiktatunk egy tetszőleges pontot? Alapösszefüggés: E(2)ij:=Aij Ú (Úp=1..n Aip Ù Apj) globálisan: E(2):= E(1) Ú (AÙE(1)). Állítás: E:=E(n-1)=E(n-2) Ú (AÙE(n-2)), ahol n=a pontok száma. 2-lépéses elérési mátrix Pontosan 1 lépést téve... Pontosan 2 lépést téve... 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) Algoritmus: Mátrix mint típuskonstrukció. Típus Mátrix(TElem)=Tömb(TPont,TPont:TElem) Eljárás ElérésiMátrix(Konstans A:Mátrix(Logikai), Változó E:Mátrix(Logikai)): E:=A Ciklus k=1-től PontSzám-1-ig Ciklus i=1-től PontSzám-ig Ciklus j=1-től PontSzám-ig Ciklus p=1-től PontSzám-ig E(i,j):=E(i,j) vagy (A(i,p) és E(p,j)) Ciklus vége Ciklus vége Ciklus vége Ciklus vége Eljárás vége E:=E AE O(n3) Vegyük észre, hogy a hatékonyság léptéke most egy mátrix-művelet, s nem egy „makroszkopikus” gráf-művelet. Azaz ha találunk olyan mátrix-alapú algoritmust, ami O(n3) műveletigényű, akkor az biztos jobb lesz, mint a bejárásos alapú. Műveletigény: O(n4) logikai műveletben mérve. 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) Javítási lehetőség: ha leghosszabb út hossza = k, akkor E(k+1)= E(k) . Megvalósítás: … Változó Előző:Mátrix(Logikai) E:=A Ciklus Előző:=E Ciklus i=1-től PontSzám-ig Ciklus j=1-től PontSzám-ig Ciklus p=1-től PontSzám-ig E(i,j):=E(i,j) vagy (A(i,p) és E(p,j)) Ciklus vége Ciklus vége Ciklus vége amíg EElőző Ciklus vége … Az azonosságvizsgálat műveletigénye: O(n2). Így az össz műveletigény: O(k*n3). 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) Újabb javítási ötlet: a mátrix-szorzás rekurzív kiszámítása: E(2k):=(E(k))2 , amíg E(2k)(E(k))2 , vagy k=1..log2(n)+1 Megvalósítás: Mátrixműveletek: ‘ÉS’, ‘VAGY’ … E:=A Ciklus i=1-től Egészrész(log2(PontSzám)+1)-ig E:=E VAGY (E ÉS E) Ciklus vége … Az össz műveletigény: O(log2(n)*n3). 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) Warshall módszere: Alapgondolata: elérhető-e (akárhány lépés- ben) i-ből j, ha közbeiktatunk egy pontot? Alap összefüggés: E(0)ij:=Aij (közvetlenül, azaz segítő pont nélkül) E(k)ij:=i-ből j elérhető-e 1..k pontokon át? Állítás: E(k)ij:=E(k-1)ij Ú (E(k-1)ik Ù E(k-1)kj) (k=1..n) Eij:=E(n)ij (vö: a korábbival) 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) Megvalósítás: Eljárás ElérésiMátrix(Konstans A:Mátrix(Logikai), Változó E:Mátrix(Logikai)): E:=A Ciklus k=1-től PontSzám-ig Ciklus i=1-től PontSzám-ig Ciklus j=1-től PontSzám-ig E(i,j):=E(i,j) vagy (E(i,k) és E(k,j)) Ciklus vége Ciklus vége Ciklus vége Eljárás vége. Az össz műveletigény: O(n3). 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) 6.2 A távolságmátrix meghatározása súlyozott gráf esetén Alapötlet: Warshall módszer+művelet-analógia x y x + y x y min(x,y) Megoldás: Eljárás ElérésiMátrix (Konstans A:Mátrix(Logikai), Változó E:Mátrix(Logikai)): E:=A Ciklus k=1-től PontSzám-ig Ciklus i=1-től PontSzám-ig Ciklus j=1-től PontSzám-ig E(i,j):=E(i,j) vagy (E(i,k) és E(k,j)) Ciklus vége Ciklus vége Ciklus vége Eljárás vége. Eljárás TávolságMátrix(Konstans A:Mátrix(Valós), Változó T:Mátrix(Valós)): T:=A Ciklus k=1-től PontSzám-ig Ciklus i=1-től PontSzám-ig Ciklus j=1-től PontSzám-ig T(i,j):=min(T(i,j),T(i,k)+T(k,j)) Ciklus vége Ciklus vége Ciklus vége Eljárás vége. 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) 6.2 A távolságmátrix meghatározása súlyozott gráf esetén Alapötlet: Warshall módszer+művelet-analógia x y x + y x y min(x,y) Megoldás: Eljárás TávolságMátrix(Konstans A:Mátrix(Valós), Változó T:Mátrix(Valós)): T:=A Ciklus k=1-től PontSzám-ig Ciklus i=1-től PontSzám-ig Ciklus j=1-től PontSzám-ig T(i,j):=min(T(i,j),T(i,k)+T(k,j)) Ciklus vége Ciklus vége Ciklus vége Eljárás vége. 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) 24 2 4 Egy példa 7 12 34 5 1 67 78 35 6 3 89 8 9 A program megengedi a hurok éleket is, ami most nincs, ezért minden pont magától vett távolsága +. Így lehetséges, hogy a „mandéneres” visszajutás jobb, mint volt az előtt. 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. Gráfok 4 Gráfok 4
6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. 6 Az elérési és a távolsági mátrix meghatározása (folytatás) 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok Alapfogalmak: 2018.12.04. 7 Hálózati folyamok Fogyasz-tó Termelő Alapfogalmak: Hálózat: súlyozott, irányított (összefüggő) gráf, amelynek van két kitüntetett s,t pontja (forrás, nyelő); és van egy C:PPR+0 kapacitás függvény (ha (p,q)E C(p,q)=0) Hálózati folyam: f:PPR függvény, amelyre igaz: Kapacitási megszorítás: (u,v)E: f(u,v)C(u,v). Ferde szimmetria: (u,v) élre f(u,v)=-f(v,u). Megmaradási szabály: (vP) f(u,v)=0 uP-re, ami nem termelő vagy fogyasztó. Ami az u-ból kifolyik a v-be, az a v-be befolyik az u-ból. A folyam nem lépheti túl a kapaci-tást. közbülső pontra: belépő= kilépő mennyiség. A „megmaradási szabályt” nevezik az elektronikában Kirhov-törvénynek. 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) Hálózati folyam nagysága: Az f folyam reziduális hálózata: az egyes éleken megmaradó, kihasználatlan kapacitásokat tartal- mazó hálózat Cf(u,v)=C(u,v)-f(u,v) kapacitással. (Tehát a Cf(u,v)=0 kapacitású élek nem tartoznak az f reziduá- lis hálózatához, viszont „visszaélek” megjelenhetnek.) Feladat: keressük azt a legnagyobb mennyiséget, amit a termelőtől a fogyasztóhoz eljuttathatunk, ha ismerjük az egyes utak kapacitását. 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) Ford és Fulkerson algoritmusa: Típus TFolyam=Tömb(TPont,TPont:Valós) Eljárás MaximálisFolyam(Konstans s,t:TPont, Változó f:TFolyam): f(1..PontSzám,1..PontSzám):=0 Ciklus amíg VanReziduálisÚt(f,s,t,Honnan) lfk:=LegkisebbFeleslegesKapacitás(f,s,t,Honnan) Folyamnövelés(f,lfk,s,t,Honnan) Ciklus vége Eljárás vége. 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) THonnan=Tömb(TPont:TPont) Eljárás VanReziduálisÚt(Konstans f:TFolyam,s,t:TPont, Változó Honnan:THonnan): Változó Szín:TSzínek Szín(1..PontSzám):=Fehér Bejárás(f,s,Honnan,Szín) VanReziduálisÚt:=(Szín(t)=Fekete) Eljárás vége. TSzínek=Tömb(TPont : (Fehér,Szürke,Fekete)) 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) Eljárás Bejárás(Konstans f:TFolyam,s:TPont, Változó Honnan:THonnan, Szín:TSzínek): Változó pont,i:TPont [Egész] pont:=s; Szín(pont):=Szürke Ciklus i=1-től PontSzám-ig Ha VanÉl?(pont,i) és Szín(i)=Fehér és ÉlHossz(pont,i)-f(pont,i)>0 vagy VanÉl?(i,pont) és Szín(i)=Fehér és 0>f(pont,i) akkor Honnan(i):=pont; Bejárás(f,i,Honnan,Szín) Ciklus vége Szín(pont):=Fekete Eljárás vége. ad „feltétel”: vagy növelhető az f (a maradék kapacitás erejéig) vagy csökkenthető a visszaáramlás (a negatív f keletkezését l. a FolyamNövelés eljárásban) 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) Eljárás LegkisebbFeleslegesKapacitás( Konstans f:TFolyam,s,t:TPont,Honnan:THonnan):Valós Változó pont:TPont; lfk,fk:Valós pont:=t; lfk:=+ Ciklus amíg ponts Elágazás f(Honnan(pont),pont)0 esetén fk:=ÉlHossz(Honnan(pont),pont)- f(Honnan(pont),pont) f(Honnan(pont),pont)<0 esetén fk:=-f(Honnan(pont),pont) Elágazás vége Ha lfk>fk akkor lfk:=fk pont:=Honnan(pont) Ciklus vége LegkisebbFeleslgegesKapacitas:=lfk Eljárás vége. 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) Eljárás Folyamnövelés( Konstans f:TFolyam,lfk:Valós, s,t:TPont, Honnan:THonnan): Változó pont:TPont pont:=t Ciklus amíg ponts f(Honnan(pont),pont):=f(Honnan(pont),pont)+lfk f(pont,Honnan(pont)):=-f(Honnan(pont),pont) pont:=Honnan(pont) Ciklus vége Eljárás vége. ad „negatív f”: a „ferde szimmetria” elvárás megtartása érdekében 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) Egy példa: 12 v1 v3 16 20 10 4 s 9 7 t 13 4 v2 v4 14 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) 12 v1 v3 16 20 10 4 s 9 7 t 13 4 v2 v4 14 Reziduális út: sv1v2v4v3t Kritikus kapacitás: 7 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) Ferde szimmetria ÉlHossz/f 12 v1 v3 16/7 20/7 10/7 4/-7 s 9 7/7 t 13 4 v2 v4 14/7 Reziduális út: sv1v2v4t Kritikus kapacitás: 10-7=3 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) ÉlHossz/f 12 v1 v3 20/7 16/7+3 10/7+3 4/-10 s 9 7/7 t 13 4/3 v2 v4 14/7+3 Reziduális út: sv1v3v2v4t Kritikus kapacitás: 4-3=1 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) ÉlHossz/f 12/1 v1 v3 20/7 16/7+3+1 10/7+3 4/-10 s 9/1 7/7 t 13 4/3+1 v2 v4 14/7+3+1 Reziduális út: sv1v3t Kritikus kapacitás: 16-(7+3+1)=5 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) ÉlHossz/f 12/1+5 v1 v3 20/7+5 16/7+3+1+5 10/7+3 4/-10 s 9/1 7/7 t 13 4/3+1 v2 v4 14/7+3+1 Reziduális út: s v2v1v3t Kritikus kapacitás: 12-(1+5)=6 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) ÉlHossz/f Ferde szimmetria 12/1+5+6 v1 v3 20/7+5+6 16/7+3+1+5 10/4 4/-10+6 s 9/1 7/7 t 13/6 4/3+1 v2 v4 14/7+3+1 Reziduális út: s v2v3t Kritikus kapacitás: 1 2018.12.04. Gráfok 4 Gráfok 4
7 Hálózati folyamok (folytatás) 2018.12.04. 7 Hálózati folyamok (folytatás) ÉlHossz/f 12/12 v1 v3 20/7+5+6+1 16/16 A végeredmény: a folyam és a folyamérték: 23 10/4 4/-4 s 9/1-1 7/7 t 13/6+1 4/4 v2 v4 14/11 2018.12.04. Gráfok 4 Gráfok 4