380 likes | 524 Views
Øvingsforelesning 9. Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad venstad@idi.ntnu.no Redigert og forelest av Gleb Sizov. Dagens tema. Øving 8: Mumien Teori Flytnettverk Terminologi Max-flow min-cut teoremet Ford-Fulkersons metode og algoritme
E N D
Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad venstad@idi.ntnu.no Redigertog forelest av Gleb Sizov
Dagens tema • Øving 8: Mumien • Teori • Flytnettverk • Terminologi • Max-flow min-cut teoremet • Ford-Fulkersons metode og algoritme • Edmond-Karps algoritme • Maksimum bipartitt matching • Spesialtilfelle av flyt • Andre algoritmer • Øving 7: Teori & Praksis
Terminologi: Flytnettverk • En graf med kapasitet på kantene • Ønsker å sende flyt fra en kildenode s (source) til en sluknode t (terminal/sink)
Flytnettverk • Eksempler • Væske som flyter gjennom et rørsystem til en destinasjon • Varer igjennom et varehus, produksjonslinjer • Informasjon gjennom et datanettverk • Strøm gjennom strømledninger
Flytnettverk • Flyt og kapasitet på kanter benevnes f/c • Flyt inn i en node = flyt ut (unntatt for s og t) • f(v, u) = - f(u, v) f(u,v) = 4 c(u,v) = 5 f(v,u) = -4c(v,u) = 0
Residual nettverk • En graf som viser hvor mye man kan øke flyten med, til man når kapasiteten på kantene • Kalles Gf = (V,Ef) for flytnettverket G = (V,E) • cf(u,v) er residualkapasiteten for en kant (u,v) • Dvs. hvor mye mer flyt kan man sende over kanten før man når kapasiteten. • (Eller: Hvor mye flyt man kan kansellere, for motsatt retning.)
Residual nettverk • cf(u,v) = c(u,v) – f(u,v) • der f(u,v) er flyten for kanten (u,v) c(u,v) = 7 f(u,v) = 3 cf(u,v) = 7 – 3 = 4 c(v,u) = 0 f(v,u) = -3 cf(v,u) = 0 – (-3) = 3
Residual nettverk • Lettere å finne flytforøkende stier i Gf enn i G • Flytforøkende sti er en sti fra s til t der alle kanter har tilgjengelig kapasitet
Residual nettverk • Lettere å finne flytforøkende stier i Gf enn i G • Flytforøkende sti er en sti fra s til t der alle kanter har tilgjengelig kapasitet
Ford-Fulkerson metoden Ford-Fulkerson-Method(G, s, t) Initialiser all flyt f til 0 så lenge det finnes en flytforøkende sti p øk flyten f langs p returner f • En generell metode for å finne maksimal flyt i et flytnettverk
Ford-Fulkerson algoritmen Ford-Fulkerson(G, s, t) sett all flyt til 0 så lenge p er en sti fra s til t i Gf cf(p) = min{ cf(u,v) : (u,v) i p } for hver (u,v) i p f[u,v] = f[u,v] + cf(p) f[v,u] = -f[u,v] p er en flytforøkende sti cf(p) er residualkapasiteten til den ”minste” kanten i p • Kjøretid O(E*| f’ |) • Der f’ er maksflyten funnet i algoritmen
Ford-Fulkerson algoritmen • Eksempelkjøring av algoritmen • Jukser litt, initialiserer ikke flyten til 0 først
Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Initialsteg | f | = 7
Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Flytforøkning | f | = 8
Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Flytforøkning | f | = 9
Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Ingen flere flytførkende stier | f | = 9 Vi har funnet maks-flyt og er ferdige
Ford-Fulkerson algoritmen • Algoritmen avhenger av hvordan man finner den flytforøkende stien p, fra s til t • Ford-Fulkerson algoritmen kjører raskt hvis maksflyt er liten, men for stor |f’| blir kjøretiden O(E*|f’|) dårlig • Hvis man bruker BFS til å finne flytforøkende sti i Gf, ender vi opp med Edmonds-Karps algoritme
Edmonds-Karps algoritme • Bruker BFS for å finne korteste flytforøkende sti i Gf, og øker flyten langs denne stien • BFS kan finne korteste vei fra s til t, ved å ha enhetslengde på kantene (unit-length) • Ellers er Edmonds-Karp slik som Ford-Fulkersons algoritme • Kjøretid O(V*E2)
Edmonds-Karps algoritme Edmonds-Karp(G, s, t) sett all flyt til 0 bruk BFS og finn korteste sti p, som går fra fra s til t i Gf cf(p) = min{ cf(u,v) : (u,v) i p } for hver (u,v) i p f[u,v] = f[u,v] + cf(p) f[v,u] = -f[u,v] p er en flytforøkende sti cf(p) er residualkapasiteten til den ”minste” kanten i p • Kjøretid O(V*E2)
Superkilde og supersluk • Hva hvis flytnettverket har flere kilder og flere sluker? • Superkilde og supersluk
Snitt i flytnettverk • Vi kan dele opp grafen i to partisjoner, ved å ta et snitt (S,T), der mengden S inneholder kilden s og T inneholder sluket t • Kan ha mange snitt på en graf
Snitt-terminologi • Flyt over et snitt: f(S,T) • Flyt fra S til T: legges til f(S,T) • Flyt fra T til S: trekkes fra f(S,T) • Kapasitet over et snitt: c(S,T) • Legger bare til kapasiteter fra S til T • Minimum-snitt (min-cut) på et flytnettverk: det snittet som har lavest kapasitet av alle snitt • Netto flyt over ethvert snitt er det samme, nemlig flyten | f |
Snitt i flytnettverk Partisjonerer flytnettverket i to deler: S = { s, u } T = { v, w, x, t } f(S,T) = 4 + 2 + 1 - 0 = 7 c(S,T) = 3 + 5 + 5 = 13 snitt1 er ikke et min-cut
Max-flow min-cut teoremet Viktig! • Anta flytnettverk G = (V,E) med kilde s og sluk t. Da er følgende utsagn ekvivalente: • f er maksimal flyt i G • Residualnettverket Gf har ingen flytforøkende sti • | f | = c(S,T) for et snitt (S,T) av G • Et slikt snitt er et min-cut av G
Max-flow min-cut teoremet • G er fylt opp med maksflyt 9 • Gf har ingen flytforøkende stier • min-cut har kapasitet 9
Max-flow min-cut teoremet • min-cut angir en flaskehals i flytnettverket • Kan ikke sende mer flyt igjennom nettverket enn det vi kan sende gjennom flaskehalsen • Kan ikke finne noen flytforøkende sti over flaskehalsen
Maksimum bipartitt matching Terminologi Hvordan finne maksimum bipartitt matching
Maksimum bipartitt matching • Hva er en bipartitt graf? • En graf der nodene kan deles opp i to mengder L og R, slik at: • Nodene i R bare har kanter til noder i L • Nodene i L bare har kanter til noder i R
Maksimum bipartitt matching • Eksempel • Jenter som skal danse med gutter, noen vil danse med mange, mens noen vil danse med bare én annen. Ikke lov til å danse med samme kjønn. Hvordan få flest mulig personer ut på dansegulvet?
Maksimum bipartitt matching • Hva er bipartitt matching? • Anta G=(V,E) er en bipartitt graf, og M er en undermengde av E, slik at for grafen G’ = (V,M) holder følgende egenskap: • For alle noder v i V, deg(v) ≤ 1 • Så hver node kan ha maks 1 nabo • Ønsker å maksimere |M| • Maksimum bipartitt matching er når |M| er størst mulig
Maksimum bipartitt matching G = (V,E) V = {a,b,c,d,e,f} M = {} |M| = 0
Maksimum bipartitt matching G = (V,E) V = {a,b,c,d,e,f} M = {(a,d), (c,b) (e,f)} |M| = 3
Maksimum bipartitt matching • Hvordan får vi til maskimum bipartitt matching? • Dvs. hvordan maksimerer vi |M| ? • Bygger på grafen litt slik at vi får ett flytnettverk • Legger til en kilde s, sluk t, retninger på kantene fra L til R, og makskapasitet på hver kant til 1 • Kilden har en kant til hver node i L, og hver node i R har en kant til sluken
Maksimum bipartitt matching Har en bipartitt graf
Maksimum bipartitt matching Legger til kilde s og sluk t, og rettede kanter fra s til t
Maksimum bipartitt matching Legger på kapasitet 1 på kantene
Maksimum bipartitt matching • Etter man har gjort disse stegene, kan man kjøre en flytalgoritme på flytnettverket • Da vil maksflyten |f| = |M|, og vi har løst problemet med maskimal bipartitt matching • Brukes Ford-Fulkersens metode blir kjøretiden O(V*E)
Korteste vei - Teori • BFS – like kantvekter, O(V + E) • DAG shortest path – acyclic, topological ordering O(V + E) • Dijkstra – nonegative, with list O(V^2), with heap O(ElogV) • Bellman-Ford – O(VE) • Floyd-Warshall – alle til alle, O(V^3) • Faster-All-Pairs-Shorthest-Paths – O(V^3lgV) • ? - negative cycles Øvingsforelesning 9 - Børge Rødsjø