finale Version des Vorlesungsskripts - ZIB

finale Version des Vorlesungsskripts - ZIB finale Version des Vorlesungsskripts - ZIB

23.06.2013 Aufrufe

6.2 Der Ford-Fulkerson-Algorithmus Beweis. Ist P ein bezüglich x augmentierender [s, t]-Weg, dann sei cij − xij falls (i, j) ∈ P Vorwärtsbogen, ε := min falls (i, j) ∈ P Rückwärtsbogen. Setzen wir x ′ ij := xij ⎧ ⎪⎨ xij + ε falls (i, j) ∈ P Vorwärtsbogen, xij − ε ⎪⎩ falls (i, j) ∈ P Rückwärtsbogen, falls (i, j) ∈ A \ P , xij (6.10) (6.11) dann ist offenbar x ′ ij ein zulässiger (s, t)-Fluss mit val(x′ ) = val(x) + ε. Also kann x nicht maximal sein. Angenommen x besitzt keinen augmentierenden Weg. Dann sei W die Knotenmenge, die aus s und denjenigen Knoten v ∈ V besteht, die von s aus auf einem bezüglich x augmentierenden [s, v]-Weg erreicht werden können. Definition (6.8) impliziert xa = ca für alle a ∈ δ + (W ) und xa = 0 für alle a ∈ δ − (W ). Daraus ergibt sich val(x) = x(δ + (W )) − x(δ − (W )) = x(δ + (W )) = c(δ + (W )). Aufgrund von Lemma (6.4)(b) ist somit x maximal. ✷ Der Beweis von Satz (6.9) liefert einen Schnitt δ + (W ) mit val(x) = c(δ + (W )). Zusammen mit Lemma (6.4)(b) ergibt dies einen kombinatorischen Beweis des Max-Flow- Min-Cut-Theorems. Aus dem Beweis von Satz (6.9) folgt ebenfalls, dass das lineare Programm (6.5) ganzzahlige Optimallösungen hat, falls alle Kapazitäten ganzzahlig sind. (6.12) Satz. Sei D = (V, A) ein Digraph mit ganzzahligen Bogenkapazitäten ca ≥ 0, und seien s, t ∈ V , s = t. Dann gibt es einen maximalen zulässigen (s, t)-Fluss, der ganzzahlig ist. △ Beweis. Wir führen einen Induktionsbeweis über die Anzahl der „Additionen“ augmentierender Wege. Wir starten mit dem Nullfluss. Haben wir einen ganzzahligen Flussvektor und ist dieser nicht maximal, so bestimmen wir den Wert ε durch (6.10). Nach Voraussetzung ist ε ganzzahlig, und folglich ist der neue durch (6.11) festgelegte Flussvektor ebenfalls ganzzahlig. Bei jeder Augmentierung erhöhen wir den Flusswert um mindestens eins. Da der maximale Flusswert endlich ist, folgt die Behauptung aus Satz (6.9). ✷ Wir können nun den Ford-Fulkerson-Algorithmus angeben: (6.13) Ford-Fulkerson-Algorithmus. Eingabe: Digraph D = (V, A) mit Bogenkapazitäten ca ∈ R, ca ≥ 0 für alle Bögen a ∈ A und zwei Knoten s, t ∈ V , s = t. Ausgabe: Ein zulässiger (s, t)-Fluss x mit maximalem Wert val(x) und ein kapazitätsminimaler (s, t)-Schnitt δ + (W ). 1. (Initialisierung) Sei x = (xij) ∈ R A ein zulässiger (s, t)-Fluss. Hier verwendet man am besten eine schnelle Heuristik zur Auffindung eines „guten“ Flusses. Wenn einem nichts einfällt, setzt man z. B. xij = 0 für alle (i, j) ∈ A. Lege folgende Datenstrukturen an: 121

6 Maximale Flüsse in Netzwerken W Menge der markierten Knoten U Menge der markierten, aber noch nicht überprüften Knoten VOR (n − 1)-Vektor, in dem der Vorgänger eines Knoten v auf einem augmentierenden [s, v]-Weg gespeichert wird EPS (n − 1)-Vektor, zur sukzessiven Berechnung von (6.10) Markieren und Überprüfen 2. Setze W := {s}, U := {s}, EPS(s) := +∞. 3. Ist U = ∅, dann gehe zu 9. 4. Wähle einen Knoten i ∈ U aus und setze U := U \ {i}. 5. Führe für alle Bögen (i, j) ∈ A mit j ∈ W Folgendes aus: Ist xij < cij, dann setze EPS(j) := min{cij − xij, EPS(i)}, VOR(j) := +i, W := W ∪ {j}, U := U ∪ {j}. 6. Führe für alle Bögen (j, i) ∈ A mit j ∈ W Folgendes aus: Ist xji > 0, dann setze EPS(j) := min{xji, EPS(i)}, 7. Gilt t ∈ W , gehe zu 8, andernfalls zu 3. Augmentierung VOR(j) := −i, W := W ∪ {j}, U := U ∪ {j}. 8. Konstruiere einen augmentierenden Weg und erhöhe den gegenwärtigen Fluss um EPS(t), d. h. bestimme j1 = |VOR(t)|, falls VOR(t) > 0, setze xj1t := xj1t+EPS(t), andernfalls setze xtj1 := xtj1 − EPS(t). Dann bestimme j2 := |VOR(j1)|, falls VOR(j1) > 0, setze xj2j1 := xj2j1 + EPS(t), andernfalls xj1j2 := xj1j2 − EPS(t) usw. bis der Knoten s erreicht ist. Gehe zu 2. Bestimmung eines minimalen Schnittes 9. Der gegenwärtige (s, t)-Fluss x ist maximal und δ + (W ) ist ein (s, t)-Schnitt minimaler Kapazität. STOP. △ Aus den Sätzen (6.9) und (6.12) folgt, dass Algorithmus (6.13) für ganzzahlige Kapazitäten korrekt arbeitet und nach endlicher Zeit abbricht. Sind die Daten rational, so kann man (wie üblich) alle Kapazitäten mit dem kleinsten gemeinsamen Vielfachen ihrer Nenner multiplizieren. Man erhält so ein äquivalentes ganzzahliges Maximalflussproblem. 122

