• Keine Ergebnisse gefunden

Graphen und Algorithmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Graphen und Algorithmen"

Copied!
32
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Graphen und Algorithmen

Vorlesung #4: Maximale Flüsse

WS 2007/2008

Dr. Armin Fügenschuh

Technische Universität Darmstadt

(2)

Übersicht

Definition des Maximalfluss- und des Minimalschnitt-Problems Anwendungen

Residualgraphen und augmentierende Wege Der Maximalfluss-Minimalschnitt-Satz

Algorithmus von Ford und Fulkerson Eine Variante von Edmonds und Karp Eine weitere Variante von Dinits

Algorithmus von Goldberg und Tarjan

(3)

Das Problem des maximalen Fluss

Definition 1:

Sei ein zusammenhängender Digraph mit Kapazitäten und zwei

ausgezeichneten Knoten , Quelle und Senke genannt. Das Quadrupel wird als Flussnetz bezeichnet.

Definition 2:

Sei ein Flussnetz. Ein Fluss ist eine Abbildung mit . erfüllt die Flusserhaltung am Knoten , wenn . Eine Zirkulation ist ein Fluss, der an jedem Knoten die Flusserhaltung erfüllt.

Ein - -Fluss erfüllt die Flusserhaltung an jedem Knoten .

Der Wert eines - -Flusses ist definiert als . Beispiel:

Definition 3:

Gegeben sei ein Flussnetz . Die Aufgabe, einen - -Fluss mit maximalem Wert zu finden, wird als Maximalfluss-Problem (engl. max-flow problem) bezeichnet.

D = (V, A) u : A → R+

s, t ∈ V, s "= t (D, u, s, t)

(D, u, s, t) f : A → R+ f(a) ≤ u(a) ∀ a ∈ A

v ∈ V

v ∈ V \{s, t} s t

s t val(f) := !

v:(s,v)∈A f(s, v) −

!

v:(v,s)∈A f(v, s)

(D, u, s, t) s t

s t s t s t

(3,7)

(2,4)

(1,3)

val(f) = 3 val(f) = 6

(6,7) 7

4

3

2

1 6

9 (1,1)

(2,6) (1,2)

(3,9)

(1,1) (2,2)

(3,3) (3,4)

(4,6)

(6,9)

!

w:(w,v)A f(w, v) = !

w:(v,w)A f(v, w)

f v V

(4)

Existenz von Optimallösungen des Maximalfluss-Problems

Satz 4:

Sei ein Flussnetz. Dann hat das Maximalfluss-Problem eine optimale Lösung.

Beweis:

Jeder Fluss kann als Vektor gesehen werden.

Sei die Menge der zulässigen Flussvektoren. Diese ist beschrieben durch

ist eine beschränkte, abgeschlossene Teilmenge des . Also ist kompakt (Satz von Weierstraß).

Ferner ist , da zumindest . Die Funktion ist stetig.

Es folgt, dass auf ihr Maximum annimmt, was gleichbedeutend mit der Existenz einer optimal Lösung ist.

(D, u, s, t)

f f = (fij) ∈ RA+(D) F

0 ≤ fi,j ≤ ui,j ∀ (i, j) ∈ A(D)

∀v ∈ V (D)\{s, t}

!

w:(v,w)A(D) fv,w =

!

w:(w,v)A(D) fw,v

F RA(D)

F

F != ∅ 0 ∈ F val : RA(D) → R

val F

(5)

Das Problem des minimalen Schnitts

Definition 5:

Sei ein Flussnetz und eine Teilmenge der Knoten mit . Dann wird die Teilmenge der Bögen als - -Schnitt bezeichnet.

Die Schnittkapazität ist die Summe der Bogenkapazitäten des - -Schnitts.

Definition 6:

Sei ein Flussnetz. Die Aufgabe, einen - -Schnitt mit minimalem Gewicht zu finden, wird als Minimalschnitt-Problem (engl. min-cut problem) bezeichnet.

Beispiel:

Wir haben einen Fluss mit Wert 6 und einen Schnitt mit Kapazität 6.

Im Folgenden werden wir zeigen, dass dieses kein Zufall ist, sondern auf einem fundamentalen Zusammenhang,

dem max-flow min-cut Theorem, beruht: in einem solchen

Fall beweist es, dass wir zu beiden Problemen Optimallösungen gefunden haben.

(D, u, s, t) X ⊂ V

{(i, j) ∈ A : i ∈ X, j /∈ X} s t s t

(D, u, s, t) s t

u(X)

s t

7

4

3

2

1 6

9

s t

7

4

3

2

1 6

9

s t

7

4

3

2

1 6

9

u(X) = 10 u(X) = 16 u(X) = 6

s (6,7) t

(1,1) (2,2)

(3,3) (3,4)

(4,6)

(6,9)

val(f) = 6

s X, t V (D)\X

(6)

Zusammenhang von Flüssen und Schnitten

Lemma 7:

Sei ein Flussnetz und eine Teilmenge der Knoten mit . Sei ein - -Fluss. Dann gelten:

(a) . (b) .

Bemerkungen zu (a): Für entspricht dies genau der Definition von . Für zeigt es, dass der Wert des Flusses am „anderen Ende“ ankommt.

Beweis (von Lemma 7):

(Definition)

(Flusserhaltung)

(entferne doppelte Bögen) ( )

( ) (Definition)

(D, u, s, t) X ⊂ V

f s t

val(f) ≤ u(X)

X := {s} val(f)

val(f) = !

v:(s,v)∈A f(s, v) −

!

v:(v,s)∈A f(v, s)

= !

wX

"

!

v:(w,v)A f(w, v) −

!

v:(v,w)A f(v, w)

#

= !

(w,v)A wX,v /X

