1 / 38

Øvingsforelesning 9

Ø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

maxine
Télécharger la présentation

Øvingsforelesning 9

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad venstad@idi.ntnu.no Redigertog forelest av Gleb Sizov

  2. 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

  3. Terminologi: Flytnettverk • En graf med kapasitet på kantene • Ønsker å sende flyt fra en kildenode s (source) til en sluknode t (terminal/sink)

  4. 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

  5. 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

  6. 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.)

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. Ford-Fulkerson algoritmen • Eksempelkjøring av algoritmen • Jukser litt, initialiserer ikke flyten til 0 først

  13. Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Initialsteg | f | = 7

  14. Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Flytforøkning | f | = 8

  15. Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Flytforøkning | f | = 9

  16. Ford-Fulkerson algoritmen Residualnettverk Etter flytforøkning Ingen flere flytførkende stier | f | = 9 Vi har funnet maks-flyt og er ferdige

  17. 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

  18. 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)

  19. 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)

  20. Superkilde og supersluk • Hva hvis flytnettverket har flere kilder og flere sluker? • Superkilde og supersluk

  21. 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

  22. 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 |

  23. 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

  24. 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

  25. Max-flow min-cut teoremet • G er fylt opp med maksflyt 9 • Gf har ingen flytforøkende stier • min-cut har kapasitet 9

  26. 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

  27. Maksimum bipartitt matching Terminologi Hvordan finne maksimum bipartitt matching

  28. 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

  29. 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?

  30. 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

  31. Maksimum bipartitt matching G = (V,E) V = {a,b,c,d,e,f} M = {} |M| = 0

  32. Maksimum bipartitt matching G = (V,E) V = {a,b,c,d,e,f} M = {(a,d), (c,b) (e,f)} |M| = 3

  33. 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

  34. Maksimum bipartitt matching Har en bipartitt graf

  35. Maksimum bipartitt matching Legger til kilde s og sluk t, og rettede kanter fra s til t

  36. Maksimum bipartitt matching Legger på kapasitet 1 på kantene

  37. 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)

  38. 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ø

More Related