Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4: Flüsse

Werbung
Flüsse
Ferienkurs zur algorithmischen diskreten
Mathematik
Kapitel 4: Flüsse
Dipl-Math. Wolfgang Kinzner
3.4.2012
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Kapitel 4: Flüsse
Netzwerk, Fluss, s,t-Schnitt, Kapazität
MaxFlow-MinCut-Theorem
Restnetzwerk und Erhöhen des Flusswertes
Ford-Fulkerson-Algorithmus
Edmonds-Karp-Algorithmus
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Definition Netzwerk, Fluss, Wert des Flusses
Ein Netzwerk ist ein Tupel N = (V , A, s, t, c), wobei G = (V , A, c)
ein gerichteter Graph mit Kapazitätsfunktion c : A → R≥0 ist und
s, t ∈ V zwei ausgezeichnetene Knoten sind. Die Knoten s bzw. t
werden Quelle bzw. Senke genannt.
Eine Abbildung f : A → R≥0 heisst s-t-Fluss (engl. flow) in N,
wenn
X
X
f ((x , y )) ∀x ∈ V \{s, t} [Flusserhaltung],
f ((y , x )) =
y∈N − (x)
y∈N + (x)
f ((x , y )) ≤ c((x , y ))
∀(x , y ) ∈ A
Der Wert von f ist definiert als
X
f (s, y ) −
val(f ) :=
y∈N + (s)
[Zulässigkeit] .
X
f (y , s)
y∈N − (s)
Ein Fluss f hat maximalen Wert in N, falls val(f ) ≥ val(f ′ ) für
alle Flüsse f ′ in N gilt.
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Definition Schnitt, Kapazität
Eine Menge X ⊆ V mit s ∈ X und t ∈ V \ X heißt
s-t-Schnitt (engl. cut).
Die Kapazität von X ist definiert durch
cap(X ) :=
X
c(u, v )
u∈X ,v ∈N + (u)\X
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Zusammenhang Fluss-Schnitt
Wenn f ein Fluss und X ein s-t-Schnitt im Netzwerk N sind, dann
gilt
val(f ) ≤ cap(X ).
val(f ) =
P
x ∈X ,y ∈N +(x )\X
f (x, y ) −
MaxFlow-MinCut-Theorem:
max
f : Fluss in N
val(f ) =
Dipl-Math. Wolfgang Kinzner
P
x ∈X ,y ∈N − (x )\X
min
X : s-t-Schnitt in N
f (y , x)
cap(X )
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Übung 15 (MaxFlow-MinCut-Theorem)
Bestimmen Sie einen minimalen Schnitt im folgenden Graphen.
Wie groß ist der maximale s,t-Fluss? Können Sie anhand eines
oder mehrerer minimaler Schnitte einen maximalen s,t-Fluss
bestimmen?
2
v1
2
5
s
v4
1
7
v3
3
4
4
t
5
6
6
v2
v5
3
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Restnetzwerk
Sei N = (V , A, s, t, c) ein Netzwerk und f ein Fluss in N. Das
Restnetzwerk von N bezüglich f ist definiert als
Nf := (V , Af , s, t, cf ), wobei wir zunächst die Kapazitätsfunktion
c mittels c(x, y ) := 0 für (x, y ) 6∈ A auf ganz V × V erweitern.
Dann setzen wir
cf (x, y ) :=


 c(x, y ) − f (x, y )
c(x, y ) + f (y , x)

 c(x, y )
falls f (x, y ) > 0
falls f (y , x) > 0
sonst
sowie Af := {(x, y ) : cf (x, y ) > 0}.
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Erhöhen des Flusswertes
Wenn f ein Fluss in N und W ein gerichteter s-t-Kantenzug
im Restnetzerk Nf ist, dann kann f entlang W zu einem Fluss
f ′ erhöht werden mit
val(f ′ ) = val(f ) + δ,
wobei 0 < δ := mine∈W cf (e).
Sei f ein Fluss in N. Wenn es in Nf keine s-t-Kantenzug mehr
gibt, dann hat f maximalen Wert.
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Algorithmus von Ford-Fulkerson
Input: Netzwerk N = (V , A, s, t, c)
Output: Fluss f
Ford-Fulkerson(N = (V , A, s, t, c))
(1) f := 0
(2) while ∃ s-t-Kantenzug W in Nf
(3)
erhöhe f entlang von W wie vorher beschrieben.
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Beispiel zum Ford-Fulkerson-Algorithmus
Folie 10
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Übung 16 (Ford-Fulkerson-Algorithmus)
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Übung 16 (Ford-Fulkerson-Algorithmus)
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Laufzeit und Probleme bei Ford-Fulkerson
Sei N ein Netzwerk mit Kapazitäten aus N0 . Dann terminiert
der Ford-Fulkerson-Algorithmus nach höchstens
P
(u,v )∈A c(u, v ) Schritten mit einem Fluss maximalen Werts.
Zwei Probleme können auftreten:
Der Algorithmus ist sehr langsam.
Im Falle nicht natürlicher Kapazitäten kann er eventuell gar
nicht oder gegen einen suboptimalen Fluss konvergieren.
Zwei mögliche Abhilfen:
Erhöhe in jeder
→ Algorithmus
Erhöhe in jeder
→ Algorithmus
Runde entlang des kürzesten s-t-Weges.
von Edmonds-Karp
Runde entlang aller kürzesten s-t-Wege.
von Dinic
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Algorithmus von Edmonds-Karp
Modifikation von Ford-Fulkerson:
Edmonds-Karp(N = (V , A, s, t, c))
(1) f := 0
(2) while ∃ s-t-Kantenzug W in Nf
(2’)
finde kürzesten s-t-Weg in Nf via Breitensuche
(3)
erhöhe f entlang von W um δ := mine∈W cf (e).
Laufzeit: O(|V | · |A|2 )
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Übung 17 (Edmonds-Karp-Algorithmus)
Die folgende Abbildung zeigt ein Netzwerk N mit seinen
Flusskapazitäten.
4
v1
6
5
8
s
6
v3
6
v4
7
3
t
5
v2
Benutzen Sie den Algorithmus von Edmonds-Karp, um einen
maximalen Fluss in N zu finden. Skizzieren Sie dazu die
entsprechenden Restenetzwerke und skizzieren Sie jeweils darin die
Breitensuche zum Finden eines augmentierenden Weges.
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Flüsse
Übung 18 (Diskrete Tomographie und Edmonds-Karp)
Es seien zwei Folgen (ai )i∈[n] , (bi )i∈[n] von natürlichen Zahlen
gegeben. Gesucht ist ein gerichteter Graph G = ([n], A), in dem
jeder Knoten i den Aus-Grad ai und den Ein-Grad bi hat.
Gegen sie ein polynomielles Verfahren an, das eine mögliche
Adjazenzmatrix von G berechnet oder feststellt, dass eine solche
nicht existiert.
Dipl-Math. Wolfgang Kinzner
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4:
Herunterladen