f(w, v) −

!

(v,w)A v /X,wX

f(v, w) val(f) = !

(w,v)A wX,v /X

f(w, v) −

!

(v,w)A v /X,wX

f(v, w)

f ≥ 0 ≤ !

(w,v)A wX,v /X

f(w, v)

≤ !

(w,v)A wX,v /X

u(w, v)

= u(X) f ≤ u

s X, t V (D)\X

X := V (D)\{t}

(7)

Anwendungen (1): Transportkapazität auf Schienennetzen

Harris-Ross-Report (1954), geheimgehalten bis 1999 Schienennetz mit 44 Knoten und 105 Bögen

Problem des Warschauer Pakts: Transport von maximal vielen Gütern nach Westen (max-flow) Problem der „Westens“: eben dieses zu verhindern (min-cut)

(8)

1 1

Anwendung (2): Auswahlprobleme

Eine Stadt hat Einwohner , Vereine und Parteien . Jeder Einwohner ist in mindestens einem Verein und in genau einer Partei.

Jeder Verein stellt ein Mitglied auf als Abgeordneten in der Stadtversammlung.

Die Gesamtzahl je Partei in der Versammlung ist begrenzt auf Abgeordnete.

Gibt es eine Versammlung, die dieser Bedingung genügt?

Modellierung als maximaler Fluss.

Beispiel:

Wenn der Wert des Flusses gleich ist, dann gibt es eine solche Versammlung, andernfalls nicht. (Bemerke, dass jeder Fluss mit Wert einer zulässigen Versammlung entspricht, und jede zulässige Versammlung als Fluss mit Wert gesehen werden kann.)

t u1

u2

u3 1 1

1 1 1 1 1

1 1

1

1 1

1 1

1 1 1 1

1 s

R1 R2 R3 R4 R5 R6 R7

C1 C2 C3 C4

P1 P2 P3

r R1, . . . , Rr q C1, . . . , Cq p P1, . . . , Pp

Pk uk

q

q

q

(9)

Der Residualgraph

Definition 8:

Sei ein Digraph ohne gegenläufige Bögen. Für sei

der Rückwärtsbogen von und die Menge aller Rückwärtsbögen.

Setze und . (Bemerke, dass .)

Sei ein Flussnetz und ein Fluss. Die Restkapazität (auch Residualkapazität oder Residuum) ist eine Abbildung , definiert durch und für alle Bögen . (Wir schreiben auch anstelle von ).

Der Residualgraph ist definiert als . Beispiel:

Bemerkung: Wir betrachten hier (und im Folgenden) nur Digraphen ohne gegenläufige Bögen.

Digraphen mit antiparallelen Bögen würden im Residualgraphen u.U. Multibögen zur Folge haben:

Diese Einschränkung ist jedoch kein Verlust an Allgemeinheit, da man gegenläufige Bögen durch Hinzufügen weiterer Knoten „unschädlich“ machen kann:

D = (V, A)

←→

D := (V,←→ A )

←→

A := A ∪

←− A

(D, u, s, t) f

uf : ←→A → R+ uf(a) := u(a) − f(a) a ∈ A

uf(←−a ) := f(a)

←−a := (j, i) a := (i, j) ∈ A

a ←−

A := {←−a : a ∈ A}

Df := (V,{a ∈ ←→

A : uf(a) > 0})

(fi,j, ui,j) = (3,4) (5,5) (2,3)

(0,1) (2,2)

s t

D ←→

D

r(a) uf(a)

uf(i, j) = ri,j = 3 5 2 2 0

0 1

0 1

1

Df

5

2 2

1 1 1

3

D ←→

D

D! ←→

D!

←−

←−a = a

(10)

Zunehmende Wege (augmenting paths)

Definition 9:

Sei ein Flussnetz, ein Fluss, ein (ungerichteter) Weg (oder ein Kreis) in und eine reelle Zahl. Unter der Zunahme von entlang um verstehen wir folgende Operation für alle Bögen des Pfades :

Ist , dann erhöhe um .

Ist (also ), dann erniedrige um . Definition 10:

Ein -augmentierender Weg ist ein (vorwärtsgerichteter) - -Weg im Residualgraphen . Beispiel:

(D, u, s, t) f P Df

f P γ

a P

a ∈ A f(a) γ a ∈

←−

A ←−a ∈ A f(←−a ) γ

f s t Df

(fi,j, ui,j) = (3,4) (5,5) (2,3)

(0,1) (2,2)

s t

D

(5,5)

(2,2)

s t

Df D

5

2 2

1 1 1

3

t s

(4,4)

(1,3)

(1,1)

Df

5

2 2

1

1 4

s t

γ > 0

(11)

Der Satz vom zunehmenden Weg

Satz 11 (augmenting path theorem):

Ein Fluss auf einem Flussnetz ist genau dann maximal, wenn es keinen bezüglich zunehmenden Weg gibt.

Beweis:

( ) Sei ein maximaler Fluss. Angenommen, es gibt einen bzgl. zunehmenden Weg . Sei . Nach Definition des zunehmenden Weges ist .

Augmentiere entlang um . Sei der augmentierte Fluss.

Dann hat den Wert , im Widerspruch zur Maximalität.

( ) Angenommen, es gibt keinen bzgl. zunehmenden Weg .

Das heißt, es gibt im Residualgraphen keinen Weg von nach .

Sei die Menge aller Punkte , für die es einen Weg von nach in gibt.

Dann ist und .

Also definiert einen - -Schnitt . Es gibt keine Originalbögen in , die aus herauszeigen.

Also sind diese Bögen gesättigt, d.h. .

Es gibt auch keine Rückwärtsbögen , die aus herauszeigen.

