Graphentheorie Maximale Flüsse Rainer Schrader Zentrum für Angewandte Informatik Köln 31. Oktober 2007 1 / 30 2 / 30 Maximale Flüsse Maximale Flüsse Gliederung • sei G = (V , A) ein gerichteter Graph • maximale Flüsse • Schnitte • Edmonds-Karp-Variante • sei c eine Abbildung von E → R • wir interpretieren c(e) als die „Kapazität“ der Kante e • falls (u, v ) ∈ / A, so sei c(u, v ) := 0 • seien wiederum s und t zwei Knoten als Quelle und Senke • der Graph repräsentiert ein Netzwerk (Leitungen, Kanäle, usw.) • durch das Netzwerk sollen Flüssigkeiten oder Güter „gepumpt“ werden • wir wollen so viel wie möglich von s nach t pumpen 3 / 30 4 / 30 Maximale Flüsse Maximale Flüsse Zur Modellierung unseres Fluss-Problems: • ein Fluss ist eine Abbildung x : E → R • x (e) gibt die Quantität an, die über die Kante e = (u, v ) „fließt“ • wir fügen eine Rückkante f = (t , s) mit unbeschränkter Kapazität hinzu • der Nettozufluss im Knoten v ∈ V ist: δv (x) = X x (e) − • ein Fluss x heißt Zirkulation, wenn gilt: X x (e) • 0 ≤ x (e) ≤ c(e) e∈δ + (v ) e∈δ − (v ) • x erfüllt die Flusserhaltung in allen Knoten v ∈ V • d.h. die Differenz aus eingehendem und ausgehendem Fluss • der Wert der Zirkulation ist gegeben durch x (f ) • x erfüllt die Flusserhaltungs-Bedingung in einem Knoten v , falls δv (x) = 0 • d.h. alles, was nach v hineinfließt, fließt auch wieder heraus 6 / 30 5 / 30 Maximale Flüsse Maximale Flüsse Beispiel: • sei nun x ≥ 0 eine zulässiger Fluss • im folgenden Graph sei ce = 1 für alle e ∈ A • wir wollen versuchen, diesen zu verbessern • sei dazu G(x) = (V , A(x)) ein Hilfsgraph auf V • für eine Kante e = (v , w ) ∈ A r f enthält G(x) bis zu zwei Kanten: f • eine mögliche Zirkulation x mit x (f ) = 1 ist: (v , w ), falls xe < ce (Vorwärtskante) (w , v ), falls xe > 0 (Rückwärtskante) • sei ε > 0 so, dass x (e) + ε ≤ c(e), f x (e) − ε ≥ 0, für alle Vorwärtskanten e für alle Rückwärtskanten e • x ist nicht maximal, kann aber nicht einfach erhöht werden. 7 / 30 8 / 30 Maximale Flüsse Maximale Flüsse • die aktuelle Zirkulation x: • sei P ein Weg von s nach t im Hilfsgraphen G(x) • dann kann x um mindestens ε > 0 erhöht werden: • erhöhe x um ε auf Vorwärtskanten von P und auf f = (t , s) f • erniedrige x um ε auf den Rückwärtskanten von P • offensichtlich ist der resultierende Fluss • der zugehörige Hilfsgraph G(x): • nichtnegativ • respektiert die Kapazitätsgrenzen • und genügt der Flusserhaltung • P heißt augmentierender Weg • G(x) kann Kanten enthalten, die in G nicht vorkommen 10 / 30 9 / 30 Maximale Flüsse Maximale Flüsse • der Hilfsgraph G(x) mit einem augmentierendem Weg • sei S die Menge aller Knoten, die in G(x) von s aus auf einem gerichteten Weg erreicht werden können • dann wissen wir also: • falls t ∈ S, so kann x verbessert werden • aus den vorangegangenen Überlegungen ergibt sich der folgende • der verbesserte Fluss x0 : Algorithmus: f 11 / 30 12 / 30 Maximale Flüsse Maximale Flüsse Gliederung Algorithmus von Ford-Fulkerson (1) beginne mit x = 0 als Startlösung • maximale Flüsse • Schnitte (2) konstruiere den Hilfsgraphen G(x) • Edmonds-Karp-Variante (3) suche in G(x) einen augmentierenden Weg P von s nach t (4) falls kein solcher Weg existiert, stop, (5) andernfalls erhöhe x entlang P ∪ f zu einem neuen Fluss x0 mit xf0 = x (f ) + ε (6) setze x = x0 und gehe zu (2) • wir wollen zeigen, dass der Algorithmus optimale Zirkulationen berechnet • dazu betrachten wir wieder ein duales Problem 13 / 30 14 / 30 Maximale Flüsse Maximale Flüsse • sei S ⊆ V eine Knotenmenge mit s ∈ S Lemma 1 (Schnittlemma) • dann bestimmt S einen s-Schnitt Sei x eine Zirkulation und S ein Schnitt. Dann gilt: P P (i) x (f ) = e∈δ+ (S) x (e) − e∈δ− (S) x (e) (S, V r S) = {(v , w ) ∈ E | v ∈ S, w ∈ / S} e6=f • der Schnitt S hat die Kapazität c(S, V r S) = (ii) x (f ) ≤ c(S, V r S) X ce e∈(S,V rS) Beweis: (i) wegen der Flusserhaltung für alle v ∈ S gilt: ” X“ X X 0= x (e) − x (e) s v ∈S e∈δ + (v ) e∈δ − (v ) t • jede Kante, die innerhalb von S verläuft, wird einmal addiert und einmal subtrahiert S • somit: 0= f X e∈δ + (S) 15 / 30 x (e) − X x (e) e∈δ − (S) 16 / 30 Maximale Flüsse X 0= e∈δ + (S) X = X x (e) − Maximale Flüsse x (e) • sei wie vorher x ≥ 0 ein zulässiger Fluss e∈δ − (S) X x (e) − e∈δ + (S) • sei S die Menge aller von s aus in G(x) erreichbaren Knoten x (e) − x (f ) • angenommen t ∈ /S e∈δ − (S) e6=f • dann gilt für jede Kante e = (v , w ) ∈ A: (ii) folgt aus (i) mit 0 ≤ x (e) ≤ c(e): c(e), 0, x (e) = x (f ) = X x (e) − e∈δ + (S) X x (e) e∈δ − (S) • weiter folgt mit Lemma 1 e6=f ≤ X x (e) ≤ X x (f ) = e∈δ + (S) X wenn v ∈ S und w ∈ V r S wenn v ∈ V r S und w ∈ S. e∈δ + (S) c(e) x (e) − X x (e) = c(S, V r S) e∈δ − (S) e6=f e∈δ + (S) • somit ist x optimal = c(S, V r S) 17 / 30 18 / 30 Maximale Flüsse Maximale Flüsse Daraus ergibt sich der folgende Satz: Bemerkungen: • sind die Kapazitäten c(e) ganzzahlig, so ist klar, dass Satz 2 (Ford-Fulkerson) Eine Zirkulation x ist genau dann optimal, wenn es im Hilfsgraphen G(x) keinen augmentierenden Weg von s nach t gibt. • der FF-Algorithmus nur ganzzahlige Lösungen x generiert • in jeder Iteration der Flusswert x (f ) um ein ganzzahliges ε ≥ 1 verbessert wird Als Aussage über primal-duale Probleme: • eine leichte Modifikation des einführenden Beispiels zeigt, dass der Algorithmus von Ford-Fulkerson keine polynomielle Laufzeit hat Korollar 3 (max-flow-min-cut-Theorem) Der Wert einer maximalen Zirkulation ist gleich der Kapazität eines minimalen Schnitts. • von der folgenden Variante jedoch werden wir zeigen, dass wir die Laufzeit polynomiell beschränken können: 19 / 30 20 / 30 Maximale Flüsse Maximale Flüsse Gliederung Edmonds-Karp-Verfahren • maximale Flüsse • Schnitte (1) beginne mit x = 0 als Startlösung (2) konstruiere den Hilfsgraphen G(x) • Edmonds-Karp-Variante (3) falls kein augmentierender Weg existiert, stop, (4’) andernfalls sei P ein kürzester (in der Zahl der Kanten) augmentierender Weg (5) erhöhe x entlang P ∪ f zu einer neuen Zirkulation x0 mit xf0 = x (f ) + ε (6) setze x = x0 und gehe zu (2) • bezeichne d (x, v ) die Distanz in G(x) von s nach v • dann gilt: 22 / 30 21 / 30 Maximale Flüsse Maximale Flüsse d (x, u) ≤ d (x0 , u) = d (x0 , v ) − 1 Lemma 4 Bei der Edmonds–Karp–Variante wachsen mit jeder Augmentierung die Distanzen d (x, v ) für alle Knoten v ∈ V r {s, t } monoton. (i) (u, v ) ∈ A(x): • dann ist d (x, v ) ≤ d (x, u) + 1 ≤ d (x0 , v ), Widerspruch Beweis: (ii) (u, v ) ∈ / A(x): • angenommen die Aussage ist falsch • dann ist x (u, v ) = c(u, v ) • dann existiert ein v ∈ V r {s, t } mit d (x0 , v ) < d (x, v ) bei einer • da (u, v ) ∈ A(x0 ), muss der Fluss zwischen u und v reduziert worden sein • also war v der direkte Vorgänger von u auf dem kürzesten augmentierenden Weg • d.h. Augmentierung von x zu x0 • wähle ein solches v , für das d (x0 , v ) minimal ist • sei P ein kürzester (s, v )-Weg in G(x0 ) • sei u unmittelbarer Vorgänger von v auf P d (x, v ) = d (x, u) − 1 ≤ d (x0 , u) − 1 = d (x0 , v ) − 2 < d (x0 , v ) 0 • (insbesondere ist dann (u, v ) ∈ A ) • Widerspruch • dann gilt: d (x, u) ≤ d (x0 , u) = d (x0 , v ) − 1 • wir führen eine Fallunterscheidung durch: 23 / 30 24 / 30 Maximale Flüsse Maximale Flüsse Beweis: • sei P ein kürzester Weg • wir untersuchen, wie oft eine Kante (u, v ) kritisch sein kann • sei ε der Betrag, um den der Fluss erhöht wird • wenn (u, v ) zum ersten Mal kritisch ist, gilt d (x, v ) = d (x, u) + 1 • eine Kante (u, v ) eines kürzesten Weges P heißt kritisch, falls ε= • die Kante kann erst dann wieder kritisch werden, wenn die Gegenkante c(e) − x (e), x (e), falls (u, v ) Vorwärtskante; falls (u, v ) Rückwärtskante; (v , u) auf einem späteren augmentierenden Weg gelegen hat • sei x0 der Fluss zu diesem Zeitpunkt • d.h. (u, v ) bestimmt den Wert, um den der Fluss erhöht wird • wir zeigen damit den folgenden: • dann gilt d (x0 , u) = d (x0 , v ) + 1 ≥ d (x, v ) + 1 = d (x, u) + 2 • die Distanz von u hat sich offenbar um mindestens 2 erhöht • die maximale Distanz bei n Knoten ist höchstens n Satz 5 • somit kann jede Kante höchstens Die Edmonds–Karp–Variante führt höchstens O(mn) Augmentierungen durch. n 2 -mal kritisch werden • da wir m Kanten haben, folgt die Behauptung. 25 / 30 26 / 30 Maximale Flüsse Maximale Flüsse Untere Schranken können einfach auf das klassische Problem zurückgeführt werden: Wenn die kürzesten augmentierenden Wege jeweils mittels depth-first-search gesucht werden, ergibt sich eine Gesamtlaufzeit von O(m 2 n) wir definieren ein neues Zirkulationsproblem auf einem gerichteten Graphen G 0 = (V 0 , A0 ) Das Problem lässt sich verallgemeinern: • V 0 = V ∪ {s 0 , t 0 } mit neuen Knoten s 0 , t 0 • gegeben Kosten auf den Kanten • A0 = A ∪ {(s 0 , v ) : v ∈ V } ∪ {(v , t 0 ) : v ∈ V } • gegeben einen Flusswert f • neue untere Schranken l 0 (e) = 0 für alle e ∈ A0 • bestimme eine Zirkulation x mit fx = f und minimalen Kosten • neue obere Schranken • weiter seien zu jedem e ∈ A untere Schranken l (e) ≥ 0 gegeben 8 < c(e) − l (e), l (δ − (v )), c 0 (e) = : l (δ + (v )), • wir fordern also l (e) ≤ x (e) ≤ c(e) für jede Zirkulation • zusätzlich seien zu jedem v ∈ V Werte b(v ) gegeben l l • bestimme eine maximale Zirkulation x mit δx (v ) = b(v ) • bestimme eine kostenminimale Zirkulation mit x (f ) = f und c − l 1 1 c 2 l3 δx (v ) = b(v ) für e ∈ A s’ für e = (s 0 , v ), v ∈ V für e = (v , t 0 ), v ∈ V 2 − l t’ 1 2 l + l +l 1 c − l 3 3 2 3 s’ 27 / 30 28 / 30 Maximale Flüsse Maximale Flüsse Durch einfaches Nachrechnen lässt sich dann die folgende Aussage beweisen: Satz 7 In G existiert genau dann eine zulässige Zirkulation bezüglich b, wenn in G 0 eine Zirkulation existiert. Satz 6 In G existiert genau dann eine zulässige Zirkulation bezüglich der Schranken l und c, wenn in G 0 eine Zirkulation mit dem Wert P 0 x f = e∈A l (e) existiert. Ähnlich werden Knotenbedingungen b(v ) behandelt: • füge einen neuen Knoten r hinzu • für v ∈ V mit b(v ) < 0: • füge neue Kante (r , v ) mit l (r , v ) = c(r , v ) = −b(v ) hinzu • für v ∈ V mit b(v ) < 0: • füge neue Kante (v , r ) mit l (v , r ) = c(v , r ) = b(v ) hinzu 29 / 30 30 / 30