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