Also gilt für den jew. zugehörigen Originalbogen , der in hineinzeigt, . Betrachte nun die Abschätzung aus dem Beweis von Lemma 6:

Somit ist maximal.

(D, u, s, t) f

f

γ := mina∈P uf(a)

Df

5

2 2

1

1 4

s t

= !

(w,v)A wX,v /X

f(w, v) −

!

(v,w)A v /X,wX

f(v, w)

= u(X)

val(f) = ... = !

(w,v)A wX,v /X

f(w, v)

= !

(w,v)A wX,v /X

u(w, v)

f f P

γ > 0 f

P

f! f!

γ

f P

Df s t

X v ∈ V (D) s v Df

s ∈ X t /∈ X

X s t

Df X

f(a) = u(a)

S := {(i, j) ∈ A : i ∈ X, j /∈ X}

a ∈ S

←−

a ∈ Df X

a X f(a) = 0

X = {s}

f

val(f!) = val(f) + γ > val(f)

(12)

Das Max-Flow Min-Cut Theorem und ganzzahlige Flüsse

Satz 12 (Ford, Fulkerson 1956; Elias, Feinstein, Shannon 1956):

Der maximale Wert eines - -Flusses auf einem Flussnetz stimmt mit der minimalen Kapazität eines - -Schnitts auf diesem Netz überein.

Beweis:

Die Existenz von maximalen Flüssen wurde in Satz 4 gezeigt.

Ein Fluss ist genau dann maximal, wenn die Menge aller von aus auf einem zunehmenden Weg erreichbaren Knoten nicht enthält (Beweis von Satz 11).

In diesem Fall gilt , siehe ebenfalls Beweis von Satz 11.

Satz 13:

Sei ein Flussnetz mit ganzzahligen Kapazitäten für alle . Dann gibt es einen ganzzahligen maximalen Fluss.

Beweis:

Durch für alle wird ein ganzzahliger zulässiger Fluss definiert.

Wenn dieser Fluss nicht maximal ist, gibt es einen -augmentierenden Weg . Sei . Nach Definition des zunehmenden Weges ist . Da für alle , ist auch . Insbesondere ist .

Wir augmentieren entlang um und erhalten so einen Fluss mit . Dieses Verfahren wird nun wiederholt, bis es keinen -zunehmenden Weg mehr gibt.

Dieses ist nach endlich vielen Schritten der Fall, da der Flusswert stets um eine positive ganze Zahl erhöht wird, und die Kapazität eines (minimalen oder anderen) Schnitts eine obere Schranke darstellt.

Nach Satz 11 ist der so konstruierte Fluss maximal.

(D, u, s, t) s t

s t

f X s

t val(f) = u(X)

(D, u, s, t) ui,j ∈ Z (i, j) ∈ A(D)

fi,j := 0 (i, j) ∈ A(D)

f

γ := mina∈P uf(a) γ > 0

P

uf(i, j) ∈ Z (i, j) ∈ A(D) γ ∈ Z γ ≥ 1

f P γ f(1) val(f(1)) = γ

f

(13)

Algorithmus von Ford-Fulkerson

Eingabe: Flussnetz

Ausgabe: ein - -Fluss mit maximalem Wert (1) algorithm fordFulkerson

(2) setze für alle

(3) while es gibt einen -augmentierenden Weg in do (4)

(5) augmentiere entlang um (6) end while

(7) end algorithm Bemerkungen:

Dieser Algorithmus funktioniert nur für ganzzahlige oder rationale Bogenkapazitäten.

Der Fall rationaler Kapazitäten wird auf den ganzzahligen zurückgeführt durch Multiplikation mit dem Hauptnenner.

Der Aufbau des Graphen ist in .

Die Verbesserung beträgt (mind.) 1 in jeder Runde.

Es gibt ein Fluss viele Runden.

Im Fall ganzzahliger Kapazitäten kann das Verfahren (bei schlechter Wahl der augmentierenden Wege) exponentiell viele Schritte benötigen, .

Das Verfahren ist also nicht effizient.

Für irrationale Kapazitäten kann er versagen (bei schlechter Wahl der augmentierenden Wege): Das Verfahren terminiert u.U. nicht und es konvergiert nicht gegen Optimallösung.

Das Verfahren ist in diesem Fall also nicht einmal korrekt.

(D, u, s, t)

s t f

f(a) := 0 a ∈ A

f P

γ := mina∈P uf(a)

f P γ

Df

Df O(|A|)

O(|A| · F) F := max{val(f) : f }

(14)

Algorithmus von Edmonds-Karp

Eingabe: Flussnetz

Ausgabe: ein - -Fluss mit maximalem Wert (1) algorithm edmondsKarp

(2) setze für alle

(3) while es gibt einen -augmentierenden Weg in do

(4) -augmentierender Weg in mit größtem Wert für (5) augmentiere entlang um

(6) end while (7) end algorithm

Bemerkung: Die Suche nach einem Weg in Schritt (4), dessen minimales Bogengewicht

maximal ist, erfolgt durch die Konstruktion eines maximalen gerichteten Spannbaums in mit Startknoten .

Dazu kann z.B. eine Variante von Jarniks Spannbaum-Algorithmus verwendet werden.

Es wird ein gerichteter Baum aufgebaut durch schrittweises Hinzufügen des Bogens mit der jeweils höchsten Kapazität, solange, bis einen gerichteten Weg von nach enthält.

Die Komplexität dafür ist in (siehe Laufzeitbeweis des Algorithmus von Jarnik).

(D, u, s, t)

s t f

f(a) := 0 a ∈ A f

f P γ

Df

P := f Df γ := mina∈P uf(a)

Df s

T

T s t

O(|V |2)

(15)

