Juniorprof. Dr. Henning Meyerhenke 1 Henning Meyerhenke: KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Vorlesungen 5 und 6 Programm des Tages: Flüsse in Netzwerken Grundlegende Maximaler-Fluss-Algorithmen Maximale Flüsse und minimale Schnitte Generischer Push-Relabel-Algorithmus 2 Henning Meyerhenke:
Inhalt Flüsse in Netzwerken Elementare Ergebnisse Der PUSH-RELABEL-Algorithmus 3 Henning Meyerhenke:
Szenario 3 Sie verwalten (und gestalten) das Stromnetz einer großen Firma. Die Firma produziert den Strom selbst an einer (Strom)Quelle. Der Strom wird an einem Ort auf dem Firmengelände konsumiert (Senke). Der Strom muss aus technischen Gründen über eine Zahl von Zwischenstationen geroutet werden. Jede Stromleitung zwischen Quelle und Konsument hat eine gewisse Kapazität. Fragen: Bei gegebenem Netz: Wieviel Strom kann von der Quelle bis zur Senke fließen? Wie modellieren Sie diese Fragestellung? 4 Henning Meyerhenke:
Flussnetzwerk Definition (Flussnetzwerk) Ein Flussnetzwerk ist ein Quadrupel (G, u, s, t) mit einem Digraphen G = (V, E), Kantenkapazitäten u : E R +, einer Quelle s V und einer Senke t V. 5 Henning Meyerhenke:
Fluss Definition (Fluss, Überschuss) Gegeben sei ein Flussnetzwerk (G, u, s, t). Ein Fluss ist eine Funktion f : E(G) R + mit f (e) u(e) für alle e E(G). Der Überschuss (engl.: excess) eines Flusses f in v V (G) ist ex f (v) := e N (v) f (e) e N + (v) f (e) N + : Nachbarn an ausgehenden Kanten N : Nachbarn an reinkommenden Kanten 6 Henning Meyerhenke:
s-t-fluss Definition (s-t-fluss, Wert) Gegeben sei ein Flussnetzwerk (G, u, s, t). Ein s-t-fluss ist ein Fluss f mit ex f (s) 0 und ex f (v) = 0 für alle v V (G)\{s, t} (Flusserhaltung). Der Wert eines s-t-flusses ist value(f ) := f := ex f (s) 7 Henning Meyerhenke:
Modellierung der Problemstellung Problem (Maximaler-Fluss-Problem) Gegeben sei ein Flussnetzwerk (G, u, s, t). Bestimme einen s-t-fluss mit maximalem Wert. Idee für Algorithmus? 8 Henning Meyerhenke:
Gegenläufige Kanten Definition (Gegenläufige Kante) Sei G ein Digraph und e = (v, w) E(G). Dann sei e eine neue Kante von w nach v, die gegenläufige Kante von e. Ebenso ist e die gegenläufige Kante von e. Definition Sei G := (V (G), E(G) { e : e E(G)}). Achtung: Sind e = (v, w) und e = (w, v) G, dann sind e und e zwei verschiedene Kanten in G. 9 Henning Meyerhenke:
Residualnetzwerk Definition (Residualkapazitäten) Gegeben sei ein Digraph G mit Kapazitäten u : E(G) R + und ein Fluss f. Residualkapzitäten u f : E( G ) R + mit u f (e) := u(e) f (e) und u f ( e ) := f (e) Definition (Residualnetzwerk) Das Residualnetzwerk G f ist der Graph (V (G), {e E( G ) : u f (e) > 0}). 10 Henning Meyerhenke:
Finden augmentierender Pfade Definition (Augmentierender Pfad) Gegeben sei ein Netzwerk (G, u, s, t) und ein s-t-fluss f. Dann heißt ein s-t-pfad in G f f -augmentierender Pfad. Algorithmus-Idee: Finde sukzessive f -augmentierende Pfade! 11 Henning Meyerhenke:
Finden augmentierender Pfade Definition (Augmentierender Pfad) Gegeben sei ein Netzwerk (G, u, s, t) und ein s-t-fluss f. Dann heißt ein s-t-pfad in G f f -augmentierender Pfad. Algorithmus-Idee: Finde sukzessive f -augmentierende Pfade! Algorithm 2 Ford-Fulkerson-Algorithmus 1: function FORD-FULKERSON((G, u, s, t) mit u : E(G) Z + ) 2: Setze f (e) := 0 für alle e E(G) 3: Bestimme einen f -augmentierenden Pfad P 4: while P > 0 do 5: Berechne γ := min e E(P) u f (e) 6: Augmentiere f entlang P um γ 7: Bestimme einen f -augmentierenden Pfad P 8: end while 11 Henning Meyerhenke:
Verbesserung des FF-Algorithmus Edmonds-Karp-Algorithmus Problem: Laufzeit kann exponentiell zur Eingabelänge sein! Siehe Tafel. 12 Henning Meyerhenke:
Verbesserung des FF-Algorithmus Edmonds-Karp-Algorithmus Problem: Laufzeit kann exponentiell zur Eingabelänge sein! Siehe Tafel. Daher Verbesserung: Algorithm 4 Edmonds-Karp-Algorithmus 1: function EDMONDS-KARP((G, u, s, t) mit u : E(G) Z + ) 2: Setze f (e) := 0 für alle e E(G) 3: Bestimme einen kürzesten f -augmentierenden Pfad P 4: while P > 0 do 5: Berechne γ := min e E(P) u f (e) 6: Augmentiere f entlang P um γ 7: Bestimme einen kürzesten f -augmentierenden Pfad P 8: end while Anmerkung: Kürzester Pfad bedeutet mit den wenigsten Kanten! 12 Henning Meyerhenke:
Edmonds-Karp-Algorithmus Laufzeit (1) Definition (Flaschenhals-Kante) Eine Kante, auf denen das Minimum γ angenommen wird, nennt man Flaschenhals-Kante. 13 Henning Meyerhenke:
Edmonds-Karp-Algorithmus Laufzeit (1) Definition (Flaschenhals-Kante) Eine Kante, auf denen das Minimum γ angenommen wird, nennt man Flaschenhals-Kante. Theorem (Edmonds und Karp, 1972) Unabhängig von den Kantenkapzitäten terminiert der EDMONDS-KARP-ALGORITHMUS nach höchstens mn 2 Augmentierungen. Beweis. In jedem augmentierenden Pfad ist mind. eine Flaschenhals-Kante von G. Eine Flaschenhals-Kante ist in n 4 augmentierenden Pfaden enthalten (ob). Es kann höchstens E( G ) n 4 augmentierende Pfade geben. Für die Details siehe Korte und Vygen, S. 195-196. 13 Henning Meyerhenke:
Edmonds-Karp-Algorithmus Laufzeit (2) Corollary Der EDMONDS-KARP-ALGORITHMUS löst das MAXIMALER-FLUSS-PROBLEM in der Laufzeit O(m 2 n). Beweis. Nach Theorem 11 gibt es höchstens mn 2 Augmentierungen. Jede Augmentierung benutzt BFS und benötigt somit eine Laufzeit von O(m). 14 Henning Meyerhenke:
Schnitte im Flussnetzwerk Definition (Schnitt) Ein Schnitt ist eine Aufteilung der Knoten in zwei disjunkte Teilmengen S und T. Dabei gilt s S und t T. Die Kapazität eines Schnittes (S, T ) ist die Summe aller Kantenkapazitäten von S nach T, also u(s, T ) := u(v, w). v S,w T,(v,w) E Lemma Sei (G, u, s, t) ein Flussnetzwerk und sei f ein Fluss in G. Sei außerdem (S, T ) ein Schnitt in G. Dann gilt: f (S, T ) = f, insbesondere f = f (s, V s) = f (V t, t). 15 Henning Meyerhenke:
Max-Flow-Min-Cut-Theorem Theorem Die folgenden drei Aussagen sind äquivalent: f ist der maximale Fluss in G. Das Residualnetzwerk enthält keinen augmentierenden Pfad. Für mindestens einen Schnitt ist der Wert des Flusses gleich der Kapazität des Schnittes. Beweis. Siehe Tafel. 16 Henning Meyerhenke:
Hilfsergebnisse Proposition Das Maximaler-Fluss-Problem hat stets eine optimale Lösung. 17 Henning Meyerhenke:
Hilfsergebnisse Proposition Das Maximaler-Fluss-Problem hat stets eine optimale Lösung. Proposition Sind die Kapazitäten eines Netzwerkes ganzzahlig, so gibt es einen ganzzahligen maximalen Fluss. Beweis. Folgt direkt aus Max-Flow-Min-Cut. 17 Henning Meyerhenke:
Inhalt Flüsse in Netzwerken Elementare Ergebnisse Der PUSH-RELABEL-Algorithmus 18 Henning Meyerhenke:
Vorschau Wir werden den PUSH-RELABEL-Algorithmus von Goldberg und Tarjan (1988) beschreiben. Andere Namen existieren... Wir werden eine Laufzeit von O(n 2 m) beweisen. Ausgeklügelte Implementierungen mit dynamischen Bäumen sind noch schneller (siehe Korte und Vygen, S. 201). 19 Henning Meyerhenke:
Ansatz Wissen: Ein s-t-fluss f hat genau dann maximalen Wert, wenn ex f (v) = 0 für alle v V (G) {s, t} und es keinen f -augmentierenden Pfad gibt. Bisher: Algorithmen erfüllten stets erste Bedingung. 20 Henning Meyerhenke:
Ansatz Wissen: Ein s-t-fluss f hat genau dann maximalen Wert, wenn ex f (v) = 0 für alle v V (G) {s, t} und es keinen f -augmentierenden Pfad gibt. Bisher: Algorithmen erfüllten stets erste Bedingung. Nun: Mit f starten, das zweite Bedingung erfüllt. Zweite Bedingung als Invariante für weitere Flüsse. Terminierung nur, wenn erste Bedingung auch erfüllt. Während des Algorithmus ist f kein s-t-fluss, sondern ein s-t-präfluss. 20 Henning Meyerhenke:
Intuitive Algorithmus-Idee Ein Flussnetzwerk transportiert Flüssigkeiten; Kanten stellen Röhren dar, Knoten deren Verbindungen. Jeder Knoten hat ein unbegrenztes Reservoir als Zwischenspeicher. Jeder Knoten, sein Reservoir und seine Verbindungen sind auf einer Plattform, deren Höhe während Laufzeit zunimmt Knotenhöhen bestimmen, wie Fluss durch das Netzwerk bewegt wird: abwärts. 21 Henning Meyerhenke:
Intuitive Algorithmus-Idee Ein Flussnetzwerk transportiert Flüssigkeiten; Kanten stellen Röhren dar, Knoten deren Verbindungen. Jeder Knoten hat ein unbegrenztes Reservoir als Zwischenspeicher. Jeder Knoten, sein Reservoir und seine Verbindungen sind auf einer Plattform, deren Höhe während Laufzeit zunimmt Knotenhöhen bestimmen, wie Fluss durch das Netzwerk bewegt wird: abwärts. Initial sendet s so viel Fluss wie möglich (= u(s, V s)). Erreicht Fluss einen Zwischenknoten, wird er zunächst im Reservoir zwischengespeichert. Von dort wird er später abwärts geschickt. Wenn alle unsaturierten Rohre, die einen Knoten v verlassen, zu Knoten w führen, die höher als v liegen, wird v angehoben. Hat der maximale Fluss die Senke erreicht, wird der Überschuss zur Quelle zurückgeschickt (Zwischenknoten über Quelle heben). 21 Henning Meyerhenke:
Präfluss Definition (Präfluss, aktiver Knoten) Sei (G, u, s, t) ein Netzwerk. Ein s-t-präfluss ist eine Funktion f : E(G) R + mit f (e) u(e) für alle e E(G) und (Kapazitätsbedingung) f (u, v) = f (v, u) für alle u, v V (Antisymmetrie) ex f (v) 0 für alle v V (G) {s}. (relaxierte Flusserhaltung) 22 Henning Meyerhenke:
Präfluss Definition (Präfluss, aktiver Knoten) Sei (G, u, s, t) ein Netzwerk. Ein s-t-präfluss ist eine Funktion f : E(G) R + mit f (e) u(e) für alle e E(G) und (Kapazitätsbedingung) f (u, v) = f (v, u) für alle u, v V (Antisymmetrie) ex f (v) 0 für alle v V (G) {s}. (relaxierte Flusserhaltung) Ein Knoten v V (G) {s, t} heißt aktiv, falls ex f (v) > 0. Beispiel: Siehe Tafel. 22 Henning Meyerhenke:
Distanzmarkierung Andere Intuition: Funktion der Plattformhöhen Definition (Distanzmarkierung, erlaubte Kante) Sei (G, u, s, t) ein Netzwerk und f ein s-t-präfluss. Eine Distanzmarkierung ist eine Funktion ψ : V (G) Z + mit ψ(t) = 0, ψ(s) = n := V (G) und ψ(v) ψ(w) + 1 für alle (v, w) E(G f ). Eine Kante e = (v, w) E(G) heißt erlaubte Kante, falls e E(G f ) und ψ(v) = ψ(w) + 1. 23 Henning Meyerhenke:
Distanzmarkierung Andere Intuition: Funktion der Plattformhöhen Definition (Distanzmarkierung, erlaubte Kante) Sei (G, u, s, t) ein Netzwerk und f ein s-t-präfluss. Eine Distanzmarkierung ist eine Funktion ψ : V (G) Z + mit ψ(t) = 0, ψ(s) = n := V (G) und ψ(v) ψ(w) + 1 für alle (v, w) E(G f ). Eine Kante e = (v, w) E(G) heißt erlaubte Kante, falls e E(G f ) und ψ(v) = ψ(w) + 1. Falls ψ eine Distanzmarkierung ist, so ist ψ(v) mit v = s eine untere Schranke für die Distanz zu t in G f. 23 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Algorithmus-Idee Initialer s-t-präfluss : Alle Kanten von s aus nutzen ihre Kapazität voll aus, alle anderen haben Fluss 0. Initiale DM: ψ(s) = n und ψ(v) = 0 für alle v V (G) {s}. 24 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Algorithmus-Idee Initialer s-t-präfluss : Alle Kanten von s aus nutzen ihre Kapazität voll aus, alle anderen haben Fluss 0. Initiale DM: ψ(s) = n und ψ(v) = 0 für alle v V (G) {s}. Danach Aktualisierungs-Operationen PUSH (Aktualisierung von f ) und RELABEL (Aktualisierung von ψ) in beliebiger Reihenfolge durchführen. 24 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Die Komponenten 1: procedure PUSH(e) 2: Setze γ := min{ex f (v), u f (e)}, wobei e in v beginnt. 3: Augmentiere f entlang e um γ. 1: procedure RELABEL(v) 2: Setze ψ(v) := min{ψ(w) + 1 : (v, w) δ + G f (v)}. 25 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus 1: function PUSH-RELABEL(G, { u, s, t) u(e) für jedes e δ + (s) 2: Setze f (e) = 0 für jedes e E(G) δ + (s) { n v = s 3: Setze ψ(v) = 0 für alle v V (G) {s} 4: while es gibt einen aktiven Knoten do 5: Sei v ein aktiver Knoten 6: if kein e δ + G ist erlaubte Kante then f 7: RELABEL(v) 8: else 9: PUSH(erlaubte Kante e δ + G ) f 10: end if 11: end while=0 Beispiel: Siehe Tafel. 26 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Korrektheit (1) Proposition Während des gesamten Ablaufs von PUSH-RELABEL ist f stets ein s-t-präfluss und ψ eine Distanzmarkierung bzgl. f. Für jedes v V (G) gilt: ψ(v) wird durch jedes RELABEL(v ) streng erhöht. Beweis. Übung. 27 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Korrektheit (2) Lemma Sei f ein s-t-präfluss und ψ eine DM bzgl. f. Dann gelten: 1. Die Quelle s ist von jedem aktiven Knoten v aus in G f erreichbar. 2. Falls es zwei Knoten v, w V (G) mit der Eigenschaft gibt, so gilt: dass w von v aus in G f erreichbar ist, ψ(v) ψ(w) + n 1. 3. Die Senke t ist von s aus in G f nicht erreichbar. Beweis. Siehe Tafel. 28 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Korrektheit (3) Theorem Bei Terminierung des Algorithmus ist f ein s-t-fluss mit maximalem Wert. Beweis. Siehe Tafel. 29 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Laufzeit (1) Lemma 1. Für jedes v V (G) gilt: ψ(v) wird niemals verringert und ψ(v) 2n 1 gilt zu jedem Zeitpunkt des Algorithmus. 2. Für keinen Knoten v wird mehr als (2n 1) mal RELABEL(v) aufgerufen. Die Gesamterhöhung von v V (G) ψ(v) nach Ende des Algorithmus ist 2n 2 n. Beweis. Übung. 30 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Laufzeit (2) Definition (Saturierender Push) Ein PUSH ist saturierend genau dann, wenn danach u f (e) = 0 gilt. Lemma Die Anzahl der saturierenden Pushes ist höchstens 2mn. Beweis. Siehe Tafel. 31 Henning Meyerhenke:
Der PUSH-RELABEL-Algorithmus Laufzeit (3) Lemma Falls wir als v in Zeile 5 von PUSH-RELABEL immer einen aktiven Knoten mit ψ(v) maximal wählen, dann ist die Anzahl der nichtsaturierenden Pushes höchstens 8n 2 m. Beweis. Siehe Korte und Vygen, S. 204-205. Theorem Der PUSH-RELABEL-Algorithmus löst das MAXIMALER-FLUSS-PROBLEM korrekt und kann mit Laufzeit O(n 2 m) implementiert werden. Beweis. Siehe Tafel. 32 Henning Meyerhenke: