Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Graphenalgorithmen Maximaler Fluss • Einleitung • Flussnetzwerke • Ford Ford-Fulkerson Fulkerson Methode • Maximales bipartites Matching 2 Einleitung • Gerichtete Graphen zur Modellierung von Flussnetzwerken • Modell: Material fliesst durch Röhrensystem von Quelle zu Senke Q – Quelle produziert konstantes Materialvolumen pro Zeit – Senke konsumiert konstantes Volumen pro Zeit – „Fluss“ in Röhre ist Volumen pro Zeit, das verschoben wird • Beispiele – – – – Flüssigkeit durch Röhren Teile auf Fliessbändern Strom in elektrischen Netzwerken Information in Kommunikationsnetzwerken 3 Flussnetzwerke • Modellierung mit gerichteten Graphen • Kante: „Röhre“ Röhre“ – Gewisse maximale Kapazität von Einheiten pro Zeit, die fliessen können • Knoten: Verbindungspunkte – Material darf sich nicht „stauen“ – „Fluss hinein“ hinein muss gleich „Fluss hinaus hinaus“ sein • Problem des maximalen Fluss – G Grösstmöglicher ö t ö li h Fl Fluss von Q Quelle ll zu SSenke, k so dass keine maximale Kapazität irgendeiner Kante verletzt wird 4 Graphenalgorithmen Maximaler Fluss • Einleitung • Flussnetzwerke • Ford Ford-Fulkerson Fulkerson Methode • Maximales bipartites Matching 5 Flussnetzwerke • Gerichteter Graph G=(V,E) • Jede Kante (u,v) hat Kapazität c(u,v)>=0 • Falls Kante (u,v) (u v) nicht existiert, existiert c(u,v)=0 c(u v) 0 • Quelle: ein Knoten s • Senke: ein Knoten t • Annahme: für jeden Knoten v gibt es einen Pf d s à v à t Pfad 6 Flussnetzwerke w x s t y z 7 Flussnetzwerke Jede Kante (u,v) hat eine Kapazität c(u,v) Ni ht eingezeichnete Nicht i i h t K Kanten t h haben b iimplizit li it c(u,v)=0 ( ) 0 8 Flussnetzwerke • Positiver Fluss: Eine Funktion p: V x V → R – Weist jeder Kante einen Wert, d.h. positiven Fluss, zu • Kapazitätsbedingung – Für Fü alle ll u,v ∈ V, V 0 ≤ p(u,v) ( ) ≤ c(u,v) ( ) • Flusserhaltung g – „Fluss hinein gleich Fluss hinaus“ – Für Fü alle ll u ∈ V-{s,t}, V { } v∈ V p(v,u) ( ) = v∈ V p(u,v) ( ) – Äquivalent v∈ V p(v,u) - v∈ V p(u,v) = 0 9 Flussnetzwerke Jede Kante ist annotiert mit positivem Fluss/Kapazität, d.h. p(u,v)/c(u,v) 10 Gegenseitige Auslöschung • O.B.d.A positiver Fluss ist entweder – von u nach hv – oder von v nach u – aber nicht beides • Beispiel: p zwei äquivalente q Situationen – 1 Einheit von x → z, 2 Einheiten von z → x – 0 Einheiten von x → z, z 1 Einheit von z → x – In beiden Fällen: „Netto Fluss“ ist eine Einheit von z → x • „Netto Fluss“ erfüllt Kapazitätsbedingung und d Flusserhaltung Fl h lt iimmer 11 (Netto) Fluss • Eine Funktion f: V x V → R – Sehr ähnlich wie positiver Fluss • Kapazitätsbedingung – Für alle u,v ∈ V, f(u,v) ≤ c(u,v) • Asymmetrie y – Für alle u,v ∈ V, f(u,v) = -f(v,u) • Flusserhaltung – Für alle u ∈ V-{s,t}, v∈ V f(u,v) = – „Fluss hinein ist gleich Fluss hinaus“ • Definitionen für ((netto)) Fluss und p positiver Fluss sind gleichwertig 12 Auslöschung und netto Fluss • Noch ein Beispiel: äquivalente Situationen – 5 Einheit von u → v, 0 Einheiten von v → u – 8 Einheiten von u → v, 3 Einheiten von v → u – In beiden Fällen: Fluss ist 5 Einheiten von u → v • Könnten Sendungen auch ändern, indem zusätzlich 3 Einheiten von u → v und 3 Einheiten von v → u – Netto Fluss bleibt gleich g – Können tatsächlich „geschickte Sendungen“ nicht aus Fluss rekonstruieren •P Positiver ii Fl Fluss h hat einen i redundanten d d Freiheitsgrad, arbeiten deshalb mit (netto) Fluss 13 Fluss w x s t y z 14 Fluss • Auslöschung aus vorherigem Beispiel durchgeführt • Kanten mit positivem Fluss sind annotiert mit Fluss/Kapazität, d.h. f(u,v)/c(u,v) • Kanten mit negativem Fluss sind nur mit Kapazität annotiert, d.h. c(u,v); Fluss ist implizit f(u,v) = -f(v,u) • z.B. f(y,s) = -2, f(x,z) = -1 • Kanten mit Kapazität c(u,v)=0 nicht eingezeichnet; können negativen Fluss haben, z.B. c(y,x)=0, f(y,x)=-1 15 Implizite Summation • Zur Vereinfachung der Schreibweise – Erlaube Mengen als Argumente in Funktionen p Summation – Mit impliziter f (X, Y ) bedeutet X X f (x, y) x∈X y∈Y • Flusserhaltung: f(u,V)=0, for all u ∈ V-{s,t} • Weitere Vereinfachung der Notation – Weglassen von Klammern für Mengen p f( f(s,V-s) , ) statt f( f(s,V-{s}) , { }) – Beispiel 16 Wert eines Flusses • Wert des Flusses f ist |f | = X f (s, v) = totaler Fluss aus Quelle v∈V • Mit vereinfachter Notation |f | = f (s, (s V ) 17 Wert eines Flusses • Wert des Flusses ist 3 • Es wird nur Fluss aus der Quelle hinaus gezählt • z.B. f(y,s)=-2 wird nicht mitgezählt 18 Graphenalgorithmen Maximaler Fluss • Einleitung • Flussnetzwerke • Ford Ford-Fulkerson Fulkerson Methode • Maximales bipartites Matching 19 Ford-Fulkerson Methode • Löst das Problem des maximalen Flusses • Gegeben – – – – Graph G Quelle s Senke t Kapazitäten c • Finde Fluss f mit grösstem Wert – G Grösstmöglicher ö t ö li h positiver iti Fl Fluss, d der aus Q Quelle ll hinausfliesst • Brauchen weitere Konzepte – Schnitte durch Graphen – Restnetzwerke 20 Schnitte • Schnitt (S,T) eines Flussnetzwerks G=(V,E) ist – eine Partition von V in S und T=V-S – So dass s ∈ S und t ∈ T • Netto Fluss über Schnitt (S,T) (S T) ist f(S,T) f(S T) – Zur Erinnerung g f ((S,, T ) = P P x∈S y∈T f ((x,, y) • Kapazität des Schnittes (S,T) ist c(S,T) • Minimaler Schnitt ist Schnitt, dessen Kapazität p minimal ist über alle Schnitte von G 21 Schnitte 22 Schnitte • Beispiel: Schnitt S={s,w,y}, T={x,z,t} • f(S,T) f(S T) = f(w,x) f( ) + f(y,x) f( ) + f(y,z) f( ) = 2 + -1 + 2 =3 • c(S,T) = c(w,x) + c(y,x) + c(y,z) =2+0+3 =5 • Beachte Unterschied zwischen Kapazität und Fluss – Fluss ist asymmetrisch, z.B.f(y,x)=-f(x,y)=-1 – Kapazität K ität ist i t nicht, i ht z.B.c(y,x)=0, B ( ) 0 aber b c(x,y)=1 ( ) 1 23 Schnitte • Beispiel: Schnitt S={s,w,x,y}, T={z,t} • f(S,T) = f(x,z)+f(x,t)+f(y,z) = -1+2+2 =3 • c(S,T) = c(x,z)+c(x,t) +c(y,z) = 2+3+3 =8 • Gl Gleicher i h Fluss Fl wie i vorher, h aber b höh höhere Kapazität 24 Schnitte • Lemma Für jeden Schnitt (S,T) (S T) gilt f(S,T)=| f(S T)=| f | • Korollar Wert für jeden Fluss ≤ Kapazität für jeden Schnitt • „Maximaler Fluss ≤ Kapazität des minimalen Schnitts“ 25 Restnetzwerke • Gegeben Fluss f in Netzwerk G=(V,E) • Knoten u,v ∈ V • Restkapazität p einer Kante ((u,v)) – cf (u,v) = c(u,v) - f(u,v) ≥ 0 – Zusätzlicher Fluss der von u nach v fliessen könnte – Da f(u,v) negativ sein kann, kann cf (u,v) ≥ 0 bedeuten: „Fluss in die andere Richtung (v,u) kann reduziert werden“ • Restnetzwerk Gf = (V,Ef ) – Menge der Kanten, die Restkapazität haben – Ef = { (u,v) (u v) ∈ V × V : cf (u,v) (u v) > 0 } 26 Restnetzwerke Gf w x s t y z 27 Restnetzwerke 28 Summe von Flüssen • Gegeben zwei Flüsse f1 und f2 • Summe der Flüsse f1 + f2 ist (f1 + f2)( )(u,v) , ) = f1((u,v) , ) + f2((u,v) , ) • Lemma: Gegeben – Flussnetzwerk G, Fluss f in G – Restnetzwerk Gf , Fluss ff‘ in Gf – Dann ist Summer der Flüsse f + f‘ ein Fluss in G mit it Wert W t | f + f‘ | = | f |+ | f‘ | 29 Vergrössernder Pfad • Ein Pfad s à t in Gf – Erlaubt mehr Fluss entlang jeder Kannte g von Röhren von Quelle zu Senke,, – Eine Folge durch die mehr Material fliessen kann • Wieviel mehr Fluss möglich entlang Pfad p? cf (p) = min {{cf ((u,v)) : (u,v) ( ) is on p } 30 Vergrössernder Pfad • Im Beispiel p = (s,w,y,z,x,t) • Kleinste Residualkapazität ist 1 31 Vergrössernder Pfad Erhöhung des Flusses entlang p = (s,w,y,z,x,t) um 1 w x s t y z w x s t y z 32 Vergrössernder Pfad Erhöhung des Flusses entlang p = (s,w,y,z,x,t) um 1 Kein vergrössernder Pfad mehr! Behauptung: Fluss ist maximal 33 Maximaler Fluss • Lemma – Gegeben Flussnetzwerk G, G Fluss f in G, G Restnetzwerk Gf – Sei p vergrössernder Pfad in Gf – Definiere fp : V × V → R mit – Dann ist fp ein Fluss in Gf mit Wert |fp|= | cf (p) ( )>0 • Korollar – Definiere fp wie oben – Definiere f‘ : V × V → R als f‘ = f + fp – Dann D iistt f‘ Fluss Fl in i G mit it Wert W t | f‘ | = | f | + cf (p) ( )>|f| 34 Max-flow min-cut Theorem • Theorem: Folgendes ist äquivalent – f ist maximaler Fluss – f erlaubt keinen vergrössernden g Pfad – | f | = c(S,T) für einen Schnitt (S,T) 35 Beweis • (1) => (2): Falls f erweiternden Pfad p hat, dann könnten wir Fluss mit Wert f+cf(p)>|f| erhalten; Widerspruch zu Annahme (1) • (2) => (3) Nehmen an f hat keinen vergrössernden Pfad Definieren Pfad. S = {v ∈ V: existiert pfad s->v in Gf} T = V-S VS t muss in T sein, sonst ex. erweiternder Pfad olg (S, (S,T)) ist st e ein Sc Schnitt tt Ess folg Für alle u ∈ S und v ∈ T, muss gelten f(u,v)=c(u,v), sonst wäre (u,v) ∈ Ef und damit wäre v ∈ S – | f | = f(S,T) f(S T) = c(S,T) (S T) – – – – – • (3) => (1): Korollar | f | ≤ c(S,T) für jeden Schnitt. Darum | f | = c(S,T) c(S T) => > f ist ein maximaler Fluss 36 Ford-Fulkerson Algorithmus • Analyse – Falls ll ganzzahlige hli Kapazitäten, iä d dann vergrössert jeder Schritt | f | um ≥ 1 – Falls F ll maximaler i l Fl Fluss W Wert f* hat, h dann d ≤ | f* | Iterationen – Komplexität K l i ä O(E ( | f* |) 37 Edmonds-Karp Algorithmus • Finde erweiternde Pfade mit Breitensuche in Restnetzwerk • Aufwand O(VE ( 2) – Beweis siehe Buch 38 Graphenalgorithmen Maximaler Fluss • Einleitung • Flussnetzwerke • Ford Ford-Fulkerson Fulkerson Methode • Maximales bipartites Matching 39 Maximales bipartites Matching • Beispiel eines Problems (von vielen), das gelöst werden kann, kann indem als Flussproblem formuliert • Ungerichteter Graph G=(V,E) heisst bipartit falls V in V = L ∪ R partitioniert werden kann, so dass alle Kanten zwischen L und nd R sind 40 Maximales bipartites Matching • Matching: eine Teilmenge M von E, so dass für alle v ∈ V, V ≤ 1 Kante von M auf v inzident ist – Knoten heisst matched falls Kante inzident auf ihn,, sonst unmatched • Maximales Matching: ein Matching mit grösster Kardinalität – M ist maximal falls ||M | ≥ ||M‘ | für alle M‘ • Problem: gegeben bipartiter Graph (mit Partitionierung) finde maximales Matching Partitionierung), 41 Maximales bipartites Matching K i maximales Kein i l M Matching hi M i l M Maximales Matching hi 42 Maximales bipartites Matching • Anwendungsbeispiel: Flugzeuge einer Menge von Routen zuweisen – L = Menge von Flugzeugen – R = Menge von Routen – (u,v) (u v) ∈ E falls Flugzeug u Route v fliegen kann • Wollen grösstmögliche Anzahl Routen, die von den d Flugzeugen Fl geflogen fl werden d können 43 Maximales bipartites Matching • Gegeben G, definiere Flussnetzwerk G‘=(V‘ G =(V ,E E‘)) – Knoten V‘ = V ∪ {s,t} – Kanten E‘ = {(s,u) : u ∈ L} ∪ {( {(u,v) , ) : u ∈ L,, v ∈ R,, ((u,v) , ) ∈ E}} ∪ {(v,t) : v ∈ R} c(u v) = 1 für alle (u,v) (u v) ∈ E E‘ – Kapazität c(u,v) 44 Formulierung als Flussproblem L R 45 Formulierung als Flussproblem • Jeder Knoten in V hat ≥ 1 inzidente Kanten ⇒|E|≥|V|/2 • Deshalb | E | ≤ | E‘ | = | E | + | V | ≤ 3 | E | • Deshalb | E‘ | = Θ( E ) • Finde maximalen Fluss in G‘ – Benutze Kanten mit Fluss 1 im Matching g im Buch – Beweis,, dass maximales Matching 46 Anwendung von Max-flow min-cut • Viele Optimierungsprobleme in der Bildverarbeitung – Z.B. Automatische Bildsegmentierung http://research.microsoft.com/pubs/67890/siggraph04-grabcut.pdf 47 Nächstes Mal • Lineare Programmierung 48