Zur Laufzeit des Edmonds-Karp-Algorithmus

Satz 14:

Die Edmonds-Karp-Variante des Algorithmus von Ford-Fulkerson ist für ganzzahlige Flussnetze effizient; genauer gesagt in , wobei der Wert eines maximalen Flusses ist.

Beweis:

Sei irgendein Fluss im Flussnetz .

Sei ein -augmentierender Weg in mit größtem Wert für (Schritt 4).

Sei derjenige Bogen mit (anschaulich: der „Flaschenhals“).

Sei die Menge der Knoten , die von aus erreichbar ist über Bögen in , deren jeweilige Kapazität größer als ist.

Ferner ist . Also definiert einen - -Schnitt.

Jede Kante, die über diesen Schnitt verläuft (in Richtung ) hat eine Kapazität . Damit ist (triviale Abschätzung).

Anderseits ist (Lemma 7b).

Beides zusammen bedeutet, dass gilt.

Wir augmentieren entlang um :

In jeder Iteration (Schritt 3) wächst der Fluss um mindestens einen Faktor von . Nach Iterationen gilt für den Zuwachs dann:

Also ist der Zuwachs dann größer als der maximale Flusswert, der Algorithmus terminiert.

Die Laufzeit ergibt sich aus Iterationen in (3) und für (4).

F

f (D, u, s, t)

P f Df γ

a ∈ P γ = uf(a)

X v s D

γ

t /∈ X X s t

t ≤ γ

u(X) ≤ γ · |A|

u(X) ≥ val(f)

γ ≥ val(f)/|A|

f P γ

val(f) !→ = val(f) · (1 + 1/|A|).

(1 + 1/|A|) val(f) + γ ≥ val(f) + val(f)/|A|

|A| · log F

(1 + 1/|A|)|A|·logF > 2logF = F.

O(|A| · log F) O(|V |2) O(|V |2 · |A| · log F)

(16)

Algorithmus von Dinits

Eingabe: Flussnetz

Ausgabe: ein - -Fluss mit maximalem Wert (1) algorithm dinits

(2) setze für alle

(3) while es gibt einen -augmentierenden Weg in do

(4) minimaler (bzgl. Kantenanzahl) -augmentierender Weg in (5)

(6) augmentiere entlang um (7) end while

(8) end algorithm

Bemerkung: Die Suche nach einem minimalen Weg in Schritt (4) erfolgt als eine Breitensuche.

(D, u, s, t)

s t f

f(a) := 0 a ∈ A f

γ := mina∈P uf(a)

f P γ

Df

P := f Df

(17)

Laufzeit-Analyse des Dinits-Algorithmus

Satz 14:

Die Dinits-Variante des Algorithmus von Ford-Fulkerson ist für beliebige Flussnetze effizient und in .

Der Beweis von Satz 14 beruht auf zwei Beobachtungen über die Entwicklung des Residualgraphen während der Ausführung des Algorithmus.

Sei der Fluss nach Verbesserungsschritten und sei der zugehörige Residualgraph.

(Es ist für alle und .)

Für jeden Knoten sei der Level von in einer Breitensuche in beginnend in (mit anderen Worten: die Länge des kürzesten Weges von nach in ).

Beispiel:

O(|V | · |A|2)

s t

Df(i+1)

t s

Df(i)

s t

D = Df(0)

0

1

2

0

level0(v) = 1 1

2

3

0

f(i) i Df(i)

fi,j(0) = 0 (i, j) ∈ A Df(0) = D

v ∈ V leveli(v) v Df(i)

Df(i) v

s s

(18)

Laufzeit-Analyse (Forts.)

Lemma 15:

Der Level eines Knotens nimmt während der Iterationen monoton zu: . Beweis (per Induktion über den Level-Wert ):

Für Level-Wert klar, da genau für gilt (für alle ).

Sei die Aussage wahr für alle und ein festes Level . Wir schließen auf (für alle ).

Sei und ein kürzester - -Weg in der Länge . Da ein kürzester Weg ist, gilt .

beinhaltet einen kürzesten - -Weg der Länge .

Also gilt nach Induktionsvoraussetzung: . 1. Fall, ist Bogen in .

Dann ist . 2. Fall, .

Also ist entweder der Fluss auf Bogen leer oder auf Bogen gesättigt.

Da aber , ist entweder auf nicht mehr leer oder auf nicht mehr gesättigt.

Es gilt und Bogen ist im -augmentierenden Weg enthalten.

Also ist auf einem kürzesten - -Weg in . Daher gilt:

In beiden Fällen gilt:

Bemerke: Für Knoten , zu denen es keinen - -Weg gibt, gilt .

leveli+1(v) ≥ leveli(v)

k

k = 0 leveli(v) = 0 v = s i

i k k + 1 i

v != s P = (s, . . . , w, v) s v Df(i+1) k + 1

P leveli+1(v) = leveli+1(w) + 1

P s

leveli+1(w) ≥ leveli(w) k

leveli(v) = leveli(w) − 1 leveli(v) ≤ leveli(w) + 1

w

(w, v) Df(i)

(w, v) ∈/ Df(i)

(w, v) ∈ Df(i+1) (v, w) ∈ Df(i)

f(i) (v, w) (w, v)

f(i+1) (v, w) (w, v)

(v, w) f(i)

s t Df(i) (v, w)

v != s s v

level (v) = ∞ ≥ level (v)

leveli+1(v) = leveli+1(w) + 1 leveli(w) + 1 leveli(v).

leveli(w) + 1.

(19)

Laufzeit-Analyse (Forts.)

Lemma 16:

Sei . Während der Ausführung des Algorithmus ist Bogen bzw. höchstens Mal nicht im Residualgraphen .

Beweis:

