Kokonaislukukapasiteetti Seuraus 10.2.2. JosN on siirtoverkko, jonka kapasiteettifunktion α arvot ovat kokonaislukuja, niin silloinn:llä on olemassa sellainen maksimivirtausf, ettäf(e) on kokonaisluku aina kune E N. Todistus... 1 / 30 Max-Flow Min-Cut Lauseen 10.2.3. todistuksen perusteella: Lause 10.2.4. (Max-Flow Min-Cut) Maksimivirtauksenf nettovirtaus = Minimi-irrotuksen[S] kapasiteetti. Eli val(f) = α[s]. 2 / 30 1
Maksimivirtausalgoritmi 3 / 30 Algoritmi maksimivirtaukselle Lause 10.2.3. (Ford Fulkerson 1955) Virtaus f on siirtoverkon N = (D, s, r, α) maksimivirtaus N ei sisällä virtauksenf lisäyspolkuja. Yo. tulos antaa algoritmin maksimivirtauksen löytämiseen: Etsimällä virtauksenf-lisäyspolkuja ja muokkaamalla virtausta näillä poluilla pystytään maksimivirtaus löytämään äärellisessä määrässä askelia. Edellyksenä on, että kaikki kapasiteetit olivat rationaalisia. Jos kapasiteeteissa esiintyi irrationaalisia lukuja alkuperäinen algoritmi voi tarvita äärettömän määrän askelia. Edmonds ja Karp paransivat algoritmia niin, että askelia tarvitaan äärellinen määrä ja askelien lukumäärä oli lineaarinen funktio lausekkeesta V N 2 E N. 4 / 30 Algoritmin kuvaus Pisteen tarkastaminen (scan): Kaikkien pisteen naapureiden tutkiminen. N = (D,s,r,α) siirtoverkko Maksimivirtausalgoritmi 1. Merkitään lähdes :llä 2. Olkoonf(e) = 0 kaikillae E N. 3. Etsitään merkitty, mutta tarkastamaton pisteu(alussau = s). a) Aina kunuv E N jav on merkitsemätön, jaf(uv) < α(uv) (eliuv ei ole kyllästetty) merkitään pistev merkinnälläu + (pisteestäupäästään pisteeseenve N :n viivalla). b) Aina kunwu E N jaw on merkitsemätön jaf(wu) > 0, merkitäänwmerkinnälläu (u:sta mennään pisteeseenw joukone N viivan käänteisviivalla) 5 / 30 2
Algoritmin kuvaus jatkoa 4. Jos nielur on merkitty, lopetetaan merkintä. Silloin on löytynytf-lisäyspolku. Siirrytään merkintöjen avulla takaisin nielustarlähteeseens. Käytetty suuntaamaton polkup : s r on f-lisäyspolku. Lasketaanǫ(P) polulle ja muutetaan virtausta seuraavasti: Aina kun viiva e etenevä P :ssä muutetaan f(e) f(e) + ǫ(p):ksi. Aina kun viiva e on perääntyvä P :ssä muutetaan f(e) f(e) ǫ(p):ksi. Kun kaikkip :n viivat on käyty läpi, poistetaan kaikki muut lisätyistä pisteiden merkinnöistä paitsi lähteen merkintä. Palataan kohtaan3. 5. Jos nieluar ei ole merkitty ja a) kaikki merkityt pisteet on tarkastettu, niin maksimivirtaus on löytynyt b) jos kaikkia merkittyjä pisteitä ei ole tarkastettu niin palataan kohtaan 3. 6 / 30 Esimerkki Esimerkki 10.2.4. Etsitään allaolevan siirtoverkon maksimivirtaus. 7 / 30 3
Ratkaisu Ratk. Merkitäänssymbolilla ja merkitään virtaukset0:ksi. Tarkastetaans: Merkitään pisteeta,b,cs + :lla Tarkastetaana: Merkitäända + :lla (e ei saa merkintääa, koska viivassaea ei ole virtausta.) Tarkastetaanb: Merkitääneb + :lla Tarkastetaanc: Kaikki naapurit jo merkitty. Tarkastetaand: merkitään nielurd + :lla. 8 / 30 Ratkaisu jatkoa Nielu on saavutettu, siirrytään merkintöjen avulla nielusta lähteeseen. Löytyy polkup 1 : (sa)(ad)(dr) 9 / 30 4
Ratkaisu jatkoa 2 ǫ(p 1 ) = min{6 0,4 0,15 0} = 4 Muutetaan virtausta seuraavasti: f(sa) = f(ad) = f(dr) = 4, muut arvot pysyvät samoina. Poistetaan muut merkinnät paitsi ja etsitään uusi lisäyspolku: 10 / 30 Ratkaisu jatkoa 3 Tarkastetaans: Merkitään pisteeta,b,cs + :lla Tarkastetaana:ad on kyllästetty, joten sitä ei merkitäa + :lla Tarkastetaanb: Merkitäänd,eb + :lla Tarkastetaanc: Kaikki naapurit jo merkitty. Tarkastetaand: merkitään nielurd + :lla. 11 / 30 5
Ratkaisu 4 Löytyy polkup 2 : (sb)(bd)(dr) ǫ(p 2 ) = 5 Muutetaan virtausta seuraavasti: f(sb) = f(bd) = 5,f(dr) = 4+5 = 9, muut arvot pysyvät samoina. Poistetaan muut merkinnät paitsi ja etsitään uusi lisäyspolku: 12 / 30 Ratkaisu 5 Tarkastetaans: Merkitään pisteeta,b,cs + :lla Tarkastetaana: Tarkastetaanb: Merkitääneb + :lla Tarkastetaanc: Kaikki naapurit jo merkitty. Tarkastetaane: merkitään nielure + :lla. 13 / 30 6
Ratkaisu 6 Löytyy lisäyspolkup 3 : (sb)(be)(er) ǫ(p 3 ) = 4 Muutetaan virtausta seuraavasti: Lisätään viivojensb,be jaer virtausta4:llä yksiköllä ja pidetään muut arvot samoina. Poistetaan muut merkinnät paitsi ja etsitään uusi lisäyspolku: 14 / 30 Ratkaisu 7 Tarkastetaans: Merkitään pisteeta,c symbolillas +. Tarkastetaana: Tarkastetaanc: Merkitäänec + :lla Tarkastetaane: Merkitään nielure + :lla. 15 / 30 7
Ratkaisu 8 Löytyy lisäyspolkup 4 : (sc)(ce)(er) ǫ(p 3 ) = 2 Muutetaan virtausta seuraavasti: Lisätään viivojensc,ce jaer virtausta2:llä yksiköllä ja pidetään muut arvot samoina. Poistetaan muut merkinnät paitsi ja etsitään uusi lisäyspolku: 16 / 30 Ratkaisu 9 Tarkastetaans: Merkitään pisteeta,cs + :lla Tarkastetaana: Tarkastetaanb: Tarkastetaanc: Merkitäänec + :lla Tarkastetaane: Ei merkintöjä. Merkintöjä ei voida tehdä enempää. kaikki pisteet on skannattu. Maksimivirtaus on löytynyt. 17 / 30 8
Nettovirtaus Maksimivirtauksen nettovirtausval(f) = f(s) = 4+9+2 = 15 18 / 30 Maksimivirtauksen tarkistus Max-Flow Min-cut maksimivirtauksellef on löydettävä minimi-irrotuss, jolleα[s] = val(f) = 15. Lause 10.2.2 irrotuksen viivat ovat kyllästettyjä. Minimi-irrotus on myös minimaalinen irrotus. 19 / 30 9
Tarkistus jatkoa Kyllästetyt viivat: sb, be,bd,ad, er 20 / 30 Tarkistus jatkoa 2 Minimi-irrotus: ad,bd,er 21 / 30 10
Tarkistus jatkoa 3 SilloinS = {s,b,a,e,c} jaα[s] = α(ad)+α(bd)+α(ed) = 4+5+6 = 15. 22 / 30 Hall ja Max-flow Min-cut 23 / 30 Max-Flow Min-Cut Lause 10.2.4. (Max-Flow Min-Cut) Maksimivirtauksenf nettovirtaus = Minimi-irrotuksen[S] kapasiteetti. Max-flow, Min-cut on voimakas tulos. Sen avulla voidaan mm. osoittaa Hall s Matching Theorem. (X, Y) kaksijakoinen graafi G toteuttaa naapuruusehdon (Hall s condition), jos N G (S) S aina kuns X. 24 / 30 11
Naapuruusehto ja M-sovitus Lause 4.3.1. (Hall s Matching Theorem) OlkoonG(X,Y)-kaksijakoinen graafi. GraafillaGon joukonx sovittava sovitusm G toteuttaa naapuruusehdon. Todistus. OlkoonG = (V G,E G )(X,Y)-kaksijakoinen graafi X = k jax = {x 1,x 2...x k }. OlkoonN = (D,s,r,α) siirtoverkko, missäs,r / V G D = (V G {s,r},e D ), missä E D = {sx x X} {yr y Y} {xy x X,y Y,xy E G }. Olkoon lisäksiα(sx) = 1,α(yr) = 1 jaα(xy) = X +1aina kunx X jay Y. 25 / 30 Todistus jatkoa G.ssä on joukonx sovittava sovitusm. D sisältää suunnatut poluts x i y i r, missäx i y i M aina kuni = 1,2,...k. Sovituksen määritelmän perusteellay i y j, kuni j. Siirtoverkon maksimivirtauksen nettovirtaus onk. 26 / 30 12
Todistus jatkoa 2 Toisaalta: N:n maksimivirtauksenf nettovirtaus onk Jokaista pistettä x i vastaa pistey i Y, jollex i y i E G jay i y j, kuni j. M = {x i y i i = 1,2,...,k} on pistejoukonx sovittava sovitus. 27 / 30 Todistus jatkoa 3 On saatu G:ssä on joukonx sovittava sovitusm N:n maksimivirtauksenf nettovirtaus onk. Lause 10.2.4.: N:n maksimivirtauksenf nettovirtaus onk. SiirtoverkonN minimi-irrotuksen kapasiteettiα[s] = k. Lauseen todistamiseksi riittää osoittaa: SiirtoverkonN minimi-irrotuksen kapasiteettiα[s] = k. N G (X ) X aina kun pistejoukkox X. 28 / 30 13
Todistus jatkoa 4 Oletus: SiirtoverkonN minimi-irrotuksen kapasiteettiα[s] = k. Väite: N G (X ) X aina kun pistejoukkox X Vastaoletus: N G (X ) < X... 29 / 30 Todistus jatkoa 5 Oletus: N G (X ) X aina kun pistejoukkox X Väite:Siirtoverkon N minimi-irrotuksen kapasiteetti α[s] = k. Koska niin α[s] k. α([{s}]) = e=sx,x X α(e) = X = k, Vastaoletus:α[S] < k jollakin irrotuksella[s].... 30 / 30 14