6.2 Der Ford-Fulkerson-Algorithmus<br />

Beweis. Ist P ein bezüglich x augmentierender [s, t]-Weg, dann sei<br />

<br />

cij − xij falls (i, j) ∈ P Vorwärtsbogen,<br />

ε := min<br />

falls (i, j) ∈ P Rückwärtsbogen.<br />

Setzen wir<br />

x ′ ij :=<br />

xij<br />

⎧<br />

⎪⎨ xij + ε falls (i, j) ∈ P Vorwärtsbogen,<br />

xij − ε<br />

⎪⎩<br />

falls (i, j) ∈ P Rückwärtsbogen,<br />

falls (i, j) ∈ A \ P ,<br />

xij<br />

(6.10)<br />

(6.11)<br />

dann ist offenbar x ′ ij ein zulässiger (s, t)-Fluss mit val(x′ ) = val(x) + ε. Also kann x nicht<br />

maximal sein.<br />

Angenommen x besitzt keinen augmentierenden Weg. Dann sei W die Knotenmenge,<br />

die aus s und denjenigen Knoten v ∈ V besteht, die von s aus auf einem bezüglich<br />

x augmentierenden [s, v]-Weg erreicht werden können. Definition (6.8) impliziert xa =<br />

ca für alle a ∈ δ + (W ) und xa = 0 für alle a ∈ δ − (W ). Daraus ergibt sich val(x) =<br />

x(δ + (W )) − x(δ − (W )) = x(δ + (W )) = c(δ + (W )). Aufgrund von Lemma (6.4)(b) ist<br />

somit x maximal. ✷<br />

Der Beweis von Satz (6.9) liefert einen Schnitt δ + (W ) mit val(x) = c(δ + (W )). Zusammen<br />

mit Lemma (6.4)(b) ergibt dies einen kombinatorischen Beweis <strong>des</strong> Max-Flow-<br />

Min-Cut-Theorems. Aus dem Beweis von Satz (6.9) folgt ebenfalls, dass das lineare Programm<br />

(6.5) ganzzahlige Optimallösungen hat, falls alle Kapazitäten ganzzahlig sind.<br />

(6.12) Satz. Sei D = (V, A) ein Digraph mit ganzzahligen Bogenkapazitäten ca ≥ 0,<br />

und seien s, t ∈ V , s = t. Dann gibt es einen maximalen zulässigen (s, t)-Fluss, der<br />

ganzzahlig ist. △<br />

Beweis. Wir führen einen Induktionsbeweis über die Anzahl der „Additionen“ augmentierender<br />

Wege. Wir starten mit dem Nullfluss. Haben wir einen ganzzahligen Flussvektor<br />

und ist dieser nicht maximal, so bestimmen wir den Wert ε durch (6.10). Nach Voraussetzung<br />

ist ε ganzzahlig, und folglich ist der neue durch (6.11) festgelegte Flussvektor<br />

ebenfalls ganzzahlig. Bei jeder Augmentierung erhöhen wir den Flusswert um min<strong>des</strong>tens<br />

eins. Da der maximale Flusswert endlich ist, folgt die Behauptung aus Satz (6.9). ✷<br />

Wir können nun den Ford-Fulkerson-Algorithmus angeben:<br />

(6.13) Ford-Fulkerson-Algorithmus.<br />

Eingabe: Digraph D = (V, A) mit Bogenkapazitäten ca ∈ R, ca ≥ 0 für alle Bögen<br />

a ∈ A und zwei Knoten s, t ∈ V , s = t.<br />

Ausgabe: Ein zulässiger (s, t)-Fluss x mit maximalem Wert val(x) und ein kapazitätsminimaler<br />

(s, t)-Schnitt δ + (W ).<br />

1. (Initialisierung) Sei x = (xij) ∈ R A ein zulässiger (s, t)-Fluss. Hier verwendet<br />

man am besten eine schnelle Heuristik zur Auffindung eines „guten“ Flusses. Wenn<br />

einem nichts einfällt, setzt man z. B. xij = 0 für alle (i, j) ∈ A. Lege folgende<br />

Datenstrukturen an:<br />

121

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!