Angenommen, Bogen ist in den Residualgraphen und für , aber in keinem der Residualgraphen .

Das bedeutet, dass im -ten zunehmenden Weg ist.

Dann ist .

Ferner bedeutet es, dass im -ten zunehmenden Weg ist.

Also ist . Nach Lemma 15 gilt:

Interpretation: Die Distanz hat sich zwischen Verschwinden und Wiedererscheinen von Bogen um mindestens 2 erhöht.

Der Level-Wert ist entweder kleiner als oder unendlich ( ).

Somit kann höchstens Mal verschwinden.

Beweis (von Satz 14):

Alle Bögen können dann zusammen Mal verschwinden.

In jeder Iteration verschwindet mindestens ein Bogen.

Also terminiert der Algorithmus nach Iterationen (Schritt 3).

Der Aufwand für jede dieser Iterationen ist in für die Breitensuche (Schritt 4).

Somit ist die Komplexität in . Korrolar 17:

Für planare Graphen ist Dinits Algorithmus in , für dichte Graphen in .

a ∈ A a ←−a |V |/2

Df(i)

(w, v) Df(i) Df(j+1) i < j

Df(i+1), . . . , Df(j) (w, v) i

leveli(v) = leveli(w) + 1

levelj(w) = levelj(v) + 1

levelj(w) = levelj(v) + 1≥ leveli(v) + 1 = leveli(w) + 2.

levelj(w) − leveli(w) (w, v)

|V | ∞

(w, v) |V |/2

|A| |A| · |V |/2

|A| · |V |/2 O(|V | · |A|2)

O(|A|)

O(|V |3) O(|V |5) (v, w) j

(20)

Auf dem Weg zu einem schnelleren Verfahren: Präflüsse

Wir haben gezeigt (Satz 11), dass eine Abbildung genau dann ein maximaler - -Fluss im Flussnetz ist, wenn sie die folgenden Eigenschaften erfüllt:

1.

2.

3. es gibt keinen -zunehmenden Weg.

Der Ford-Fulkerson-Algorithmus (und seine Varianten) erfüllt während der Ausführung stets die ersten beiden Eigenschaften, und terminierten, wenn die dritte erfüllt ist.

Im Folgenden stellen wir den Algorithmus von Goldberg-Tarjan vor, der die erste und dritte Eigenschaft während der Ausführung erfüllt, und terminiert, sobald auch die zweite erfüllt ist.

Während der Ausführung ist kein Fluss. Um zu erklären, was dann ist, führen wir folgende Sprechweise ein.

Definition 18:

Sei ein Flussnetz. Eine Abbildung mit für alle und wird - -Präfluss genannt ( = excess, Überschuss).

Ein Knoten heißt aktiv, falls gilt.

0 ≤ fi,j ≤ ui,j

f

f : A → R+

s t (D, u, s, t)

f f

(D, u, s, t) f : A → R+ f(a) ≤ u(a) a ∈ A

exf(v) := !

w:(w,v)∈A fw,v − !

w:(v,w)∈A fv,w ≥ 0

!

w:(w,v)A fw,v =

!

w:(v,w)A fv,w ∀ v ∈ V \{s, t}

∀ v ∈ V \{s}

∀ (i, j) ∈ A

s t

v ∈ V \{s, t} exf(v) > 0 ex

(21)

Distanzabschätzungen

Definition 19:

Eine Funktion mit und wird als Distanzabschätzung bezeichnet.

Ein Bogen ist zulässig, wenn und . Lemma 20:

Sei eine Distanzabschätzung und . Dann ist eine Abschätzung für die Distanz (Anzahl Bögen in einem kürzesten - -Weg) in .

Beweis (durch Induktion über die Kantenzahl):

Sei die Länge eines kürzesten - -Weges in . Für ist .

Für ist

Sei die Aussage gezeigt für alle kürzesten - -Wege der Länge .

Sei ein kürzester - -Weg mit Bögen. Sei der erste Bogen dieses Weges.

Dann gilt: (Definition)

(Induktionsvoraussetzung) ( ist kürzester Weg).

ψf := ψ : V → N ψ(t) = 0, ψ(s) = n ψ(v) ≤ ψ(w) + 1 ∀(v, w) ∈ A(Df) a ∈ A(Df)

a = (v, w) ∈ ←→

A ψ(v) = ψ(w) + 1

ψ ψ(v)

v t Df

dist(v, t) v t Df

v = t ψ(t) = 0 = dist(t, t) ψ(v) ≤ ψ(t) + 1

(v, t) ∈ Df = 0 + 1 = 1 = dist(v, t).

v t k

k + 1

P v t (v, w)

ψ(v) ≤ ψ(w) + 1

≤ dist(w, t) + 1

≤ dist(v, t) P

v V \{s}

(22)

Die Unterroutinen „push“ und „relabel“

Definition 21:

Die Zunahme (Augmentierung) eines Präflusses entlang eines Bogens um ist die Operation für und für .

„push“ und „relabel“ sind zwei wichtige Subroutinen im Goldberg-Tarjan-Algorithmus.

push( ) schiebt den Überschuss (bzw. Teile davon) eines Knotens über den angegebene

Bogen, ohne die Kapazitätsgrenze von zu überschreiten bzw. negativen Fluss zu erzeugen.

(1) sub push( )

(2) , wobei (3) augmentiere entlang um (4) end sub

Bemerke: Beim Anwenden von push( ) bleibt ein Präfluss.

relabel( ) passt die Distanzabschätzung für Knoten an den aktuellen Residualgraphen an.

(1) sub relabel( ) (2)

(3) end sub Bemerke:

Für alle ist

Also bleibt auch nach Anwenden von relabel( ) eine Distanzabschätzung.

