Maximale Flüsse - Zentrum für Angewandte Informatik der

Werbung
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
Herunterladen