8 Das Flussproblem für Netzwerke 8.1 Netzwerke mit Kapazitätsbeschränkung Definition 15 Ein Netzwerk N = (V, E, γ, q, s) besteht aus einem gerichteten Graph G = (V, E), einer Quelle q V und einer Senke s V sowie einer Kapazitätsfunktion γ : E R + 0. Es sei n := V und m := E. 189
190 Andreas Jakoby Definition 15 (Teil 2) Ein Fluss in N ist eine Funktion f : E R + 0 folgenden Eigenschaften: die Kapazitätsschranken der Kanten werden eingehalten, d.h. mit e E : f (e) γ(e) für alle Knoten v V \ {q, s} wird die Kirchhoffsche Regel eingehalten, d.h. v V \ {q, s} : f ((u, v)) = f ((v, w)). (u,v) E (v,w) E
Definition 15 (Teil 3) Als Wert eines Flusses definieren wir als W (f ) := f ((q, v)) = f ((u, s)). (q,v) E (u,s) E Die Eigenschaft, dass der Ausfluss aus der Quelle identisch sein muss mit dem Abfluss in die Senke folgt unmittelbar aus der Kirchhoffschen Regel, da im Netzwerk kein Fluss verloren geht. Ein Fluss heißt maximal, falls sein Wert größtmöglich unter allen Flüssen in N ist. MAXFLOW(N) bezeichnet diesen Wert. 191
6 x q s u v w 5 6 7 3 5 6 x q s u v w 5 6 7 3 5 Ein Netzwerk und ein Fluss mit dem Wert 3. 192
Ein Fluss ist somit ein Transportproblem: Es sollen möglichst viele Einheiten einer Ware von einem Absender zu einem Empfänger zu schicken, wobei gewisse Kapazitätsschranken auf dem Transportweg eingehalten werden müssen. Beispiele für solche Transportprobleme sind: Lenkung von Verkehrsströmen (Eisenbahn, PKWs) oder Lenkung von Nachrichtenströmen (Telefonverkehr, Datenverkehr im Internet). 193
Der maximale Fluss ist beschränkt durch die Kapazität der Quelle (die Summe der Kapazitäten aller Kanten, die die Quelle verlassen) und die Kapazität der Senke (die Summe der Kapazitäten aller Kanten, die in der Senke enden). Es sei γ max := max e E γ(e). Da höchstens V 1 Kanten die Quelle verlassen, ist der maximale Fluss ist beschränkt durch V γ max. 19
195 Andreas Jakoby Definition 16 Die Zerlegung der Kontenmenge V = Q S mit Q S = nennen wir q s-schnitt, falls q Q und s S ist. Die Schnittkapazität eines q s-schnittes definieren wir als γ(q, S) := γ((u, v)). (u,v) E, u Q, v S Ein minimaler Schnitt von N ist ein q s-schnitt (Q, S), so dass γ(q, S) minimal unter allen q s-schnitten ist. MINCUT(N) bezeichnet diesen Wert. Für einen Fluss f sei der Nettofluss von f über einen Schnitt (Q, S) definiert als f (Q, S) := f ((u, v)) f ((v, u)) γ(q, S). u Q, v S u Q, v S
G γ(e 1 ) Q γ(e 2 ) S q γ(e r ) s q s-schnitt (Q, S) mit Schnittkapazität γ(q, S). 196
Lemma 9 Für jeden q s-schnitt (Q, S) gilt f (Q, S) = W (f ). Beweis von Lemma 9 Der Beweis erfolgt per Induktion über die Mächtigkeit von Q. Für Q = 1, d.h. für Q = {q} folgt die Behauptung aus der Definition von W (f ). Sei Q > 1 und v Q mit v q. Nach Voraussetzung gilt f (Q \ {v}, S {v}) = W (f ). 197
Beweis von Lemma 9 (Teil 2) G Q S q f 1 v f s f 3 f 2 198
Beweis von Lemma 9 (Teil 3) Sei f 1 der Gesamtfluss nach v von Knoten aus Q \ {v} und f 2 der Gesamtfluss nach v von Knoten aus S. Sei f 3 der Gesamtfluss aus v nach Q \ {v} und f der Gesamtfluss von v nach S. Die Flussbedingung garantiert f 1 + f 2 = f 3 + f oder f f 2 + f 3 f 1 = 0. f (Q, S) lässt sich darstellen als f (Q, S) = f (Q \ {v}, S {v}) + f f 2 + f 3 f 1 = f (Q \ {v}, S {v}) = W (f ). 199
Definition 17 Der Restgraphen G = (V, E ) für einen Fluss f definieren wir über die Kantenmenge E, wobei: Für jede Kante e E mit f (e) < γ(e) ist e E mit Kapazität γ(e) f (e). Für jede Kante e = (u, v) E mit 0 < f (e) ist die Rückwärtskante ẽ = (v, u) in E mit Kapazität f (e). u v u v q 5 7 3 5 s 5 3 = 2 q 3 7 3 3 = 0 5 3 s 6 w x 6 6 w 3 x 6 3 = 3 200
201 Andreas Jakoby Definition 17 (Teil 2) Sei G = (V, E ) der Restgraph von G für einen Fluss f, dann ist REST(N, f ) := (V, E, q, s, r) mit γ(e) f (e) falls e E und γ(e) > f (e) r(e) := f ((v, u)) falls e = (u, v), (v, u) E und f ((v, u)) > 0. Ein Weg von der Quelle zur Senke im Restgraphen heißt zunehmender Weg.
Sei f ein Fluss in N = (V, E, q, s, γ) und π ein zunehmender Weg in N f = REST(N, f ) = (V, E, q, s, γ). Wir gehen im folgeden davon aus, dass ein zunehmender Weg jeden Knoten maximal einmal besucht. Der nachfolgende Algorithmus modifiziert f : Algorithmus modify-flow(n, f, π) Eingabe: Netzwerk N, Fluss f in N und zunehmender Weg π in N f Ergebnis: um π erhöhter Fluss f in N 1: ρ := min{r(e i ) e i π} 2: for e i π do 3: if e i ist Vorwärtskante in N f, d.h. e i E then : f (e i ) := f (e i ) + ρ 5: else if e i ist Rückwärtskante in N f, d.h. e i E \ E then 6: f (e i ) := f (e i ) ρ 7: end if 8: end for 9: Return(f ) 202
Lemma 10 Ist f ein Fluss in N und π ein zunehmender Weg in N f, dann ist modify-flow(n, f, π) auch ein Fluss in N. Beweis von Lemma 10: Wir müssen zunächst zeigen, dass f := modify-flow(n, f, π) die Kapazitätsschranken γ einhält. Da wir nur den Fluss auf dem Weg π verändern, genügt es, wenn wir für alle Kanten e π zeigen, dass 0 f (e) γ(e) gilt. Ist e eine Vorwärtskante, dann gilt 0 f (e) f (e) + ρ f (e) + r(e) = γ(e). Ist e eine Rückwärts Kante, dann gilt 0 = f (e) f (e) f (e) ρ f (e) γ(e). 203
20 Andreas Jakoby Beweis von Lemma 10 (Teil 2): Als zweites müssen wir nun zeigen, dass die Kirchhoffsche Regel für jeden Knoten v auf π (bis auf q und s) erfüllt ist: f ((u, v)) = f ((v, w)) (u,v) E (v,w) E Betritt und verlässt π den Knoten v auf jeweils einer Vorwärtskante, dann erhöhen wir beide Summen um den Wert ρ. Die Kirchhoffsche Regel bleibt somit erfüllt. Betritt und verlässt π den Knoten v auf jeweils einer Rückwärtskante, dann verringern wir beide Summen um den Wert ρ. Die Kirchhoffsche Regel bleibt somit erfüllt.
205 Andreas Jakoby Beweis von Lemma 10 (Teil 3): Betreten wir v über eine Vorwärtskante (u, v) und verlassen wir v auf einer Rückwärtskante (v, w ), dann f ((u, v)) = f ((u, v)) f ((u, v)) f ((w, v)) (u,v) E = = (u,v) E +f ((u, v)) + f ((w, v)) f ((u, v)) f ((u, v)) f ((w, v)) (u,v) E +f ((u, v)) + ρ + f ((w, v)) ρ f ((v, w)). (v,w) E Die Kirchhoffsche Regel bleibt somit erfüllt.
206 Andreas Jakoby Beweis von Lemma 10 (Teil ): Betreten wir v über eine Rückwärtskante (u, v) und verlassen wir v auf einer Vorwärtsskante (v, w ), dann f ((v, w)) = f ((v, w)) f ((v, u )) f ((v, w )) (v,w) E = = (v,w) E +f ((v, u )) + f ((v, w )) f ((v, w)) f ((v, u )) f ((v, w )) (v,w) E +f ((v, u )) ρ + f ((v, w )) + ρ f ((u, v)). (u,v) E Die Kirchhoffsche Regel bleibt somit erfüllt. Wir haben somit bewiesen, dass f ein Fluss ist, wenn f ein Fluss ist.
Aus der Konstruktion von REST(N, f ) folgt, dass jeder zunehmende Weg q immer über eine Vorwärtskante verlässt, und dass jeder zunehmende Weg s über eine Vorwärtskante erreicht. Es folgt somit: Lemma 11 Führen wir modify-flow(n, f, π) für einen Fluss f und einen zunehmenden aus, so gilt für den resultierenden Fluss f : W (f ) < W (f ). Existiert somit in REST(N, f ) ein zunehmender Weg, dann ist f kein maximaler Fluss. 207
Satz 1 [MAXFLOW-MINCUT-Theorem] Für jedes Netzwerk N gilt: MAXFLOW(N) = MINCUT(N). Beweis von Satz 1: Nach Lemma 9 gilt für einen maximalen Fluss f und für jeden q s-schnitt (Q, S) MAXFLOW(N) = W (f ) = f (Q, S) γ(q, S). Insbesondere gilt für den minimalen q s-schnitt (Q, S) MAXFLOW(N) γ(q, S) = MINCUT(N). 208
Beweis von Satz 1 (Teil 2): Es verbleibt zu zeigen, dass Sei f ein maximaler Fluss in N. MAXFLOW(N) MINCUT(N). Aus Lemma 10 folgt, dass es in REST(N, f ) = (V, E, q, s, r) keinen zunehmenden Weg gibt, d.h. es gibt in G = (V, E ) keinen Weg von q nach s. Sei Q die Menge der Knoten, die von q aus in G erreichbar sind, und sei S := V \ Q. (Q, S) ist ein q s-schnitt. 209
Beweis von Satz 1 (Teil 3): Insbesondere gilt für den q s-schnitt (Q, S): Es gibt keine Vorwärtskanten von Q nach S in G. Somit gilt für jede Kante e Q S: f (e) = γ(e). Es gibt keine Rückwärtskanten von Q nach S in G. Somit gilt für jede Kante e S Q: f (e) = 0. Wir erhalten MINCUT(N) γ(q, S) = f (Q, S) = W (f ) = MAXFLOW(N). 210
Aus den bisher angestellten Beobachtungen (Lemma 11 und Satz 1) können wir den folgenden Algorithmus für das MAXFLOW-Problem herleiten Algorithmus General-MAXFLOW(N) Eingabe: Netzwerk N Ergebnis: maximaler Fluss f in N 1: for e E do f (e) := 0 end for 2: while es existiert ein zunehmender Weg in REST(N, f ) do 3: sei π ein zunehmender Weg in REST(N, f ) : f :=modify-flow(n, f, π) 5: end while 6: Return(f ) 211