f γ

f(a) !→ f(a) + γ

a ∈ A(Df)

a ∈ A a ∈ ←−

f(a) !→ f(a) − γ A

a

a a

f a γ

γ := min{exf(v), uf(a)} a = (v, w)

v v

v

ψ(v) := min{ψ(w) + 1 : a = (v, w) ∈ A(Df)}

a

v ∈ V \{s, t}, (v, w) ∈ A(Df) ≤ ψ(w) + 1.

f

ψ v

ψ(v) := min{ψ(u) + 1 : (v, u) A(Df)}

(23)

Der Algorithmus von Goldberg-Tarjan

Eingabe: Flussnetz , Adjazenzlisten für Ausgabe: maximaler - -Fluss

(1) algorithm goldbergTarjan (2)

(3)

(4) für alle (5) repeat

(6)

(7) for alle do (8) repeat

(9)

(10) if ist zulässig then push( ) (11) else

(12) if ist letzter Bogen in then (13) relabel( )

(14)

(15) goto (19)

(16) else end if (17) end if

(18) until (19) end for (20) until

(21) end algorithm

(D, u, s, t)

s t f

(Av)vV

←→ A

nextArc(v) := 1 v V

v Q

w := Av(nextArc(v))

(v, w) v, w

(v, w) Av

v

nextArc(v) := 1

nextArc(v) := nextArc(v) + 1

exf(v) = 0

fs,v := us,v (s, v) A, fv,w := 0 (v, w) A, s #= v ψ(s) := n, ψ(v) := 0 v V \{s}

Endknoten 1 2 3 As(·) p q Ap(·) s q t Aq(·) s p t At(·) p q

Q =

s t

2 2

1

4 3

p

q Df

s t

2 2

1

4 3

p

q D

Q := {v V \{s, t} : exf(v) > 0} s t

2 2

1

4 3

p

q Df

s t

2 2

1

4 3

p

q Df

s t

2 2

1

4 3

p

q Df

s t

2 2

1

4 3

p

q Df

s t

2 2

1

4 3

p

q Df

s t

2 1

4 3

p

q Df

1 1

(24)

Das Erhaltungslemma

Lemma 22:

Während der Ausführung des Goldberg-Tarjan Algorithmus ist stets ein Präfluss und stets eine Distanzabschätzung.

Beweis:

Es bleibt nur zu zeigen, dass auch nach push eine Distanzabschätzung ist.

Nach Anwenden von push( ) auf kommt ggfs. neu zu hinzu.

Da ein zulässiger Bogen ist, gilt .

Also: , was zu beweisen war.

Lemma 23:

relabel( ) in Schritt (13) wird nur aufgerufen, wenn aktiv und kein Bogen zulässig ist.

Beweis:

Ein Knoten bleibt so lange aktiv, bis er durch die Schritte (8)-(18) läuft.

relabel( ) wird daher nur aufgerufen, wenn auch aktiv ist.

Zu zeigen: für alle gilt , d.h. kein Bogen ist zulässig.

Seit dem letzten Aufruf von relabel( ) wurde die gesamte Adjazenzliste durchlaufen.

Zu irgendeinem Zeitpunkt zeigte also auf .

Der Zeiger wird nur erhöht, wenn die Kante, auf die er zeigt, unzulässig ist.

Das bedeutet entweder oder .

Im ersten Fall bleibt so lange, bis relabel( ) aufgerufen, denn kann bis dahin nur weiter wachsen.

Im zweiten Fall muss später ein push( ) erfolgt sein, da jetzt ist.

f ψ

ψ

a a = (v, w) ←−a = (w, v) Df

a ψ(v) = ψ(w) + 1

ψ(w) = ψ(v) − 1 ≤ ψ(v) + 1

v v (v, w)

v Q

v v

a = (v, w) A(Df) ψ(w) ψ(v)

v Av

nextArc(v) a nextArc(v)

ψ(v) < ψ(w) + 1 a /∈ A(Df)

ψ(w) ψ(v) v ψ(w)

a A(Df)

←−a

←−

(25)

Erreichbare Knoten im Residualgraphen

Lemma 24:

Sei ein - -Präfluss und eine Distanzabschätzung. Dann gilt:

(a) ist in von jedem aktiven Knoten aus erreichbar.

(b) ist in nicht erreichbar von . Beweis:

(a) Sei ein aktiver Knoten, d.h. .

Sei die Menge der von aus in erreichbaren Knoten.

Betrachte einen Bogen mit .

Angenommen, . Dann ist , also . Widerspruch. Also ist . Es gilt:

Da aber ein aktiver Knoten ist, also , muss es noch (mind.) einen Knoten geben mit .

Weil ein - -Präfluss ist, kann es sich dabei nur um handeln.

(b) Angenommen, es gibt einen - -Weg in , z.B. mit . Bemerke, dass , wobei .

Da eine Distanzabschätzung bzgl. ist, gilt für . Also ist .

Nun ist und , also heißt das: . Widerspruch.

f s t ψ = ψf

s

t s

Df Df

v

v exf(v) > 0

R v Df

(i, j) ∈ A i /∈ R, j ∈ R

fi,j > 0 (j, i) ∈ Df i ∈ R fi,j = 0 exf(w) = !

x:(x,w)∈A fx,w − !

x:(w,x)∈A fw,x ∀ w ∈ R

⇒ !

wR exf(w) = !

wR

"

!

x:(x,w)A fx,w − !

x:(w,x)A fw,x

#

=

!

(x,w)A x /R,wR

fx,w

!

(w,x)A wR,x /R

fw,x ≤ 0 .

v ∈ R exf(v) > 0 w0 ∈ R exf(w0) < 0

f s t w0 = s

