Grundlegende Algorithmen Kapitel 6: Flussprobleme

Werbung
Grundlegende Algorithmen
Kapitel 6: Flussprobleme
Christian Scheideler
WS 2009
08.02.2010
Kapitel 6
1
Grundlagen
Definition 6.1: Ein Flussnetzwerk (G,s,t,c) besteht aus einem gerichteten
Graph G=(V,E), einer Quelle s ∈ V, einer Senke t ∈ V und einer
Kapazitätsfunktion c:V×V → ℝ≥0, so dass c(u,v) = 0 falls (u,v) ∉ E.
Wir werden im folgenden annehmen, dass s ֆG u ֆG t für alle u ∈ V ist .
Definition 6.2: Sei (G,s,t,c) ein Flussnetzwerk.
a)
Ein Fluss in G ist eine Funktion f:V×V → ℝ, so dass
f(u, v) ≤ c(u, v) für alle u, v ∈ V
(Kapazitätsbedingungen)
f(u, v) = - f(v, u) für alle u, v ∈ V
(Antisymmetrie)
Σv∈V f(u, v) = 0 für alle u ∈ V \ {s, t}
(Flusserhaltungsbedingungen)
b)
Der Wert | f | einer Flussfunktion f ist definiert als
| f | = Σv∈V f (s, v).
08.02.2010
Kapitel 6
2
Grundlagen
Bemerkung 6.3: Es sei f ein Fluss oder ein Flussnetzwerk (G,s,t,c). Dann
a) f (v, v) = 0 für alle v ∈ V (wegen Antisymmetrie).
b) Σu∈V f (u, v) = 0 für alle v ∈ V \ {s, t} (Flusserhaltung & Antisymm.).
c) Für alle u, v ∈ V mit (u, v), (v, u) ∉ E gilt f (u, v) = f (v, u) = 0.
d) Für alle v∈V \ {s, t} gilt
Σ
f (u, v) = -
Σ
f (u,v)
u∈V
u∈V
f (u, v) > 0
f (u, v) < 0
e) f mit f (u, v) = 0 für alle u, v ∈ V ist ein Fluss.
08.02.2010
Kapitel 8
3
Grundlagen
Beispiel für gültigen Fluss:
u
11|16
s
8|13
12|12
x
1|4
|10
11|14
t
7|7
4|9
v
15|20
y
f (u, v)|c(u, v), |f| = 19.
4|4
• f(v,u)=1, also f(u,v)=-1 nach Antisymmetrie.
• Das impliziert, dass für das Paar {u,v} nicht gleichzeitig in beide Richtungen Fluss fließen kann.
• Warum ist das nicht notwendig?
08.02.2010
Kapitel 8
4
Grundlagen
Bemerkung 6.4: Der in s ausfließende Fluss ist gleich
dem in t einfließenden Fluss, was nicht schwer zu
sehen ist. Zunächst stellen wir fest wegen der
Antisymmetrie fest:
Σv∈V Σw∈V f(v,w)
= Σ{v,w} (f(v,w)+f(w,v)) + Σv∈V
∈ f(v,v)
=0
Weiterhin gilt wegen der Flusserhaltung:
Σv∈V Σw∈V f(v,w) = Σw∈V f(s,w) + Σw∈V f(t,w)
= |f| + Σw∈V f(t,w)
Also gilt wegen der Antisymmetrie:
|f| = Σw∈V f(w,t)
08.02.2010
Kapitel 8
5
Grundlagen
Alternative Definition von Flüssen:
Definition 6.5: Sei (G,s,t,c) ein Flussnetzwerk. Ein Fluss in G ist eine
Funktion f : E → ℝ≥0 so dass
•
0 ≤ f (u, v) ≤ c (u, v) für alle (u, v) ∈ E (Kapazitätsbedingungen)
•
Σv∈V f (u, v) - Σv∈V f (v, u) = 0 für alle u ∈ V \ {s, t}
(Flusserhaltungsbedingungen)
Definition 6.5 ist intuitiver, wobei Definition 6.2 restriktiver ist und
manchmal leichtere Beweise erlaubt. Wir benutzen die alternative
Definition 6.5 in späteren Teilen dieses Kapitels.
08.02.2010
Kapitel 6
6
Problem MAXFLOW:
Eingabe: Ein Flussnetzwerk (G,s,t,c).
Ausgabe: Ein Fluss f in G mit maximalem Wert | f |.
Bemerkung 6.6: Ein maximales Flussproblem (G, s1, …, sp, t1, …tq, c) mit
mehreren Quellen s1, …, sp und mehreren Senken t1, … tq mit dem Ziel, so
viele Güter wie möglich von den Quellen zu den Senken zu transportieren,
kann einfach auf das original MAXFLOW-Problem reduziert werden:
Konstruiere Gɑ = (Vɑ, Eɑ) und cˈ wie folgt:
Vɑ = V ∪ {s, t}
Eɑ = E ∪ {(s, si) | 1 ≤ i ≤ p} ∪ {(ti, t)| 1 ≤ i ≤ q}
tq
8
8
Kapitel 6
…
08.02.2010
sp
t
8
Dann existiert ein Fluss f von s1, …, sp
mit t1, …, tq Wert ϕ in (G, s1, …, sp, t1, … tq, c)
genau dann, wenn ein Fluss fɑ von s nach t in
(Gɑ, s, t, cɑ) mit Wert ϕ existiert.
s
t1
…
u, v ∈ V
u = s oder v = t
8
cɑ (u, v) = c (u, v)
∞
s1
G
G
7
Definition 6.7: Es sei (G,s,t,c) ein Flussnetzwerk. Für X, Y ⊂ V bezeichnen wir
Σ Σ
Σ Σ
f (X, Y) =
f (x, y), c(X, Y) =
c (x, y) und X – v = X \ {v}
x∈X y∈Y
x∈X y∈Y
X
Y
Lemma 6.8: Es sei (G,s,t,c) ein Flussnetzwerk und es sei f ein Fluss in G.
Dann gilt für alle X, Y, Z ⊆ V.
a) f (X, X) = 0
b) f (X, Y) = -f (Y, X)
c) Wenn X ∩ Y = ∅ dann
f (X ⊍ Y, Z) = f (X, Z) + f (Y, Z) und f (Z, X ⊍ Y) = f (Z, X) + f (Z, Y)
Beweis: Übung
08.02.2010
Kapitel 6
8
Die Ford-Fulkerson Methode
Definition 6.9: Es sei (G,s,t,c) ein Flussnetzwerk und f ein Fluss in G.
a) Für u, v ∈ V ist die Restkapazität cf (u,v) definiert als
cf (u,v) = c (u,v) – f (u,v).
b) Das Residualnetzwerk Gf = (V,Ef) ist definiert als
Ef = { (u,v) ∈ V×V | cf (u,v) > 0}
c) Ein einfacher Pfad P von s zu t in Gf wird augmentierender Pfad
genannt. Die Restkapazität cf (P) von P ist definiert als
cf (P) = min {cf (u,v) | (u,v)∈ P}.
08.02.2010
Kapitel 6
9
Die Ford-Fulkerson Methode
Beispiel: augmentierender Pfad und Flussaugmentierung
Flussnetzwerk:
G
u
11|16
s
8|13
08.02.2010
12|12
x
1|4
|10
11|14
Kapitel 6
t
7|7
4|9
v
15|20
y
4|4
10
Beispiel: augmentierender Pfad und Flussaugmentierung
Flussnetzwerk:
Residualnetzwerk:
G
Gf
12|12
u
11|16
s
8|13
08.02.2010
t
7|7
4|9
v
5
11
1|4
|10
15|20
x
y
s
11|14
x
5
4
11
15
3
5
8
4|4
12
u
7
5
v
3
t
4
y
11
Kapitel 6
11
Beispiel: augmentierender Pfad und Flussaugmentierung
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
12|12
u
11|16
5
15|20
11
1|4
|10
s
x
8|13
08.02.2010
v
t
7|7
4|9
y
s
11|14
x
5
4
11
15
3
5
8
4|4
12
u
7
5
v
3
t
4
y
11
Kapitel 6
12
Beispiel: augmentierender Pfad und Flussaugmentierung
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
12|12
u
11|16
15|20
5
11
1|4
|10
s
x
8|13
7|7
4|9
11|14
x
5
4
11
15
3
5
8
4|4
y
v
s
t
12
u
7
5
v
3
t
4
y
11
Augmentiertes Flussnetzwerk:
G‘
12|12
u
11|16
s
1|4
|10
12|13
08.02.2010
x
v
19|20
t
7|7
|9
y
4|4
11|14
Kapitel 6
13
Beispiel: augmentierender Pfad und Flussaugmentierung
Residualnetzwerk mit augmentierendem Pfad:
Flussnetzwerk:
G
Gf
12|12
u
11|16
15|20
5
11
1|4
|10
s
x
8|13
7|7
4|9
s
12|13
08.02.2010
x
1|4
|10
v
15
3
5
7
5
3
v
t
4
y
Neues Residualnetzwerk:
G‘f
12|12
u
5
11
Augmentiertes Flussnetzwerk:
11|16
11
11|14
G‘
x
4
8
4|4
y
v
s
t
12
u
19|20
t
7|7
|9
y
5
11
1 11
s
12
4|4
11|14
Kapitel 6
12
u
3
x
7
9
11
19
t
4
3
v
1
y
14
Der Ford-Fulkerson Algorithmus
FORDFULKERSON (Flussnetzwerk G = (V, E), s, t, c))
{
für jede Kante (u, v) ∈ E
{ f [u, v] := 0; f [v, u] := 0; }
Gf = Residualnetzwerk von G bezüglich f;
solange (Ů ein Pfad P von s zu t in Gf)
{ // berechne maximal hinzufügbaren Fluss via P
cf (P) := min {cf (u, v) | (u, v) ∈ P)};
für jede Kante (u, v) ∈ P
{ f [u, v] := f [u, v] + cf (P); f [v, u] := - f [u, v]; }
Gf := Residualnetzwerk von G bezüglich f;
}
gib f aus
}
08.02.2010
Kapitel 6
// initialisiere leeren Fluss
// P ist der augmentierende Pfad
// cf (u, v) = c (u, v) – f (u, v)
// aktualisiere den Fluss von P
15
Lemma 6.10: Es sei (G, s, t, c) ein Flussnetzwerk und f ein Fluss in G. Es sei Gf
ein Residualnetzwerk von G induziert durch f und es sei fɑ ein Fluss in Gf. Dann ist
(f + fˈ)(u, v) = f (u, v) + fˈ (u, v)
ein gültiger Fluss in G mit Wert |f + fˈ| = |f| + |fˈ|.
Lemma 6.11: Es sei (G, s, t, c) ein Flussnetzwerk und f ein Fluss in G. Es sei Gf
das Residualnetzwerk von G induziert durch f und es sei P ein augmentierender
Pfad in Gf. Dann ist fP : V × V → ℝ mit
fP (u,v) =
cf (P) wenn (u,v) auf P
-cf (P) wenn (v,u) auf P
0
sonst
ein gültiger Fluss in Gf mit Wert |fP| = cf (P) > 0.
Korollar 6.12: Es sei (G, s, t, c) ein Flussnetzwerk und f ein Fluss in G. Es sei Gf
das Residualnetzwerk von G induziert durch f und es sei P ein augmentierender
Pfad in Gf. Es sei fP definiert wie in Lemma 6.11. Dann ist fˈ = f + fP ein gültiger
Fluss in G mit Wert |f ˈ| = |f + fP| = |f| + |fP| > |f|.
08.02.2010
Kapitel 6
16
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
G
u
16
s
08.02.2010
x
4
10
13
12
14
t
7
9
v
20
y
Kapitel 6
4
17
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
16
10
s
12
u
13
08.02.2010
4
v
x
y
10
s
Kapitel 6
x
4
v
14
20
t
7
9
13
4
12
u
16
t
7
9
14
20
y
4
18
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
12
u
16
10
s
13
4
x
x
4
v
14
20
t
7
9
13
4
y
14
10
s
t
7
9
v
16
20
12
u
y
4
Augmentiertes Flussnetzwerk:
G
4|16
|10
s
|13
08.02.2010
4|12
u
|4
v
x
t
|7
4|9
4|14
|20
y
4|4
Kapitel 6
19
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
12
u
16
10
s
13
4
x
u
4|16
|10
s
|13
08.02.2010
4|12
|4
v
v
Gf
x
|20
4
y
14
t
7
y
8
u
12
t
|7
4|9
4|14
4
20
Neues Residualnetzwerk mit augmentierendem Pfad:
Augmentiertes Flussnetzwerk:
G
x
9
13
4
y
14
10
s
t
7
9
v
16
20
12
u
4|4
Kapitel 6
4
s
13
10
x
4
4
4
10
t
7
5
4
v
20
y
4
20
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
4|16
x
|13
08.02.2010
|4
v
4|9
4|14
t
|7
y
u
12
|20
4
|10
s
4|12
u
8
s
13
4|4
Kapitel 6
10
4
v
x
4
20
4
4
10
t
7
5
y
4
21
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
4|12
u
4|16
|10
s
|13
|4
x
s
t
4
x
20
4
4
10
4
v
4
t
7
5
13
4|4
y
4|14
u
12
|7
4|9
v
|20
8
y
4
10
Augmentiertes Flussnetzwerk:
G
11|16
7|10
s
|13
08.02.2010
4|12
u
v
|4
x
t
7|7
4|9
11|14
7|20
y
4|4
Kapitel 6
22
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
u
4|16
|10
s
4|12
|13
|4
x
s
t
u
11|16
7|10
s
4|12
|13
08.02.2010
|4
v
4
4
10
4
5
4
v
t
7
4
y
Neues Residualnetzwerk mit
augmentierendem Pfad:
x
y
Gf
7|20
t
7|7
4|9
11|14
20
10
Augmentiertes Flussnetzwerk:
G
x
4
13
4|4
y
4|14
u
12
|7
4|9
v
|20
8
4|4
Kapitel 6
s
u
5
8
x
13
4
11 3
13
7
11 4
v
11
3
t
7
5
y
4
23
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
u
11|16
|4
7|10
s
4|12
|13
08.02.2010
v
x
y
5
t
7|7
4|9
11|14
7|20
s
x
13
4
11
13
4|4
8
u
3
11
v
7
4
5
11
t
7
y
4
3
Kapitel 6
24
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
u
11|16
7|10
s
4|12
|13
|4
v
x
5
s
t
7|7
4|9
11|14
7|20
y
x
13
4
11
13
4|4
8
u
11
3
v
7
4
5
11
t
7
y
4
3
Augmentiertes Flussnetzwerk:
G
11|16
|10
s
12|12
u
8|13
08.02.2010
1|4
v
x
t
7|7
4|9
11|14
15|20
y
4|4
Kapitel 6
25
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
u
11|16
7|10
s
4|12
|13
|4
v
x
5
y
11
3
13
4|4
x
7
4
5
11
v
Neues Residualnetzwerk mit
augmentierendem Pfad:
G
Gf
u
11|16
|10
s
8|13
08.02.2010
1|4
v
x
11|14
15|20
t
7|7
4|9
y
t
7
4
y
3
Augmentiertes Flussnetzwerk:
12|12
13
4
11
s
t
7|7
4|9
11|14
7|20
8
u
s
5
11 11
8
13
4|4
12
u
3
v
x
5
15
4
5
11
t
7
y
4
3
Kapitel 8
26
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
u
11|16
|10
s
12|12
8|13
08.02.2010
1|4
v
x
y
5
t
7|7
4|9
11|14
15|20
s
11 11
8
5
4|4
12
u
3
v
x
5
15
4
5
11
t
7
y
4
3
Kapitel 8
27
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
u
11|16
|10
s
12|12
8|13
1|4
v
x
5
s
t
7|7
4|9
11|14
15|20
y
11 11
8
5
4|4
12
u
3
v
x
5
15
4
5
11
t
7
y
4
3
Augmentiertes Flussnetzwerk:
G
11|16
s
12|12
u
|10
12|13
08.02.2010
1|4
v
x
t
7|7
|9
11|14
19|20
y
4|4
Kapitel 8
28
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
Residualnetzwerk mit augmentierendem Pfad:
G
Gf
u
11|16
|10
s
12|12
8|13
1|4
v
x
5
s
t
7|7
4|9
11|14
15|20
y
11 11
8
5
4|4
12
u
3
x
15
4
5
11
v
G
G
11|16
s
|10
12|13
08.02.2010
1|4
v
x
19|20
y
s
11
12
1
4|4
12
u
5
t
7|7
|9
11|14
4
3
Neues Residualnetzwerk mit
augmentierendem Pfad:
u
t
7
y
Augmentiertes Flussnetzwerk:
12|12
5
3
11
v
x
7
9
11
1
y
19
t
4
3
Kapitel 6
29
Beispiel: Ford-Fulkerson Algorithmus
Flussnetzwerk:
G
Gf
11|16
|10
s
12|12
u
12|13
1|4
v
|10
s
t
12|13
4|4
y
u
11|16
19|20
7|7
|9
11|14
23|29
x
12|12
1|4
23|52
x
|9
19|20
4|4
y
v
t
7|7
11|14
Augmentiertes Flussnetzwerk:
G
G
u
11|16
s
12|12
x
19|20
12|12
u
11|16
x
19|20
23|34
|10
12|13
1|4
v
|9
11|14
t
7|7
y
s
12|13
4|4
1|4
|10
y
v
t
7|7
|9
4|4
11|14
23|23
08.02.2010
Kapitel 6
30
Schnitte von Flussnetzwerken
Definition 6.13: Es sei (G, s, t, c) ein Flussnetzwerk und f ein Fluss in G.
a) Ein Schnitt (S, T) von G ist eine Aufteilung von V in S und T = V \ S so dass
s ∈ S und t ∈ T.
b) Der Fluss über einen Schnitt (S, T) ist f(S, T).
c) Die Kapazität eines Schnittes (S, T) ist c(S, T).
Bemerkung 6.14:
a) Die Definition eines Flusses ist konsistent mit den Flüssen, die in den Beispielen
berechnet wurden: Flüsse von T zu S werden abgezogen:
f (S, T) = Σ
x∈S
Σ
f (x, y)
(wobei f (x, y) < 0 falls f (y,x) > 0).
y∈T
b) Die Definition einer Kapazität eines Schnittes ist konsistent mit den Kapazitäten, die am
Ende des vorigen Beispiels berechnet wurden: Kanten von T zu S fügen der Kapazität
des Schnittes nichts hinzu:
c (S, T) = Σ
x∈S
08.02.2010
Σ
c (x, y)
wobei c (x, y) ≥ 0.
y∈T
Kapitel 6
31
Lemma 6.15: Es sei (G, s, t, c) ein Flussnetzwerk und f ein Fluss in G. Es sei
(S, T) ein Schnitt von G. Dann gilt
f (S, T) = |f|.
Und insbesondere auch
|f| = f (s, V – s) = f (V – t, t).
Korollar 6.16: Es sei (G, s, t, c) ein Flussnetzwerk. Dann ist der Wert von jedem
Fluss f in G nach oben beschränkt durch die Kapazität eines beliebigen Schnitts
in G.
G
Gf
11|16
x
u
11|16
19|20
23|52
x
19|20
23|34
|10
s
12|12
u
12|12
12|13
08.02.2010
1|4
v
|9
11|14
t
7|7
y
|10
s
12|13
4|4
1|4
|9
y
v
t
7|7
4|4
11|14
Kapitel 8
32
Theorem 6.17: (Max-Flow Min-Cut Theorem)
Es sei (G,s,t,c) ein Flussnetzwerk und f ein Fluss in G. Dann sind folgende
Aussagen äquivalent.
a) f ist ein maximaler Fluss in G.
b) Das Residualnetzwerk Gf von G bezüglich f enthält keinen augmentierenden
Pfad.
c) |f| = c(S, T) für einen Schnitt (S, T) von G.
Beweis:
• a)⇒b): ¬b)⇒¬a) gilt wegen Korollar 6.12 und damit auch a)⇒b).
• b)⇒c): Sei S die Menge der Knoten, die von s in Gf erreichbar sind. Dann ist
(S,T) mit T=V\S ein Schnitt und f(S,T)=c(S,T) nach Definition von Gf. Also ist
nach Lemma 6.15 |f|=c(S,T).
• c)⇒a): Folgt aus Korollar 6.16.
Korollar 6.18: Sei (G, s, t, c) ein Flussnetzwerk mit ganzzahlige Kapazitäten
c(u, v). Dann berechnet der Ford-Fulkerson Algorithmus einen maximalen
Fluss f in Zeit
O (|E| ⋅ |f|).
08.02.2010
Kapitel 8
33
Bemerkung 6.19:
a) Die Schranke an die Laufzeit von FORDFULKERSON ist scharf:
G=Gf
1.000.000
u
1
s
1.000.000
1.000.000
v
t
1.000.000
Gf
Gf
u
999.999
s
u
999.999
1
1
1.000.000
1.000.000
1
v
1
t
999.999
s
999.999
999.999
1
1
v
1
1
t
999.999
b) Wenn die Kapazitäten rationale Zahlen sind, dann kann man sie auf ganze Zahlen
skalieren und die Funktion FORDFULKERSON auf das skalierte Netzwerk
anwenden.
c) Wenn die Kapazitäten nicht ganzzahlig sind, dann terminiert FORDFULKERSON
unter Umständen nicht, und der Fluss f, den FORDFULKERSON aktualisiert,
konvertiert unter Umständen nicht gegen den maximalen Fluss.
08.02.2010
Kapitel 8
34
Probleme mit irrationalen Kapazitäten
Zu c): Sei φ=( 5 – 1)/2 ≈ 0,618034 so gewählt, dass 1-φ=φ2. Um
zu zeigen, dass der Ford-Fulkerson Algorithmus hängen
bleibt, betrachten wir den folgenden Graphen:
X
1
s
X
X
1
φ
X
X
X
t
• Wir starten mit dem leeren Fluss.
• Nach Anwendung des roten Pfades sind die residualen
Kapazitäten der horizontalen Kanten 1, 0 und φ.
08.02.2010
Kapitel 8
35
Probleme mit irrationalen Kapazitäten
A
B
C
Angenommen, die horizontalen residualen Kapazitäten sind φk-1, 0 und φk für
ein ungerades k∈ℕ.
1. Augmentiere entlang B, was φk zum Fluss hinzufügt. Die residualen
Kapazitäten sind nun φk+1, φk und 0.
2. Augmentiere entlang C, was φk zum Fluss hinzufügt. Die residualen
Kapazitäten sind nun φk+1, 0 und φk.
3. Augmentiere entlang B, was φk+1 zum Fluss hinzufügt. Die residualen
Kapazitäten sind nun 0, φk+1 und φk+2.
4. Augmentiere entlang A, was φk+1 zum Fluss hinzufügt. Die residualen
Kapazitäten sind nun φk+1, 0 und φk+2.
08.02.2010
Kapitel 8
36
Probleme mit irrationalen Kapazitäten
D.h. Nach 4n+1 Augmentierungen sind die residualen Kapazitäten φ2n-2, 0 und φ2n-1. Wenn die Anzahl der Augmentierungen gegen ∞ strebt, konvergiert der Wert des Flusses
gegen
1+2Σi≥0 φi = 1+2/(1-φ) = 4 + 5 < 7
obwohl der maximale Flusswert 2X+1 ist.
X
1
s
X
X
1
φ
X
X
t
08.02.2010
Kapitel 8
X
37
Edmonds-Karp Algorithmen
Fazit: Ford-Fulkerson Algorithmus lässt zuviele
Freiräume in der Wahl des augementierenden Pfades.
1972 stellten Edmonds und Karp zwei
Heuristiken vor, um effizient maximale Flüsse
zu bestimmen.
Heuristik 1: Wähle den augmentierenden Pfad
mit dem größten Wert.
Heuristik 2: Wähle den kürzesten augmentierenden Pfad.
08.02.2010
Kapitel 8
38
Edmonds-Karp Algorithmen
Theorem 6.20: Sei (G, s, t, c) ein Flussnetzwerk mit ganzzahlige
Kapazitäten c(u, v). Dann berechnet Heuristik 1 einen
maximalen Fluss f in Zeit
O(|E|2 ⋅ log |E| ⋅ log |f|).
Beweis:
• Sei f* ein maximaler Fluss in G.
• Sei f ein beliebiger Fluss in G und f´ ein maximaler Fluss im
residualen Graph Gf. (Anfangs ist f leer und damit f´=f*.)
• Sei e die Engpasskante im gewählten augmentierenden Pfad.
• S⊆V: Knoten, die von s aus mit Kanten der Kapazität >c(e)
erreichbar sind.
• T=V\S: nicht leer wegen Wahl von e.
• Es gilt: c(S,T)≤c(e)⋅|E| und c(S,T)≥|f| . Also ist c(e)≥|f|/|E|.
• Wert von f steigt also mindestens um Faktor (1+1/|E|) an.
08.02.2010
Kapitel 8
39
Edmonds-Karp Algorithmen
Theorem 6.20: Sei (G, s, t, c) ein Flussnetzwerk mit
ganzzahlige Kapazitäten c(u, v). Dann berechnet
Heuristik 1 einen maximalen Fluss f in Zeit
O(|E|2 ⋅ log |E| ⋅ log |f|).
Beweis (Fortsetzung):
• Wert von f steigt also mindestens um Faktor (1+1/|E|)
an.
• (1+1/|E|)k≥|f*| genau dann, wenn k≥|E| ln |f*|.
• Es reichen also |E| ln |f*| augmentierende Pfade, um
zum maximalen Fluss zu gelangen.
• Zeit für Berechnung eines augmentierenden Pfades
mit größtem Wert: O(|E| log |E|). (Das ist eine Übung.)
• Also Gesamtzeit O(|E|2 ⋅ log |E| ⋅ log |f|).
08.02.2010
Kapitel 8
40
Edmonds-Karp Algorithmen
Analyse von Heuristik 2:
• Gi: residuales Netzwerk nach i.
Augmentierungsschritten, d.h. G0=G.
• Für Knoten v sei disti(v) die Distanz (d.h. die
Anzahl Kanten des kürzesten gerichteten
Pfades) von s zu v in Gi.
• Kein Weg von s nach v: disti(v)=∞.
Lemma 6.21: Für jeden Knoten v mit disti(v)=∞
gilt auch disti+1(v)=∞.
08.02.2010
Kapitel 8
41
Edmonds-Karp Algorithmen
Lemma 6.21: Für jeden Knoten v mit disti(v)=∞ gilt auch
disti+1(v)=∞.
Beweis:
• Betrachte beliebigen Knoten v∈V mit disti(v)=∞.
• U: Menge aller Knoten, die Weg zu v haben.
• Dann gilt auch für alle u∈U, dass disti(u)=∞.
• Angenommen, disti+1(v)≠∞. Dann muss in Runde i ein
augmentierende Pfad ausgewählt worden sein, der
durch einen Knoten in U führt. (Warum?)
• In diesem Fall muss es aber einen Weg von s zu
einem Knoten in U gegeben haben, ein Widerspruch!
08.02.2010
Kapitel 8
42
Edmonds-Karp Algorithmen
Lemma 6.22: Für jeden Knoten v∈V gilt disti+1(v)≥disti(v).
Beweis:
• v=s: trivial, da immer disti(s)=0.
• v≠s: Induktion über Distanz zu s.
• p=(s,…,u,v): kürzester Weg von s nach v in Gi+1. (Kein Weg,
dann sind wir nach Lemma 6.21 fertig.)
• Da dieser ein kürzester Weg ist, gilt disti+1(u)=disti+1(v)-1.
• Nach Induktionsvoraussetzung ist disti+1(u)≥disti(u).
• Fall 1: (u,v) war Kante in Gi. Dann ist disti(v)≤disti(u)+1.
Also ist disti+1(v)=disti+1(u)+1≥disti(v).
• Fall 2: (u,v) war keine Kante in Gi. Dann war (v,u) eine Kante
im i-ten augmentierenden Pfad. In dem Fall ist (v,u) auf einem
kürzesten Weg von s in Gi und damit auch disti(v)≤disti(u)+1.
08.02.2010
Kapitel 8
43
Edmonds-Karp Algorithmen
Lemma 6.23: Während der Abarbeitung von Heuristik 2 kann
jede Kante (u,v) höchstens |V|/2-mal vom residualen Graphen
verschwinden.
Beweis:
• Angenommen, (u,v) ist in den residualen Graphen Gi und Gj+1
aber nicht in den residualen Graphen Gi+1,…,Gj.
• Dann muss (u,v) im i-ten augmentierenden Pfad liegen, also
disti(v)=disti(u)+1 sein.
• Weiterhin muss (v,u) im j-ten augmentierenden Pfad liegen,
also distj(u)=distj(v)+1 sein.
• Zusammen mit Lemma 6.22 folgt
distj(u) = distj(v)+1 ≥ disti(v)+1 = disti(u)+2
• Da jede endliche Distanz höchstens |V|-1 sein kann, kann
(u,v) höchstens |V|/2-mal verschwinden.
08.02.2010
Kapitel 8
44
Edmonds-Karp Algorithmen
Jetzt sind wir soweit, eine Laufzeitschranke für Heuristik 2 zu
berechnen.
• Da jede Kante höchstens |V|/2-mal verschwinden kann, gibt
es höchstens |E|⋅|V|/2 Ereignisse, in denen eine Kante
verschwindet.
• Aber mindestens eine Kante verschwindet in jeder Iteration,
so dass der Algorithmus nach höchstens |E|⋅|V|/2 Iterationen
halten muss.
• Da ein kürzester augmentierender Pfad in O(|E|) Zeit
gefunden werden kann, gilt:
Theorem 6.24: Sei (G, s, t, c) ein Flussnetzwerk mit ganzzahlige
Kapazitäten c(u, v). Dann berechnet Heuristik 2 einen
maximalen Fluss in Zeit O(|E|2⋅|V|).
08.02.2010
Kapitel 8
45
Dinics Algorithmus
• Die Laufzeit von Heuristik 2 hängt nicht länger von
dem Wert des maximalen Flusses ab, aber sie ist
noch zu groß.
• Wir präsentieren jetzt einen Algorithmus von Dinic, der
lediglich O(|V|2 |E|) Zeit benötigt.
Definition 6.25: Ein Fluss f in einem Flussnetzwerk (G,
s, t, c) heißt blockierend, wenn es auf jedem Weg von
s nach t mindestens eine saturierte Kante gibt. Eine
Kante e heißt saturiert, falls f(e)=c(e) ist.
Bemerkung: Nicht jeder blockierende Fluss ist maximal,
aber jeder maximale Fluss ist blockierend.
08.02.2010
Kapitel 8
46
Dinics Algorithmus
Definition 6.26:
• Der Level eines Knotens v ist definiert durch
level(v)=δf(s,v) (die Anzahl der Kanten entlang
eines kürzesten Weges in Gf von s nach v).
• Der Levelgraph Lf ist ein Teilgraph in Gf, der alle
Kanten (u,v) enthält mit (u,v)∈Gf und
level(u)=level(v)-1.
Lemma 6.27: Lf enthält alle kürzesten augmentierenden Wege und ist in O(m) Zeit (z.B. über BFS)
konstruierbar.
08.02.2010
Kapitel 8
47
Dinics Algorithmus
Dinics Algorithmus:
beginne mit leerem Fluss f
wiederhole
finde einen blockierenden Fluss f´ in Lf
setze f:=f+f´
bis Senke t nicht mehr erreichbar in Lf
Lemma 6.28: Dinics Algorithmus hält nach
höchstens n-1 Iterationen der Schleife.
08.02.2010
Kapitel 8
48
Dinics Algorithmus
Lemma 6.28: Dinics Algorithmus hält nach höchstens n-1 Iterationen
der Schleife.
Beweis:
• Betrachte eine feste Iteration und sei
– vorher: Fluss f und Funktion level
– nachher: Fluss f´ und Funktion level´
• Eine Kante (v,w) in Lf´ ist entweder
– eine Kante in Gf (wenn die Kante nicht saturiert wurde) oder
– eine umgekehrte Kante in Lf.
• Für jede Kante (v,w)∈Gf´ gilt daher level(w)≤level(v)+1.
• Daraus folgt, dass level´(t)≥level(t) ist. Betrachte dazu Pfad in Lf´:
s
v
w
t
• Es gilt sogar level´(t)>level(t), wie wir sehen werden.
08.02.2010
Kapitel 8
49
Dinics Algorithmus
Lemma 6.28: Dinics Algorithmus hält nach höchstens n-1 Iterationen
der Schleife.
Beweis (Fortsetzung):
• Angenommen, level´(t)=level(t).
• Dann muss es einen kürzesten Weg p von s nach t in Gf´ geben, der
auch kürzester Weg in Gf war (da level(w)=level(v)+1 für alle Kanten
(v,w) in p).
• Jede Kante von p ist dann in Lf, und keine von diesen ist saturiert
worden.
• Das ist aber ein Widerspruch zu der Annahme, dass wir einen
blockierenden Fluss in Lf gewählt haben.
• In jedem Schleifendurchlauf erhöht sich also der Abstand von s zu t
in Gf um mindestens 1.
• Da der kürzeste Weg von s nach t nicht länger als n-1 sein kann
(falls einer existiert), folgt das Lemma.
08.02.2010
Kapitel 8
50
Dinics Algorithmus
Auf Einheitsnetzen benötigt man sogar noch weniger
Iterationen.
Definition 6.29: Ein Einheitsnetz ist ein Flussnetzwerk
(G,s,t,c) mit ganzzahligen Kapazitäten, in dem jeder
Knoten v∈V\{s,t} genau eine hineingehende Kante mit
Kapazität 1 oder genau eine hinausführende Kante mit
Kapazität 1 hat.
Bemerkung: Wenn ein Knoten genau eine hineingehende Kante mit Kapazität 1 hat, so kann er mehrere
herausführende Kanten besitzen (und andersherum).
08.02.2010
Kapitel 8
51
Dinics Algorithmus
Beispiel für Einheitsnetz:
s
t
: Kapazität 1
08.02.2010
: beliebige Kapazität
Kapitel 8
52
Dinics Algorithmus
Lemma 6.30: Für ein Einheitsnetz hält Dinics Algorithmus nach höchstens
2 n-2 Iterationen.
Beweis:
• Wir betrachten eine feste Iteration.
• Sei f der momentane Fluss und f* der maximale Fluss, beide ganzzahlig.
• Dann ist f*-f ein Fluss in Gf.
• Da G ein Einheitsnetz ist, ist f*(e)-f(e) auf jeder Kante e in {-1,0,1}.
• Wir teilen die Kanten, auf denen f*(e)-f(e)=1 ist, in eine Sammlung von
Wegen von s nach t auf.
• Das gibt es exakt |f*|-|f| Wege von s nach t. (Beweis: Übung)
• Diese Wege sind knotendisjunkt (bis auf s und t).
• Deshalb gibt es einen augmentierenden Weg mit höchstens (n-2)/(|f*|-|f|)+1
Knoten.
• Nach n-2 Iterationen gilt, dass der kürzeste augmentierende Weg
mindestens n-2 +1 Knoten besitzt (nach Lemma 6.28 entfernt sich t
zunehmend von s).
• Es gilt n-2 + 1 ≤ (n-2)/(|f*|-|f|)+1 ⇔ |f*|-|f| ≤ n-2.
• Nach höchstens n-2 weiteren Iterationen hat man also den max. Fluss.
08.02.2010
Kapitel 8
53
Dinics Algorithmus
Wie findet man einen blockierenden Fluss?
Verwende wiederholt Tiefensuche:
wiederhole
finde einen Weg p von s nach t in Lf über Tiefensuche
und schicke den Flusswert cf(p) über p
bis kein augmentierender Weg in Lf mehr übrig
Lemma 6.31: Die Laufzeit zur Ermittlung eines
blockierenden Flusses ist O(n⋅m).
Theorem 6.32: Die Laufzeit von Dinics Algorithmus ist
O(n2⋅m).
08.02.2010
Kapitel 8
54
Dinics Algorithmus
Theorem 6.33: Die Laufzeit von Dinics
Algorithmus auf Einheitsnetzen ist O( n ⋅ m).
Beweis:
• Bei der Suche nach einem blockierenden
Fluss muss jeder Knoten im Einheitsnetz nur
einmal besucht werden, da er auf höchstens
einem augmentierenden Pfad liegen kann.
• Ein blockierender Fluss kann also in Zeit
O(m) gefunden werden.
• Mit Lemma 6.30 folgt dann die Laufzeit.
08.02.2010
Kapitel 8
55
Dinics Algorithmus
Anwendung von Dinics Algorithmus: Matching maximaler
Kardinalität in bipartiten Graphen.
s
t
Theorem 6.34: Dinics Algorithmus auf dem bipartiten Graphen
G=(V,E) erweitert um s und t berechnet einen maximalen
Fluss f in Zeit O( n ⋅ m), für den |f| die Größe des Matchings
maximaler Kardinalität in G ist.
08.02.2010
Kapitel 8
56
Dinics Algorithmus
Beweis:
|f|≥|M|:
s
t
• Sei M ein Matching maximaler Kardinalität in G.
• Dann ist der Fluss f´, der M und alle Kanten von s
und t zu M verwendet, ein legaler Fluss mit Wert
|f´|=|M| und damit |f|≥|M|.
08.02.2010
Kapitel 8
57
Dinics Algorithmus
Beweis:
|M|≥|f|:
s
t
• Sei f ein maximaler Fluss in G erweitert um s und t.
• Dann ist die Menge M´,der Kanten, die f in G verwendet, ein Matching mit |M´|=|f| und damit |M|≥|f|.
08.02.2010
Kapitel 8
58
Goldbergs Algorithmus
Intuition:
• Ein Flussnetzwerk ist ein Flüssigkeitsnetzwerk:
Kanten entsprechen Rohren und Knoten
entsprechen Rohrverknüpfungen.
• Jeder Knoten hat ein Reservoir, das
eine beliebige Menge Flüssigkeit sammeln
kann.
• Jeder Knoten, sein Reservoir und alle seine
Rohrverknüpfungen sind auf einer Plattform,
dessen Höhe steigt, wenn der Algorithmus abläuft.
08.02.2010
Kapitel 6
59
Intuition:
• Knotenhöhen bestimmen, wie der Fluss durch das Netzwerk geleitet wird:
der Fluss fließt immer bergab.
• Initial pumpt die Quelle s soviel Fluss wie möglich in
das Netzwerk (= c(s, V – s)).
• Wenn der Fluss einen Zwischenknoten erreicht,
sammelt er sich in dessen Reservoir. Von dort
wird er später bergab geleitet.
• Wenn alle nichtsaturierten Rohre, die einen Knoten
u verlassen, zu Knoten v führen, die oberhalb von
u liegen, so wird die Höhe von u erhöht, d. h.
der Knoten u wird geliftet.
• Wenn der gesamte Fluss, der zur Senke fließen kann,
dort angekommen ist, wird der überschüssige Fluss in den
Reservoiren zur Quelle zurückgeschickt, indem Zwischenknoten
über die Höhe der Quelle hinaus geliftet werden.
08.02.2010
Kapitel 6
60
Goldbergs Algorithmus
Definition 6.35: Sei (G,s,t,c) ein Flussnetzwerk. Ein Präfluss ist eine
Funktion f:V×V→ℝ, so dass
• f (u, v) ≤ c (u, v) für alle u, v ∈ V
(Kapazitätsbedingungen)
• f (u, v) = - f (v, u) für alle u, v ∈ V
(Antisymmetrie)
• f (V, u) ≥ 0 für alle u ∈ V \ {s}
(Präflussbedingung)
• Der Überschuss eines Knotens v ist definiert als ef(v)=f(V,v). Ein
Knoten v≠t heißt aktiv, falls ef(v)>0.
• Goldbergs Algorithmus weist jedem Knoten v eine Höhe h(v)∈ℕ0 zu.
Die Höhenfunktion ist legal, falls h(s)=|V|, h(t)=0 und für alle Kanten
(v,w) in Gf gilt, dass h(v)≤h(w)+1.
(D.h. für alle (v,w)∈E mit h(v)>h(w)+1 muss gelten, dass (v,w)∉Ef.)
• Eine Kante (v,w) in Gf heißt zulässig, falls h(v)>h(w). (Zusammen mit
der vorigen Bedingung folgt daraus, dass h(v)=h(w)+1.)
08.02.2010
Kapitel 8
61
Goldbergs Algorithmus
Grundlegende Operationen:
• Push(u,v): schieb soviel Fluss wie möglich von u nach v
• Lift(u): hebt u soweit an wie möglich, ohne die Legalität der
Höhenfunktion zu verletzen.
Formal:
Push(u,v):
δ:=min{ef(u),cf(u,v)}
f(u,v):=f(u,v)+δ
cf(u,v):=cf(u,v)-δ
cf(v,u):=cf(v,u)+δ
ef(u):=ef(u)-δ
ef(v):=ef(v)+δ
Lift(u):
h(u):=min{ h(v)+1 | (u,v)∈Ef }
08.02.2010
Kapitel 8
62
Goldbergs Algorithmus
Goldbergs Algorithmus arbeitet wie folgt:
Preflow-Push Algorithmus:
for each u∈V\{s} do h(u):=0; ef(u):=0
for each (u,v)∈E do f(u,v):=0; f(v,u):=0
h(s):=|V|
for each (s,u)∈E do
f(s,u):=c(s,u); f(u,s):=-f(s,u); ef(u):=c(s,u)
while (es gibt aktiven Knoten u) do
if (es gibt zulässige Kante (u,v) )
then Push(u,v)
else Lift(u)
08.02.2010
Kapitel 8
63
Beispiel:
Kapazitäten sind rot markiert
08.02.2010
Kapitel 6
64
Beispiel:
Nach
derInitialisierungsphase:
Initialisierungsphase:
Nach der
• s wurde auf Höhe 7 geliftet. Alle
anderen Knoten stehen auf Höhe 0.
• Jede Kante aus s wurde saturiert.
Alle anderen Kanten haben Fluss 0.
Nun ist keine PUSH-Operation
anwendbar.
Anwendbare Operationen sind LIFT(u),
LIFT(v) oder LIFT(w).
08.02.2010
Kapitel 6
65
Beispiel:
Nachder
LIFT(v):
Nach
Initialisierungsphase:
Die Höhe von h(v) wurde auf
1 + min {h [u] | (v, u) ∈ Ef}
= 1 + 0 = 1 gesetzt.
Anwendbare Operationen sind nun
LIFT(u), LIFT(w) oder
PUSH(v, u), PUSH(v, w),
PUSH(v, x), PUSH(v, y),
PUSH(v, t).
08.02.2010
Kapitel 6
66
Beispiel:
Nach
Initialisierungsphase:
Nachder
PUSH(v,
y):
Anwendbare Operationen sind nun
LIFT(u), LIFT(w), LIFT(y) oder
PUSH(v, u), PUSH(v, w),
PUSH(v, x), PUSH(v, t).
08.02.2010
Kapitel 6
67
Beispiel:
Nach der Initialisierungsphase:
Nach LIFT(y):
Die Höhe h(y) wurde auf
1 + min{h[u] | (y, u) ∈ Ef}
= 1 + 0 = 1 gesetzt.
Anwendbare Operationen sind nun
LIFT(u), LIFT(w) oder
PUSH(v, u), PUSH(v, w),
PUSH(v, x), PUSH(v, t),
PUSH(y, t).
08.02.2010
Kapitel 6
68
Beispiel:
Nach der Initialisierungsphase:
Nach PUSH(y, t):
Anwendbare Operationen sind nun
LIFT(u), LIFT(w) oder
PUSH(v, u), PUSH(v, w),
PUSH(v, x), PUSH(v, t).
Der Algorithmus wird fortgeführt,
bis weder PUSH noch LIFT
Operationen anwendbar sind.
08.02.2010
Kapitel 8
69
Goldbergs Algorithmus
Lemma 6.36: Zu jedem Zeitpunkt des Algorithmus gilt ef(s)≤0
und für alle Knoten v∈V\{s}, dass ef(v)≥0.
Beweis:
• Wir führen eine vollständige Induktion über die Anzahl der
ausgeführten Push und Lift Operationen durch.
• Anfangs ist das Lemma offensichtlich wahr.
• Wir nehmen also an, es ist zu einem Zeitpunkt wahr.
• Dann erhält jede Flussveränderung in der Push Operation
aufgrund der Wahl von δ die Eigenschaft, dass ef(v)≥0 für alle
v∈V\{s}. (Lift ändert nichts an ef(v).)
• Es gilt also Σu∈V\{s} f(V,u) ≥ 0.
• Desweiteren gilt für jede antisymmetrische Funktion f:
Σu∈V f(V,u) = 0.
• Daraus folgt, dass ef(s)=f(V,s)≤0 sein muss.
08.02.2010
Kapitel 8
70
Goldbergs Algorithmus
Lemma 6.37: Jeder Lift(u) Aufruf erhält die
Legalität der Höhenfunktion und erhöht h(u)
um mindestens 1.
Beweis:
• Eine Lift Operation wird nur dann für einen
Knoten u durchgeführt, wenn es keine
zulässige Kante (u,v) gibt und damit
h(u)≤h(v) für alle (u,v)∈Ef ist.
• Da die neue Höhe h´(u)=min{h(v)+1|(u,v)∈Ef}
ist, folgt, dass h´(u)>h(u) und h´(u)≤h(v)+1
für alle (u,v)∈Ef ist.
08.02.2010
Kapitel 8
71
Goldbergs Algorithmus
Lemma 6.38 (Superoptimalität): Für einen legalen Präfluss f und
eine legale Höhenfunktion h gibt es keinen augmentierenden
Pfad in Gf.
Beweis:
• Angenommen, es gäbe einen augmentierenden Pfad
(s=v1,v2,…,vl=t) in Gf.
• Da die Höhen der Knoten mit der Zeit nur anwachsen können
(siehe Lemma 6.37), gilt h(s)≥n, und da t niemals aktiv sein
kann, gilt h(t)=0.
• Daraus folgt, dass
n ≤ h(s) ≤ h(v2)+1 ≤ h(v3)+2 ≤ … ≤ h(t)+l-1 = l-1 ≤ n-1
da der augmentierende Pfad einfach ist und somit höchstens
n Knoten enthalten kann.
• Wir haben also einen Widerspruch.
08.02.2010
Kapitel 8
72
Goldbergs Algorithmus
Lemma 6.39 (Optimalität): Wenn es keinen aktiven
Knoten in Gf gibt, dann ist der Präfluss ein maximaler
Fluss.
Beweis:
• Wenn es keinen Knoten u∈V\{s,t} gibt mit ef(u)>0,
dann gilt für alle Knoten u∈V\{s,t} nach Lemma 6.36,
dass ef(u)=0. Der Präfluss ist also ein legaler Fluss.
• Die Maximalität des Flusses folgt aus Lemma 6.38
und dem Maxflow-Mincut Theorem.
Wir müssen nur noch zeigen, dass der Algorithmus
terminiert.
08.02.2010
Kapitel 8
73
Goldbergs Algorithmus
Lemma 6.40: Für jeden aktiven Knoten u gibt es einen Pfad in Gf von u
nach s.
Beweis:
• Sei U die Menge der Knoten, die in Gf von u erreichbar sind.
• Falls s∉U ist, dann haben alle Knoten in U wegen Lemma 6.36
einen nichtnegativen Überschuss.
• Der Fluss in U hinein muss 0 sein, denn gäbe es eine Kante
(v,w)∈E mit v∉U und w∈U und f(v,w)>0, dann wäre auch
cf(w,v)≥f(v,w)>0.
• Also gilt
0 = Σv∈V\U f(v,U) ≥ Σv∈V\U f(v,U) - Σv∈U f(v,V\U)
= Σv∈V\U f(v,U) - Σv∈U f(v,V\U) + Σv∈U f(v,U) - Σv∈U f(v,U)
= Σv∈U ( f(V,v) – f(v,V) )
= Σv∈U\{u} ( f(V,v) – f(v,V) ) + 2ef(u) > 0
• Wir haben also einen Widerspruch, und somit muss s in U sein.
08.02.2010
Kapitel 8
74
Goldbergs Algorithmus
Lemma 6.41: Für jeden aktiven Knoten v∈V gilt h(v)≤ 2n-1.
Beweis:
• Da s aufgrund Lemma 6.36 und t per Definition nie aktiv sein
können, gilt zu jeder Zeit h(s)=n und h(t)=0.
• Betrachte einen beliebigen aktiven Knoten u∈V\{s,t}.
• Nach Lemma 6.40 ist s von u erreichbar in Gf.
• Sei p=(u=v1,v2,…,vl=s) ein einfacher Pfad von u nach s.
• Wir wissen, dass h(s)=n ist. Weiterhin gilt h(vi) ≤ h(vi+1)+1 für
alle i∈{1,...,l-1}.
• Daraus folgt, dass h(u) ≤ n+l ≤ 2n-1 ist, da der Weg t nicht
enthalten kann und somit l ≤ n-1 ist.
Jetzt sind wir soweit, den Aufwand für die Lift und Push
Operationen zu berechnen.
08.02.2010
Kapitel 8
75
Goldbergs Algorithmus
Lemma 6.42: Die Gesamtzahl der Lift Operationen ist O(n2) und
deren Zeitkomplexität ist O(n⋅m).
Beweis:
• Aufgrund von Lemma 6.37 und 6.41 können höchstens 2n-1
Lift Operationen auf jeden Knoten angewandt werden.
Insgesamt wird die Lift Operation also höchstens O(n2)-mal
ausgeführt.
• Die Kosten einer Lift(v) Operation sind gleich dem
ausgehenden Grad von v in Gf, da wir für jedes v alle seine
adjazenten Knoten überprüfen müssen.
• Die Gesamtkosten der Lift Operation sind also nach oben hin
beschränkt durch
Σv∈V (2n-1)⋅deg(v) = O(n⋅m)
wobei deg(v) der (ausgehende) Grad von Knoten v ist.
08.02.2010
Kapitel 8
76
Goldbergs Algorithmus
Eine Push Operation ist sättigend, falls δ=cf(u,v) ist, und sonst
nichtsättigend.
Lemma 6.43: Die Gesamtzahl aller sättigenden Push Operationen ist
O(n⋅m).
Beweis:
• Nach einem sättigenden Push auf (u,v) können wir nicht nochmal
Fluss von u nach v schieben, sofern v nicht vorher eine Push
Operation auf (v,u) durchgeführt hat.
• Da h(u)=h(v)+1 bei Push(u,v) und h(v)=h(u)+1 bei Push(v,u) gelten
muss und die Höhen der Knoten monoton steigen, muss sich also
die Höhe von u für einen nochmaligen sättigenden Push entlang
(u,v) um mindestens 2 erhöht haben.
• Über (u,v) kann es somit höchstens (2n-1)/2 sättigende Push
Operationen geben, woraus eine Gesamtzahl von O(n⋅m)
sättigenden Push Operationen folgt.
08.02.2010
Kapitel 8
77
Goldbergs Algorithmus
Lemma 6.44: Die Gesamtzahl der nichtsättigenden Push Operationen ist
O(n2m).
Beweis:
• Wir verwenden die Potentialfunktion Φ=Σaktive v∈V h(v).
• Am Anfang ist Φ=0, da alle Höhen aktiver Knoten gleich 0 sind. Wir
unterscheiden zwischen drei Typen von Operationen, die Φ verändern:
– Nichtsättigender Push entlang Kante (v,w): Dann wird Knoten v deaktiviert und somit
Φ um h(v) vermindert. Auf der anderen Seite kann w nun aktiv werden, was Φ um h(w)
erhöhen kann. Da aber h(v)=h(w)+1 gilt, wird Φ immer um mindestens 1 erniedrigt.
– Sättigender Push entlang Kante (v,w): Das kann Φ um höchstens 2n-1 erhöhen, da im
worst case v aktiv bleibt und w aktiv wird und h(w)≤2n-1 ist.
– Lift Operation: Die Lift Operationen erhöhen Φ zusammen um höchstens (2n-1)n.
•
•
•
Da es nur O(n⋅m) sättigende Push Operationen gibt, kann sich Φ durch
diese um höchstens O(n2m) erhöhen.
Φ kann sich durch die Lift Operationen um höchstens O(n2) erhöhen.
Ingesamt kann Φ also um höchstens O(n2m) erhöht werden. Da immer Φ≥0
gilt, ist die Anzahl der nichtsättigenden Push Operationen maximal O(n2m).
08.02.2010
Kapitel 8
78
Goldbergs Algorithmus
• Da eine Push Operation nur konstante Zeit benötigt, ergibt
sich aus den Lemmas eine Gesamtlaufzeit von O(n2m) für
Goldbergs Algorithmus.
• Durch eine verbesserte Auswahl der Push und Lift
Operationen kann man diese Laufzeit noch verbessern.
Regeln für die Wahl der aktiven Knoten:
• FIFO: Die aktiven Knoten werden in einer FIFO Queue
verwaltet, d.h. neue aktive Knoten werden hinten in die
Queue eingefügt und vorne rausgenommen. Damit ist eine
Laufzeit von O(n3) erreichbar.
• Highest-Label-First: Nimm immer den aktiven Knoten mit der
höchsten Höhe. Damit ist sogar eine Laufzeit von O( m ⋅n2)
erreichbar.
08.02.2010
Kapitel 8
79
Weitere Varianten
• Goldberg, 1985: FIFO PPA: O(|V|3).
• Goldberg, Tarjan, 1986:
Verbesserter FIFO PPA: O(|V| ⋅ |E| ⋅ log (|V|2 ⋅ |E|)).
• Goldberg, Tarjan, 1986, Cheriyan, Maheshwari 1989:
Highest Label PPA: O(|V|2 ⋅ √|E|).
• Ahuja, Orlin 1989:
Excess Scaling PPA: O(|V| ⋅ |E| log(|V|2 ⋅ |fmax|)).
• Ahuja, Orlin, Tarjan, 1989:
Improved Excess Scaling PPA:
O(|V| ⋅ |E| ⋅ log(|V|√log|fmax|/|E| + 2)).
• Randomisierte Varianten
08.02.2010
Kapitel 8
80
Geschichte des maximalen Flussalgorithmus
G = (V, E) mit |V| = n, |E| = m, U Wert des maximalen Flusses.
08.02.2010
Kapitel 6
81
Varianten des maximalen Flussproblems
… Knotenkapazitäten
wird lokal
ersetzt durch
u
u1
u2
c
c
… Ungerichtete Graphen
c
u1
c
u2
wird lokal
ersetzt durch
u2
u2
c
08.02.2010
Kapitel 6
c
c
u2
c
82
Minimaler Schnitt mit minimaler Anzahl an Kanten
Problem MINCUTMINEDGES:
Eingabe: Ein Flussnetzwerk (G, s, t, c)
Ausgabe: Ein minimaler Schnitt von (G, s, t, c) mit minimaler Anzahl
von Kanten (zwischen allen minimalen Schnitten)
Transformiere (G, s, t, c) in ein Flussnetzwerk (G, s, t, c´) mit c´(u, v) =
M ⋅ c(u, v) + 1, bei dem M ≥ |E| + 1 eine Konstante ist.
Eine Lösung des MAXFLOW Problems in (G, s, t, c´) ergibt einen minimalen
Schnitt (S, T) mit
c´(S, T) = M ⋅ c(S, T) + |{e ∈ E | e ∈ S × T}|
minimaler Schnitt in G
08.02.2010
Kapitel 6
Anzahl der Kanten
über Schnitt
83
Zirkulationen
Definition 6.45:
a) Ein Zirkulationsnetzwerk ist ein Tripel (G, b, c), wobei G = (V, E) ein direkter Graph ist
und b, c : E → ℝ mit b(e) ≤ c (e) für alle e ∈ E.
b) Eine Zirkulation f ist ein Fluss ohne eine Quelle oder Senke. Formal: f : E → ℝ mit
1. b(e) ≤ f (e) ≤ c (e) für alle e ∈ E
(Kapazitätsbedingungen)
2. Σ(u, v) ∈ E f(u, v) = Σ(v, w) ∈ E f(v, w) für alle v ∈ V
(Flusserhaltungsbedingungen)
Problem CIRCULATE:
Eingabe: ein Zirkulationsnetzwerk (G, b, c)
Ausgabe: eine Zirkulation f für (G, b, c)
Redefiniere das Residualnetzwerk Gf = (V, Ef) mit Ef = {(u, v) ∈ V × V | cf (u, v) > 0)} und
c(u, v) – f(u, v)
cf(u,v) =
c(u, v) - f(u, v) + max{f(v, u) – b(v, u), 0}
falls f(u, v) < b(u, v)
falls f(u, v) ≥ b(u, v)
Residualkapazität wie zuvor maximaler Fluss, der gestrichen werden kann
08.02.2010
Kapitel 6
84
Zirkulationen
Zirkulation CIRCULATE (Zirkulationsnetzwerk (G, b, c)) {
f(e) = 0 für alle e ∈ E;
/* initialisiere trivialen nicht zulässigen Fluss*/
while (∃e ∈ E : f(e) < b(e)) {
wähle (u, v) ∈ E mit f(u, v) < b(u, v);
/* Fluss auf Kante (u, v) ist zu klein*/
if (∃ ein Pfad P von v nach u in Gf) {
/* beachte die Redefinition von Gf ! */
C = (P, (u, v)) ist ein Kreis mit (u, v) ∈ C;
schicke δ = mine∈C cf (e) Fluss entlang des Kreises C;
/* augmentierender Fluss auf (u, v) */
} else return(NULL);
/* es existiert keine Zirkulation */
} /* while */
return(f);
} /* CIRCULATE */
Der Algorithmus CIRCULATE terminiert. Falls er eine Funktion f zurückliefert, dann ist f eine zulässige
Zirkulation für (G, b, c). Wenn der Algorithmus NULL zurückliefert, existiert keine zulässige Zirkulation
(G, b, c).
Lemma 6.46: (G, b, c) mit G = (V, E) hat eine zulässige Zirkulation ⇔ für jede Menge U ⊆ V
Σ
b(u, v) ≤
(u, v) ∈ (U, Ū)
08.02.2010
Σ
c(v, u)
(v, u) ∈ (Ū, U)
Kapitel 6
85
Zirkulationen
Lemma 6.46: (G, b, c) mit G = (V, E) hat eine zulässige
Zirkulation ⇔ für jede Menge U⊆V
Σ b(u, v) ≤ Σ c(v, u)
(u, v) ∈ (U,Ū)
(u, v) ∈ (Ū,U)
Beweis:
⇒: Sei f eine Zirkulation für (G,b,c).
• Dann gilt für alle v∈V
Σ(u,v)∈E f(u,v) = Σ(v,w)∈E f(v,w)
• Also gilt für jede Menge U⊆V:
Σ(u,v)∈(U,Ū) b(u,v) ≤ Σ(u,v)∈(U,Ū) f(u,v)
= Σ(v,w)∈(Ū,U) f(v,w)
≤ Σ(v,w)∈(Ū,U) c(v,w)
08.02.2010
Kapitel 6
86
Zirkulationen
Beweis (Fortsetzung):
⇐: Angenommen, es gibt keine Zirkulation f für (G,b,c).
• Dann gibt der Algorithm CIRCULATE NULL aus.
• D.h. es gibt eine Kante e=(u,v)∈E mit f(e)<b(e), für die es
keinen Pfad in Gf von v nach u gibt.
• Definiere U={w∈V | v⇝w in Gf}.
• Dann ist v∈U und u∈Ū und für alle (x,y)∈(U,Ū): cf(x,y)=0.
• Also ist f(e)=c(e) für alle e∈(U,Ū) und f(e)≤b(e) für alle
e∈(Ū,U).
• Also ist
Σ(u,v)∈(Ū,U) b(u,v) > Σ(u,v)∈(Ū,U) f(u,v)
= Σ(v,w)∈(U,Ū) f(v,w)
= Σ(v,w)∈(U,Ū) c(v,w)
08.02.2010
Kapitel 8
87
Untere Schranken für Kantenflüsse
Definition 6.47:
a) Ein beschränktes Flussnetzwerk ist ein Tupel (G, s, t, b, c), wobei (G, s, t, c)
ein Flussnetzwerk ist und b : E → ℝ eine Funktion, die zulässige Flüsse
nach unten beschränkt, wobei b (e) ≤ c (e) für alle e ∈ E.
b) Ein beschränkter Fluss f für (G, s, t, b, c) ist ein Fluss für (G, s, t, c) mit
b (e) ≤ f (e) für alle e ∈ E.
Problem LOWERBOUNDEDFLOW:
Eingabe: ein beschränktes Flussnetzwerk (G, s, t, b, c)
Ausgabe: ein beschränkter Fluss f für (G, s, t, b, c) mit maximalem Wert |f|
08.02.2010
Kapitel 6
88
Untere Schranken für Kantenflüsse
BOUNDEDFLOW (beschränktes Flussnetzwerk (G, s, t, b, c)){
konstruiere ein Zirkulationsnetzwerk (G′, b′, c′) mit
G′ = G + (t, s);
b′(e) = b(e); c′(e) = c(e) für alle e ∈ E;
b′(t, s) = 0; c′(t, s) = ∞;
f′ = CIRCULATE(G′, b′, c′);
if (f′ = NULL) return (NULL);
f = zulässiger Fluss für (G, s, t, b, c) erhalten aus f′ durch Löschen der Kante (t, s) und deren Fluss;
löse das MAXFLOW Problem für (G, s, t, c) mit
f als initialem Fluss und
Residualkapazitäten c′ (u, v) = c(u, v) – f(u, v) + max{f(v, u) – b(v, u), 0} für (u, v) ∈ E
f
max. zu löschender Fluss
wie zuvor
es sei g der maximale Fluss berechnet für (G, s, t, c);
return(g);
} /* BOUNDEDFLOW */
Wenn der Algorithmus BOUNDEDFLOW NULL zurückliefert, dann existiert kein beschränkter Fluss für
(G, s, t, b, c). Andernfalls liefert der Algorithmus BOUNDEDFLOW eine Lösung f für das Problem
LOWERBOUNDEDFLOW zurück.
08.02.2010
Kapitel 6
89
Minimales Flussproblem
Problem MINFLOW:
Eingabe: ein beschränktes Flussnetzwerk (G, s, t, b, c)
Ausgabe: ein beschränkter Fluss für (G, s, t, b, c) mit minimalem Wert |f|
MINIMUMFLOW (beschränktes Flussnetzwerk (G, s, t, b, c)) {
h = BOUNDEDFLOW(G, s, t, b, c);
if (h = NULL) return(NULL);
konstruiere Flussnetzwerk (GR, sR, tR, cR) mit
GR = (V, ER), ER = {(v, u)| (u, v) ∈ E};
sR = t; tR = s;
cR(u, v) = cf(u, v) für alle (u, v) ∈ ER,
wobei cf() die redefinierten Residualkapazitäten sind;
löse das MAXFLOW Problem für (GR, sR, tR, cR) und es sei
g der maximale Fluss für (GR, sR, tR, cR);
f = h – g;
return(f);
} /* MINIMUMFLOW */
08.02.2010
Wenn der Algorithmus MINIMUMFLOW
NULL zurückliefert, existiert kein zulässiger
beschränkter Fluss für (G, s, t, b, c).
Andernfalls liefert der Algorithmus MINIMUMFLOW
eine Lösung f für Problem MINFLOW zurück.
Kapitel 6
90
Flüsse mit minimalen Kosten
a)Ein Flussnetzwerk mit Kantenkosten ist ein Tupel (G, s, t, c, γ), wobei
G = (V, E) ein gerichteter Graph ist, c : E → ℕ0 Kantenkapazitäten
beschreibt, und γ : E → ℕ0 Kantenkosten beschreibt, d.h. γ(e) sind
die Kosten, um eine Einheit Fluss über e zu senden.
b) Die Kosten eines Flusses f von s nach t in G sind
γ(f) := Σe∈E γ(e) f(e).
Problem MINCOSTMAXFLOW:
Eingabe: Ein Flussnetzwerk (G, s, t, c, γ)
Ausgabe: Ein maximaler Fluss f mit minimalen Kosten γ(f).
O.B.d.A. nehmen wir an, dass G=(V,E) nur einfach gerichtete Kanten
hat, d.h. es gibt keine Knoten u,v∈V mit (u,v),(v,u)∈E.
08.02.2010
Kapitel 8
91
Flüsse mit minimalen Kosten
Sei f ein Fluss.
• Kosten eines augmentierenden Pfades p zu f:
γ(p) = Σ(u,v)∈p:(u,v)∈E cf(p)⋅γ(u,v) – Σ(u,v)∈p:(v,u)∈E cf(p)⋅γ(v,u)
• Ein augmentierender Kreis bzgl. f ist ein augmentierender
Pfad, dessen erster und letzter Knoten identisch ist.
Lemma 6.49: Zu jedem augmentierenden Kreis p bezüglich
eines Flusses f gibt es einen Fluss f´ mit |f´|=|f| und
γ(f´)=γ(f) + γ(p) .
Beweis:
• Sei f´=f+p. Dann ist f´ nach wie vor ein legaler Fluss.
• Ferner gilt für die Kosten von f´:
γ(f´) = γ(f) + Σ(u,v)∈p:(u,v)∈E cf(p)⋅γ(u,v) – Σ(u,v)∈p:(v,u)∈E cf(p)⋅γ(v,u)
= γ(f) + γ(p)
08.02.2010
Kapitel 8
92
Flüsse mit minimalen Kosten
Satz 6.50: Ein Fluss f hat minimale Kosten unter allen Flüssen
mit Flusswert |f| genau dann, wenn es keinen
augmentierenden Kreis mit negativen Kosten gibt.
Beweis:
⇒: Folgt aus Lemma 6.49.
⇐: Sei f ein Fluss, der keine minimalen Kosten besitzt. Sei g ein
Fluss mit minimalen Kosten und |g|=|f|.
• Betrachte das residuale Netzwerk Gg-f = (V,Eg-f) mit
Eg-f = E+g-f –E-g-f, wobei
E+g-f = {(u,v) | g(u,v) > f(u,v) } und
E-g-f = {(v,u) | g(u,v) < f(u,v) }
• Seien die Kantenkapazitäten definiert als cg-f=|g(e)-f(e)|.
• Dann gilt für alle Knoten v∈V, dass
Σu∈V cg-f(u,v) – Σw∈V cg-f(v,w) = 0 (Details an der Tafel)
08.02.2010
Kapitel 8
93
Flüsse mit minimalen Kosten
Beweis (Fortsetzung):
• Sei nun cmin = min{cg-f(u,v) | (u,v)∈Eg-f}.
• Wenn wir bei einem beliebigen Knoten v∈V mit Kanten in Gg-f
starten, gibt es immer eine Kante (v,w) mit cg-f(v,w)≥cmin, und
jeder noch nicht vorher besuchte Knoten muss aufgrund der
Kapazitätserhaltung auch wieder verlassen werden können.
• Da die Anzahl der Knoten durch |V| beschränkt ist, ist daher
ein augmentierender Kreis in Gg-f konstruierbar.
• Entfernt man diesen, ist die Kapazitätserhaltung nach wie vor
erfüllt.
• Gg-f kann also in eine Menge augmentierender Kreise zerlegt
werden. Wendet man diese Kreise auf f an, erhält man g.
• Da γ(g) < γ(f) ist, muss also mindestens einer dieser Kreise
negative Kosten haben.
08.02.2010
Kapitel 8
94
Flüsse mit minimalen Kosten
Falls die Kantenkapazitäten und Kantenkosten ganzzahlig und durch eine
Konstante C beschränkt sind, können wir den folgenden Polynomialzeitalgorithmus zur Berechnung eines maximalen Flusses mit minimalen
Kosten durchführen:
•
•
Verwende Ford-Fulkerson zur Berechnung eines maximalen Flusses.
Laufzeit: O(C⋅n⋅m).
Suche nach augmentierenden Kreisen mit negativen Kosten in Gf bis keine
solche Kreise mehr zu finden sind. Ein negativer augmentierender Kreis
kann mittels Bellman-Ford in O(n⋅m) Zeit gefunden werden (warum?). Jeder
solche Kreis hat eine ganzzahlige Kapazität >0 und ganzzahlige Kosten <0.
D.h. die Kosten des maximalen Flusses verringern sich um mindestens 1
für jeden solchen augmentierenden Kreis. Die Gesamtlaufzeit für diesen
Teil ist also O(C⋅n2⋅m).
Fortgeschrittenere Techniken können einen maximalen Fluss mit minimalen
Kosten auch für beliebige Kapazitäten und Kosten berechnen (siehe z.B.
das Buch von Ahuja, Magnanti und Orlin: Network Flows).
08.02.2010
Kapitel 8
95
Flüsse mit minimalen Kosten
Definition 6.48:
a) Ein Flussnetzwerk mit Kantenkosten ist ein Tupel (G, c, γ, δ), wobei G = (V, E) ein gerichteter Graph
ist, c : E → ℕ0 Kantenkapazitäten beschreibt, δ : V → ℕ0 Knotenbedarfe beschreibt, Σv∈V δ(v) = 0 ist
und γ : E → ℕ0 Kantenkosten beschreibt, d.h. γ(e) sind die Kosten, um eine Einheit Fluss über e zu
senden.
Beachte: δ(v) > 0 steht für Knoten, die Fluss konsumieren, während δ(v) < 0 Knoten bezeichnet, die
Fluss produzieren.
b) Ein Fluss f mit minimalen Kosten für (G, c, γ, δ) ist eine Funktion f : E → ℕ0 mit
1. f(e) ≤ c(e) für alle e ∈ E
(Kapazitätsbedingungen)
2. Σ(u,v)∈E f(u, v) - Σ(v,w)∈E f(v, w) = δ(v) für alle v ∈ V,
(Flusserhaltung)
der die Kosten γ(f) := Σe∈E γ(e) f(e) minimiert.
Problem MINCOSTFLOW:
Eingabe: Ein Flussnetzwerk mit Kantenkosten (G, c, γ, δ)
Ausgabe: Ein Fluss f mit minimalen Kosten für (G, c, γ, δ)
Lösung möglich durch Kombination des LOWERBOUNDEDFLOW Problems mit dem
MINCOSTMAXFLOW Problem.
08.02.2010
Kapitel 6
96
Anwendungen des maximalen Flussproblems
Scheduling auf uniformen parallelen Maschinen
Die Aufgabe ist es, eine Menge J von Jobs auf m uniformen parallelen Maschinen
auszuführen. Jeder Job j ∈ J hat
• Bearbeitungszeit pj (z. B. Anzahl der Maschinentage)
• Starttermin rj: Der erste Tag, an dem Job j verfügbar ist
• Fälligkeitsdatum dj: Der Tag, an dem Job j erledigt sein muss.
Weiterhin treffen wir folgende Annahmen:
• rj + pj ≤ dj
• Eine Maschine kann jeweils nur an einem Job arbeiten.
• Jeder Job kann jeweils nur an einer Maschine laufen.
• Unterbrechung ist erlaubt, d. h. ein Job kann unterbrochen werden und läuft
an verschiedenen Tagen auf verschiedenen Maschinen.
08.02.2010
Kapitel 6
97
Beispiel: 4 Jobs, m = 3 Maschinen
j
pj
rj
dj
1
1.5
3
5
2
1.25
1
4
3
2.1
3
7
4
3.6
5
9
Sortierung von {rj, dj | j ∈ J} resultiert in
einer Folge (1, 3, 4, 5, 7, 9), die
fünf Intervalle [1, 3], [3, 4], [4, 5], [5, 7] und
[7, 9] spezifiziert.
Es sei Tk,l das Intervall, das an Tag k startet und
am Tag l + 1 endet: T1,2, T3,3, T4,4, T5,6 und T7,8.
Transformiere das Problem in ein Flussnetzwerk
(G, s, t, c) wie rechts angegeben.
Dann gilt:
Das Schedulingproblem hat eine zulässige Lösung genau
dann, wenn der maximale Fluss in G den Wert
Σj∈J pj = 8.45 hat.
Die obige Konstruktion kann verallgemeinert werden (Übung).
08.02.2010
Kapitel 6
98
Verteiltes Rechnen auf einer Zweiprozessor Maschine
Ein Computersystem hat zwei (nicht notwendigerweise identische)
Prozessoren.
Wir wollen ein sehr großes Programm ausführen, das aus einer Menge J
von Modulen besteht, welche miteinander interagieren.
Die folgenden Kosten sind gegeben:
• αi: Kosten der Berechnung von Modul i auf Prozessor 1.
• βi: Kosten der Berechnung von Modul i auf Prozessor 2.
• γi,j: Kosten der Interprozesskommunikation wenn i und j verschiedenen
Prozessoren zugeteilt sind. Wenn i und j dem gleichen Prozessor
zugeteilt sind, betragen die Kommunikationskosten 0.
Ziel:
Finde eine Zuweisung der Module auf die Prozessoren, so dass die
Gesamtkosten bestehend aus Rechenkosten und Kommunikationskosten
minimiert werden.
08.02.2010
Kapitel 6
99
Gegeben sei eine Menge J von Modulen und Kosten αj, βj, γi,j. Konstruiere ein
Flussnetzwerk (G, s, t, c), G = (V, E) wie folgt:
• V = {s, t} ⊍ J
• E = {(s, j) | j ∈ J} ∪ {(j, t) | j ∈ J} ∪ {(i, j) | i, j ∈ J, γi,j >0}
βj wenn i = s
• c (i, j) = αi wenn j = t
γi,j wenn i ≠ s, j ≠ t
Lemma 6.52: In der obigen Konstruktion gilt: die Gesamtkosten einer optimalen
Zuweisung von Modulen auf Prozessoren ist gleich der Kapazität eines minimalen
Schnittes (S, T) von G.
08.02.2010
Kapitel 6
100
Beispiel:
j
αj
βj
1
6
4
08.02.2010
2
5
10
3
10
3
4
4
8
γi,j
1
2
3
4
1
0
5
0
0
2
5
0
6
2
Kapitel 6
3
0
6
0
1
4
0
2
1
0
101
Beispiel:
j
αj
βj
1
6
4
08.02.2010
2
5
10
3
10
3
4
4
8
γi,j
1
2
3
4
1
0
5
0
0
2
5
0
6
2
Kapitel 6
3
0
6
0
1
4
0
2
1
0
102
Tanker Scheduling
Eine Schifffahrtsgesellschaft hat vereinbart, Waren rechtzeitig zwischen mehreren
verschiedenen Quell-Ziel-Paaren auszuliefern. Für ihre just-in-time Waren haben die
Kunden präzise Auslieferungstermine festgelegt, an denen die Waren ihren
Bestimmungsort erreichen müssen. Die Schifffahrtsgesellschaft muss festlegen, wie
hoch die minimale Anzahl von Schiffen sein muss, damit die Auslieferungstermine der
Waren eingehalten werden können.
Beispiel:
Termine der Waren
Waren Quelle Ziel Termin
1
A
C
3
2
A
C
8
3
B
D
3
4
B
C
6
08.02.2010
Fahrzeit (voll)
C D
A 3
2
B 2
3
Fahrzeit (leer)
A
B
C 2
1
D 1
2
Kapitel 6
Netzwerk N = (VN, EN) der
zulässigen Folgen von
aufeinanderfolgenden
Schiffstouren
(i, j) ∈ EN wenn ein Schiff den
Job i ausführen kann und dann
Job j.
103
Das Netzwerk von zulässigen Sequenzen von zwei aufeinanderfolgenden
Schiffstouren wird in ein Flussmodell (G, s, t, b, c) transformiert:
• Knoten für die Schiffstouren sind verdoppelt: i → i′.
• neue Knoten s und t werden hinzugefügt.
• Kanten werden von s zu i, von i′ zu t und von i zu i′ gezogen für alle Schiffstouren i.
Außerdem werden Kanten von i′ zu j gezogen, genau dann wenn (i, j) ∈ EN.
• Alle Kanten haben Kapazität 1, und die Kanten (u, i′) haben eine untere Schranke
b(i,j) = 1.
Lemma 6.53: Jede Lösung des minimalen Flussproblems für (G, s, t, b, c)
korrespondiert zu einer Lösung für das Tanker Scheduling Problem und umgekehrt.
08.02.2010
Kapitel 6
104
Das Baseball Eliminierungsproblem
Siehe auch: T. Bernholt, A. Gülich, T. Hofmeister, N. Schmidt, I. Wegener:
Komplexitätstheorie, effiziente Algorithmen und die Bundesliga. Informatik Spektrum,
25:(6), 2002, pp 488-502.
Beispiel:
In der Deutschen Fußballliga, Saison 64/65, zwei
Runden vor dem Ende der Saison sah die Tabelle aus wie
rechts angegeben. Für Sieg/Unentschieden/Niederlage
erhielt ein Team damals 2/1/0 Punkte. Ist 1860 München
noch ein Kandidat, der den Titel gewinnen kann?
• 1860 München hat noch zwei Spiele zu spielen, so dass
das Team noch 4 Punkte gewinnen und somit auf 37 Punkte
kommen kann. Auf den ersten Blick ist die Antwort Ja.
Stand vor den letzten zwei Runden:
1
2
3
4
Team
Punkte
Werder Bremen
37
1. FC Köln
36
Borussia Dortmund 35
1860 München
33
Aber die Dinge sind nicht so einfach…
08.02.2010
Kapitel 6
105
Die Dinge sind aber nicht so einfach. Hier sind die restlichen Spiele der ersten vier
Mannschaften:
Stand vor den letzten zwei Runden:
1
2
3
4
Team
Punkte
Werder Bremen
37
1. FC Köln
36
Borussia Dortmund 35
1860 München
33
Restliche Spiele der ersten vier:
Werder Bremen
1. FC Köln
1860 München
1. FC Nürnberg
Borussia Dortmund
Hamburger SV
-
Borussia Dortmund
1. FC Nürnberg
MSV Duisburg
Werder Bremen
1. FC Köln
1860 München
Daraus folgt, dass 1860 München die Meisterschaft nicht mehr gewinnen kann.
Warum?
08.02.2010
Kapitel 6
106
Die Dinge sind aber nicht so einfach. Hier sind die restlichen Spiele der ersten vier
Mannschaften:
Stand vor den letzten zwei Runden:
1
2
3
4
Team
Punkte
Werder Bremen
37
1. FC Köln
36
Borussia Dortmund 35
1860 München
33
Restliche Spiele der ersten vier:
Werder Bremen
1. FC Köln
1860 München
1. FC Nürnberg
Borussia Dortmund
Hamburger SV
-
Borussia Dortmund
1. FC Nürnberg
MSV Duisburg
Werder Bremen
1. FC Köln
1860 München
Daraus folgt, dass 1860 München die Meisterschaft nicht mehr gewinnen kann.
• Werder Bremen, der 1. FC Köln und Borussia Dortmund haben noch zwei Spiele untereinander
zu spielen, daher erhalten sie mindestens 4 zusätzliche Punkte. Zusammen haben sie dann
mindestens 37 + 36 + 35 + 4 = 112 Punkte, also muss einer von ihnen mindestens ⌈112/3⌉ = 38
Punkte haben.
• Eine andere Argumentation ist die folgende: Wir nehmen an, dass 1860 München mit 37 Punkten
Tabellenerster wird. Aber dann muss Werder Bremen die restlichen zwei Spiele verlieren.
Borussia Dortmund hat, nachdem sie gegen Werder Bremen gewonnen haben, 37 Punkte und
müssen gegen den 1. FC Köln verlieren. Aber dann hat der 1. FC Köln 38 Punkte (ein Widerspruch).
08.02.2010
Kapitel 6
107
Formales Modell
n Mannschaften 1,2, . . ., n spielen mehrere Runden gegeneinander um die
Meisterschaft. Wir befinden uns in der Mitte der Saison und wollen wissen, ob unser
Lieblingsteam n noch Meister werden kann. Es gelte, dass Mannschaft i genau w(i) der
bisher gespielten Spiele gewonnen hat, 1 ≤ i ≤ n. Weiter sei g(i, j) die Anzahl der
Spiele, die Mannschaft i noch gegen Mannschaft j spielen muss, 1 ≤ i ≠ j ≤ n.
Wir bezeichnen Mannschaft i als eliminiert, wenn sie nicht mehr Meister werden kann.
Das Problem ist es, zu entscheiden, ob Mannschaft n eliminiert werden kann.
Beispiel:
i
1
2
3
4
w(i)
4
4
0
0
g(i,j)
1
2
3
4
1
3
1
1
2
3
1
1
3
1
1
3
Die Mannschaften erhalten 1 Punkt für einen Sieg,
0 Punkte für eine Niederlage. Unentschieden sind
nicht möglich. Mannschaft 4 hat bis zum jetzigen
Zeitpunkt 0 Siege, muss jedoch noch je einmal
gegen Mannschaft 1 und 2 antreten und noch 3mal
gegen Mannschaft 3.
4
1
1
3
-
Ist Mannschaft 4 eliminiert?
08.02.2010
Kapitel 6
108
Das bestmögliche Szenario für Mannschaft n tritt ein, wenn sie alle verbleibenden Spiele gewinnt und
somit insgesamt
W = w(n) +
n-1
Σj=1
g(j, n)
viele Punkte erreicht. Mannschaft n kann nicht eliminiert werden, wenn die restlichen Spiele zwischen
den anderen Teams so ausgehen können, dass alle anderen Teams am Ende der Saison höchstens W
Siege haben.
Es bezeichne x(i, j) die Anzahl der g(i, j) verbleibenden Spiele, die Mannschaft i gegen
Mannschaft j gewinnt. Dann gilt
n
x(i, j) + x(j, i) = g(i, j) = g(j, i),
1 ≤ i, j ≤ n
Σ
Es sei W(i) = w(i) + j=1 x(i, j) die Anzahl der Siege von Mannschaft i am Ende der Saison
1 ≤ i ≤ n. Mannschaft n kann Meister werden, wenn es eine Möglichkeit gibt, die Saison so zu Ende
zu spielen, dass gilt
W ≥ W (i), 1 ≤ i < n
08.02.2010
Kapitel 6
109
Mannschaft n kann nicht eliminiert werden, wenn es ganze Zahlen x(i, j) ≥ 0, 1 ≤ i, j ≤ n gibt,
so dass
x(i, j) + x(j, i) = g(i, j) = g(j, i), 1 ≤ i, j ≤ n
und
n-1
W = w(n) +
i
w(i)
1
4
2
4
3
0
4
0
g(i, j)
1
2
3
4
1
3
1
1
2
3
1
1
3´
1
1
3
4
1
1
3
-
08.02.2010
n
Σj=1 g(j, n) ≥ w(i) + Σj=1 x(i, j) = W (i),
1≤i<n
3
Σ
W = w(4) +
g(j, 4) = 0 + 5 = 5 Nach den drei verbleibenden
j=1
Spielen zwischen Mannschaft 1 und 2 gilt entweder
x(1, 2) ≥ 2 oder x(2, 1) ≥ 2 und daher
n
W(1) = w(1) +
Σj=1 x(1, j) ≥ 4 + 2 = 6
oder
n
W(2) = w(2) +
Kapitel 6
Σj=1 x(2, j) ≥ 4 + 2 = 6
110
Wir formulieren das Baseball Eliminationsproblem als ein maximales Flussproblem, in dem der Fluss,
der von der Quelle s zur Senke t geschickt wird, die „verbleibenden Spiele zwischen den Mannschaften
i und j“ repräsentiert, 1 ≤ i, j < n.
n-2 n-1
Σ
Σ
i=1 j=i+1
Formal konstruiere (G, s, t, c), G = (V, E) wie folgt: Es sei F =
V
=
{s, t}
⊍
∪
E
=
{(s, (i, j)) | 1 ≤ i ≠ j < n}
{(i, j) | 1 ≤ i < j < n}
⊍
{((i, j), i), ((i, j), j) | 1 ≤ i ≠ j < n}
{1, . . . , n – 1}
∪
{(i, t) | 1 ≤ i < n}
c(s, (i, j)) = g(i, j)
c((i, j), i)
08.02.2010
g(i, j).
= F
c((i, j), j)
=
F
c(i, t)
=
W – w(i)
Kapitel 6
111
Beispiel (fortgesetzt):
i
w(i)
1
4
2
4
3
0
4
0
g(i, j)
1
2
3
4
1
3
1
1
2
3
1
1
3´
1
1
3
4
1
1
3
-
Der maximale Fluss ist 4 < 5 = F,
d.h. kein gültiger Ausgang möglich.
Lemma 6.54: Mannschaft n ist nicht eliminiert, genau dann wenn der maximale
Fluss in G gleich F ist.
08.02.2010
Kapitel 6
112
Netzwerkzuverlässigkeit testen
Gegeben ist ein (ungerichtetes) Netzwerk N = (VN, EN) (z. B. ein Eisenbahnnetzwerk), und wir müssen
die Kanten des Netzwerks überwachen. Wir wollen jede Kante {i, j} ∈ EN αi,j mal testen. Aufgrund von
Ressourcenbeschränkung können wir an jedem Tag von einem Knoten j ∈ VN aus höchstens βj
inzidente Kanten testen.
Das Problem ist es, ein Schedule zu finden, das in der geringstmöglichen Anzahl von Tagen die
notwendigen Tests auf allen Kanten durchführt. Konstruiere ein Flussnetzwerk (G, s, t, c), G = (V, E)
wie folgt:
V
=
{s, t} ⊍ VN ⊍ EN
E
=
{(s, j) | j ∈ VN}
∪
{(i, (i, j)) | (i, j) ∈ EN}
c (i, (i, j))
= ∞
∪
{(j, (i, j)) | (i, j) ∈ EN}
c ((j, (i, j))
= ∞
∪
{(i, j), t) | (i, j) ∈ EN}
c ((i, j), t)
= αi,j
c (s, j)
= λβj
Das Netzwerkzuverlässigkeitsproblem ist dann, den kleinsten Wert λ∈ ℕ0 zu berechnen,
so dass ein maximaler Fluss in G alle in die Senke t eingehende Kanten saturiert.
Ein solches λ kann berechnet werden durch binäre Suche.
08.02.2010
Kapitel 6
113
Beispiel:
08.02.2010
Kapitel 6
114
k-Zusammenhang
Zur Erinnerung:
Ein Graph G = (V, E) ist stark zusammenhängend, wenn uֆG v und vֆG u für alle
Knoten u, v ∈ V.
Definition 6.55: Es sei G = (V, E) ein gerichteter Graph, es sei u, v ∈ V, es sei S, T ⊂ V.
a) Eine Menge U ⊂ V ist ein u,v-Separator, falls u ֆG-U v.
b) Eine Menge U ⊂ V ist ein S,T-Separator, falls u ֆG-U v für alle u ∈ S, v ∈ T.
c) Eine Menge U ⊂ V ist ein Separator von G, wenn G – U nicht stark zusammenhängend ist.
Definition 6.56: Es sei G = (V, E) ein gerichteter Graph, es sei u, v ∈ V.
a) Die Zusammenhangszahl ℋ(u, v) von G ist definiert als die Kardinalität des
kleinsten u,v-Separators U.
b) Die Zusammenhangszahl ℋ(G) von G ist definiert als minu,v∈V {ℋ(u, v)}, d.h. die
Kardinalität des kleinsten Separators von G.
c) G ist k-zusammenhängend, wenn ℋ(G) ≥ k ist.
08.02.2010
Kapitel 6
115
Beispiel: (Separatoren)
U = {u, v, w} ist ein a,b-Separator
08.02.2010
(b, a) ∈ E, also existiert kein b,a-Separator
Kapitel 6
116
Beispiel: (Separatoren)
U = {u, v, w} ist ein kleinster
a,b-Separator
08.02.2010
Es existieren 3 knotendisjunkte Pfade,
die a und b verbinden.
Kapitel 6
117
Beispiel: (Separatoren)
Es existieren drei knotendisjunkte
Pfade, die a und b verbinden.
08.02.2010
Es gibt nur einen (knotendisjunkten)
Pfad von x nach a.
Kapitel 6
118
Definition 6.57: Es sei G = (V, E) ein gerichteter Graph, es seien u, v ∈ V. Zwei Pfade P, Q von
u nach v sind knotendisjunkt, wenn sie außer u und v keinen gemeinsamen Knoten haben.
Theorem 6.58: (Menger, 1927)
Ein gerichteter Graph G = (V, E) ist k-zusammenhängend genau dann, wenn für zwei beliebige
Knoten u,v ∈ V mit (u, v)∉E k knotendisjunkte Pfad von u nach v in G existieren.
(ohne Beweis).
Aus einem gerichteten Graphen G… … konstruiere ein ENZ durch Verdopplung aller Knoten u∉{s, t}.
Theorem 6.59: Gegeben sei ein gerichteter Graph G = (V, E). Die Zusammenhangszahl ℋ(G)
und ebenso ein Knotenseparator U ⊂ V mit |U| = ℋ(G) kann in Zeit O( |V|3/2 ‧ |E|)
berechnet werden.
08.02.2010
Kapitel 6
119
Ein Algorithmus zur Berechnung von ℋ(G) und eines Knoten-Separators U (Beweis von
Theorem 6.59)
CONNECTIVITY(Graph G = (V, E)) {
/* V = {v1, v2, …, vn} */
k = ∞;
wähle ein vi ∈ V
for all v ∈ V {
berechne minimalen v‘i,v-Separator Uvi,v;
/* | Uvi,v| := ∞, if (vi, v) ∈ E */
k = min{k, |Uvi,v|};
berechne minimalen v‘,vi-Separator Uv,vi ;
/* | Uv,vi| := ∞, if (vi, v) ∈ E */
k = min{k, |Uv,vi|};
} /* for all v … */
return(k);
/* k = ℋ(G) */
} /* CONNECTIVITY */
CONNECTIVITY kann erweitert werden, so dass ℋ(G) und ein Separator U mit
|U| = ℋ(G) berechnet werden.
08.02.2010
Kapitel 6
120
Ausblick
Weiter mit String Matching Algorithmen...
08.02.2010
Kapitel 8
121
Herunterladen