s t Df P = (v0, v1, . . . , vk) v0 = s, vk = t k ≤ n − 1 n := |V |

ψ f ψ(vi) ≤ ψ(vi+1) + 1 i = 0, . . . , k − 1

ψ(s) ≤ ψ(v1) + 1 ≤ ψ(v2) + 2 ≤ . . . ≤ ψ(t) + k

ψ(s) = n ψ(t) = 0 n ≤ 0 + k = k

(26)

Korrektheit von Goldberg-Tarjan

Satz 25:

Wenn der Algorithmus von Goldberg-Tarjan terminiert, dann ist ein maximaler - -Fluss.

Beweis:

Wenn der Algorithmus terminiert, gibt es keine aktiven Knoten mehr.

Daher ist dann ein - -Fluss.

Da es keinen - -Weg in gibt, kann nicht augmentiert werden.

Somit ist maximal.

f s t

f s t

s t Df f

f

(27)

Zur Anzahl der relabel-Aufrufe

Lemma 26:

(a) nimmt niemals ab. Durch jeden Aufruf von relabel( ) nimmt zu.

(b) Es ist stets für alle Knoten , wobei . (c) relabel wird höchstens Mal aufgerufen.

Beweis:

(a) wird nur durch die Subroutine relabel verändert.

relabel wird nur aufgerufen, wenn kein Bogen zulässig ist (Lemma 23).

In diesem Fall ist für alle Bögen . Also ist .

Durch die Setzung nimmt zu.

(b) wird nur geändert, wenn aktiv ist (Lemma 23).

Nach Lemma 24a) gibt es für aktive in einen - -Weg.

Sei mit ein solcher Weg.

Dann gilt:

(c) Bei jedem relabel-Aufruf nimmt zu, siehe a).

Jeder Knoten kann höchstens Mal einen neuen Wert bekommen, siehe b).

Es gibt Knoten, also maximal Aufrufe von relabel.

ψ(v) v ψ(v)

ψ(v) ≤ 2n − 1 v ∈ V n := |V |

2n2

ψ

(v, w)

ψ(v) < ψ(w) + 1 (v, w) ∈ A(Df) ψ(v) < min{ψ(w) + 1 : (v, w) ∈ A(Df)}

ψ(v) := min{ψ(w) + 1 : (v, w) ∈ A(Df)} ψ(v)

ψ(v) v

Df

v v s

P = (v0, v1, . . . , vk) v0 = v, vk = s

ψ(v) = ψ(v0) ≤ ψ(v1) + 1 ≤ ψ(v2) + 2 ≤ . . . ≤ ψ(vk) + k

= ψ(s) + k ≤ n + (n − 1) = 2n − 1.

ψ(v) 2n − 1

n (2n − 1)n ≤ 2n2

(28)

Zur Anzahl der gesättigten Schübe

Definition 27:

Ist (also ) nach dem Aufruf von push( ), dann sprechen wir von einem gesättigten Schub, andernfalls von einem ungesättigten Schub.

Lemma 28:

Die Anzahl der gesättigten Schübe ist , wobei und . Beweis:

Sei ein Bogen, der durch push( ) gesättigt wird.

Danach wird aus gelöscht und ggfs. kommt neu zu hinzu.

Vor dem Ausführen von push( ) war zulässig. Also galt .

Bevor wieder für einen Schub gewählt werden kann, muss folgendes geschehen:

muss um 2 erhöht werden.

Dadurch ist , also ist zulässig.

Dann muss push( ) ausgeführt werden, damit wieder in erscheint.

Danach muss um 2 erhöht werden.

Dadurch ist , also ist wieder zulässig.

Also: für 2 Aufrufe push( ) muss um 2 wachsen.

Nach Lemma 26b) geht das nur Mal (je Bogen).

Insgesamt gibt es daher höchstens gesättigte Schübe.

uf(a) = 0 f(a) = u(a) a

≤ m · n m := |A| n := |V |

a = (v, w) ∈ A a

a Df ←−a = (w, v) Df

a a ψ(v) = ψ(w) + 1

a ψ(w)

ψ(w) = ψ(v) + 1 ←−a

←−a

←−

←−a = a Df ψ(v)

ψ(v) = ψ(w) + 1 a a ψ(v)

!(2n − 1)/2# < n m · n

(29)

Zur Anzahl der ungesättigten Schübe

Lemma 29:

Die Anzahl der ungesättigten Schübe ist höchstens . Beweis:

In jeder inneren Iteration kann es max. einen unges. Schub pro Knoten geben.

Denn: sei und push( ) ungesättigt.

Dann ist .

Somit gilt für den Präfluss nach Ausführung von push( ).

Danach wird der nächste Knoten behandelt.

Dieses wird Mal wiederholt.

Bleibt zu zeigen: es gibt höchstens innere Iterationen.

Bemerke: Es gibt höchstens innere Iterationen mit relabel.

Ziel: Abschätzung der inneren Iterationen ohne relabel.

Setze aktiv und , falls kein Knoten aktiv.

Es gilt , wenn Algorithmus terminiert und während der Ausführung.

Während der Ausführung verändert sich nicht-monoton.

kann nur wachsen, wenn wächst für ein (durch relabel).

Also ist das Gesamtwachstum von nach Lemma 26c) beschränkt durch .

Es bleibt nur noch zu zeigen, dass in jeder Iteration ohne relabel um mindestens 1 reduziert wird, d.h. .

4n3

v ∈ Q a = (v, w) a

γ = min{exf(v), uf(a)} = exf(v) < uf(a)

exf(v) = 0 f a

v ∈ Q

n

4n2 2n2

Ψ := max{ψ(v) : v } Ψ := 0

Ψ = 0 Ψ > 0

Ψ

Ψ ψ(v) v

Ψ 2n2

Ψ

Ψvorher − Ψnachher ≥ 1

(30)

Zur Anzahl der ungesättigten Schübe (Forts.)

Beweis von Lemma 29 (Forts.):

Behauptung: In jeder Iteration ohne relabel wird um mindestens 1 reduziert, d.h.

.

1. Fall, es gibt „nachher“ noch aktive Knoten, z.B. Knoten mit . 1. Fall, war vorher nicht aktiv.

Dann gibt es einen Knoten und es wurde push( ) aufgerufen.

2. Fall, war vorher bereits aktiv, d.h. .

Da wir eine Iteration ohne relabel betrachten, wird diese so lange wiederholt, bis der Überschuss komplett abgebaut wurde.

Am Ende ist aber noch Überschuss vorhaden, also muss von einem anderen Knoten aus push( ) aufgerufen worden sein.

In jedem Fall war auch aktiv.

Weil ein push( ) erfolgte, war zulässig, d.h. . Somit gilt:

2. Fall, „nachher“ gibt es keine aktiven Knoten mehr, also .

Da es kein relabel gab, gab es push-Operationen, z.B. push( ) für Bogen . Weil zulässig ist, gilt , also

Ψvorher − Ψnachher ≥ 1

Ψ

w ψ(w) = Ψnachher w

v v, w

w w ∈ Q

v v, w

v

v, w (v, w) ψ(v) = ψ(w) + 1

Ψnachher = 0

(v, w) v, w

(v, w) ψ(v) = ψ(w) + 1

Ψvorher ≥ ψ(v) = ψ(w) + 1 ≥ 0 + 1 = Ψnachher + 1. Ψnachher = ψ(w) = ψ(v) − 1 ≤ Ψvorher − 1.

(31)

Laufzeitkomplexität von Goldberg-Tarjan

Satz 30:

Der Algorithmus von Goldberg-Tarjan bestimmt einen maximalen - -Fluss in . Beweis:

Es gibt höchstens relabel-Aufrufe.

Jeder Aufruf ist linear in .

Damit ist der Gesamtaufwand für relabel in .

Es gibt gesättigte push-Aufrufe und ungesättigte.

Jeder Aufruf von push ist konstant in .

Damit ist der Gesamtaufwand für push in .

Also ist die Komplexität des Goldberg-Tarjan-Verfahrens in .

s t O(n3)

2n2

O(n)

O(n3)

m · n ≤ n3 4n3

O(1)

O(n3)

O(n3)

(32)

Literaturquellen

R.K. Ahuja, T.L. Magnanti, J.B. Orlin, Network Flows - Theory, Algorithms, and Applications, Prentice Hall, Upper Saddle River, 1993. (Kapitel 6-8, Seite 166-293)

J. Clark, D.A. Holton, Graphentheorie, Spektrum Akademischer Verlag, Heidelberg, 1994.

(Kapitel 8, Seite 287-320)

W.J. Cook, W.H. Cunningham, W.R. Pulleyblank, A. Schrijver, Combinatorial Optimization, Wiley Interscience, New York, 1998. (Kapitel 3, Seite 37-90)

T.H. Cormen, C.E. Leiserson, R.E. Rivest, C. Stein, Introduction to Algorithms, 2nd Edition, McGraw-Hill Book Company, Boston, 2001. (Kapitel 26, Seite 643-700)

J. Erickson, Algorithms, Lecture Notes, University of Illinois at Urbana-Champaign, 2007.

(Kapitel 15-16)

D. Jungnickel: Graphen, Netzwerke und Algorithmen, BI Wissenschaftsverlag, Mannheim, 1994. (Kapitel 6, Seite 201-262)

B. Korte, J. Vygen: Combinatorial Optimization - Theory and Algorithms, 2nd Edition, Springer Verlag, Berlin, 2001. (Kapitel 8, Seite 153-184)

R. Möhring, Graphen und Netzwerkalgorithmen, Vorlesungsskript, 2005. (Kapitel 5) A. Schrijver: Combinatorial Optimization - Polyhedra and Efficiency. Springer Verlag, Berlin, 2003. (Kapitel 10-11, Seite 148-176)

Referenzen

ÄHNLICHE DOKUMENTE

Für einen Knoten eines Graphen ist der Grad definiert als die Anzahl der mit inzidenten Kanten.. Für einen Knoten eines Digraphen definieren wir den Ausgangsgrad

Wenn dieser Eintrag (nennen wir ihn ) in der ersten Zeile aufgezeichnet wird, dann sind alle vorherigen Knoten in der ersten Zeile gelöscht,.

Möglichkeit B: Zwei Bäume sind gleich, wenn man eine eineindeutige (bijektive) Abbildung zwischen den Knoten definieren kann, so dass zwei Urbildknoten genau dann benachbart

Ein schlichter Graph ist genau dann -fach zusammenhängend, wenn für jedes Knotenpaar von , , mindestens paarweise innerlich disjunkte - -Wege existieren.

Bemerkung: Da abgesehen vom Endknoten kein Knoten wiederholt wird, enthält auch ein Hamiltonscher Zyklus jeden Knoten von genau einmal.. Hamiltonsche Graphen sind benannt nach

Das heißt: Wenn jeder Junge Freundinnen hat und jedes Mädchen Freunde, dann kann jeder Junge eine seiner Freundinnen und jedes Mädchen einen ihrer Freunde heiraten.. Beweis

Ist ein Knoten des Graphen ein Endknoten einer Kante im Matching , dann wird als -gesättigt bezeichnet...

Wenn die Nachbarn von weniger als Farben verbrauchen, dann kann mit einer nicht verbrauchten Farbe gefärbt werden... Satz von