Wiederholungskurs zu den Grundlagen der Diskreten Optimierung

Werbung
Wiederholungskurs zu den Grundlagen der
Diskreten Optimierung
von Dipl.-Math. Wolfgang Kinzner
im Wintersemester 2009/2010
Zentrum für Mathematik
Technische Universität München
7. April 2010
Giederung:
• Grundlagen der Graphentheorie
• Kürzeste Wege
• Minimal aufspannende Bäume und Matroide
• MaximalFluss-Problem und bipatites Matching
1
Graphentheorie
Grundlagen
Übung 1
Sind folgende Aussagen richtig oder falsch?
(a) Stabile Mengen sind Wälder, Pfade sind Bäume.
(b) Ein Graph ist genau dann ein Baum, wenn je zwei Knoten durch einen
Pfad verbunden sind.
(c) Ein Graph mit n Knoten und n − 1 Kanten ist ein Baum.
(d) Ein Wald mit n Knoten und n − 1 Kanten ist ein Baum.
(e) Bäume und Wälder sind bipartit.
2
Speicherung von Graphen
Sei G = (V, E) ist ein ungerichteter ungewichteter Graph mit V = [n] (d.h.
|V | = n) und |E| = m.
(1) Adjazenzmatrix:
(n × n)-Matrix A = (aij )1≤i,j≤n
mit aij =
Vorteil:




a11
 ..
= .
an1

. . . a1n
.. 
..
.
. 
. . . ann


Nachteil:
(2) Adjazenzliste:
Feld von n Listen, eine für jeden Knoten in V .
1 → ...
..
..
..
.
.
.
v
..
.
n
→
..
.
→
v1
..
.
...
→
v2
→ ... →
mit N (v) =
Vorteil:
Nachteil:
3
vk
Übung 2
Sei G ein ungerichteter Graph mit n Knoten, der durch seine Adjazenzmatrix A = (aij ) ∈ Rn×n gegeben ist. Zeigen Sie, dass man mit einer MatrixMultiplikation und O(n2 ) weiteren Schritten überprüfen kann, ob G ein Dreieck
besitzt.
4
Tiefen- und Breitensuche
Sei G = (V, E) ist ein ungerichteter ungewichteter Graph mit |V | = n und
|E| = m.
Funktionsweise Tiefensuche/Depth-First Search (DFS):
•
•
•
•
Laufzeit:
Algorithmus 1 (Tiefensuche)
Input: Graph G = (V, E) in Form einer Adjazenzliste.
Output: Kantenmengen T und B mit B ∪ T = E
Alle Knoten seien unmarkiert.
1. Setze T := ∅, B := ∅.
2. Für alle v ∈ V führe aus
Ist v unmarkiert, dann CALL SEARCH(v).
END
3. Gib T und B aus.
Algorithmus 2 (SEARCH(v))
1. Markiere v.
2. Für alle Knoten w ∈ N (v) führe aus:
3. Ist w markiert und vw ∈
/ T ∪ B, setze B := B ∪ {vw}.
4. Ist w unmarkiert, setze T := T ∪ {vw} und CALL SEARCH(w).
END
END SEARCH
5
Funktionsweise Breitensuche/Breath-First Search (BFS):
•
•
•
•
Laufzeit:
Algorithmus 3 (Breitensuche)
Input: Graph G = (V, E) in Form einer Adjazenzliste.
Output: Kantenmengen T und B mit B ∪ T = E
Alle Knoten seien unmarkiert.
1. Setze T := ∅, B := ∅, W := ∅.
2. Für alle v ∈ V führe aus
Ist v unmarkiert , dann markiere v und CALL SEARCH(v).
END
3. Gib T und B aus.
Algorithmus 4 (SEARCH(v))
1. Markiere v.
2. Für alle Knoten w ∈ N (v) führe aus:
3. Ist w markiert und vw ∈
/ T ∪ B, setze B := B ∪ {vw}.
4. Ist w unmarkiert, dann markiere w, setze T = T ∪ {v, w} und füge
es hinten an die Liste W an.
END
5. Nimm nun den ersten Knoten u aus der Liste W heraus und CALL
SEARCH(u).
END SEARCH
6
Modifikationen von DFS/BFS:
• Bestimmung des Abstandes zweier Knoten v, w ∈ V (d.h. die Kantenzahl
des kürzesten Pfades zwischen v und w):
–
–
–
Laufzeit:
Bemerkung:
• Test auf Bipartitheit:
–
–
–
–
Laufzeit:
7
Übung 3
Sind die folgenden Aussagen richtig oder falsch?
(a) Man kann mit DFS/BFS in O(n) testen, ob G kreisfrei ist.
(b) Man kann mit DFS/BFS in O(n) testen, ob G zusammenhängend ist.
(c) Man kann mit DFS/BFS in O(n) testen, ob G ein Baum ist.
(d) Ist G zusammenhängend, aber kein Baum, so sind die durch BFS und DFS
konstruierten Spannbäume immer verschieden.
(e) Ist G zusammenhängend, aber kein Baum, so sind die durch BFS und
DFS, vom selben Startknoten aus, konstruierten Spannbäume immer verschieden.
8
Kürzeste Wege
Problemstellung
Gegeben: gewichteter Digraph D = (V, A, c) (|V | = n, |A| = m).
Gesucht: Weg W von einem Knoten zu allen anderen oder zu einem bestimmten
mit
Übung 4
Sei D = (V, A, c) ein gewichteter, stark zusammenhängender Digraph und v, w ∈
V . Sind die folgenden Aussagen richtig oder falsch?
(a) Gibt es in einem kürzesten v, w-Weg einen Zyklus negativer Länge, so gilt
DIST(v, w) = −∞.
Nun sei zusätzlich vorausgesetzt, dass G keine Zyklen negativer Länge enthält.
(b) Jeder kürzeste v, w-Weg enthält einen kürzesten v, w-Pfad.
(c) Ein kürzester v, w-Weg ist eindeutig.
(d) Ist c injektiv, so ist ein kürzester v, w-Weg eindeutig.
(e) Ist ṽ Zwischenknoten eines kürzesten v, w-Weges, so sind die beiden Teilwege kürzeste v, ṽ- bzw. ṽ, w-Wege.
(f ) Der aus zwei kürzesten v, ṽ- und ṽ, w-Wegen zusammengesetzte Weg ist
ein kürzester v, w-Weg.
9
Der Dijkstra-Algorithmus
Funktionsweise:
•
•
•
•
Laufzeit:
Algorithmus 5 (Dijkstra-Algorithmus)
Input: Digraph D = (V, A, c) mit Gewichten c(a) ≥ 0 für alle a ∈ A, ein
Knoten s ∈ V (und ein Knoten t ∈ V \ {s}).
Output: Kürzeste gerichtete Wege von s nach v für alle v ∈ V und ihre Länge
(bzw. ein kürzester (s, t)-Weg).
Datenstrukturen:
DIST (v) = Länge des kürzesten (s, v)-Weges.
V OR(v) = Vorgänger von v im kürzesten (s, v)-Weg.
0. Setze:
DIST (s) := 0,
DIST (v) := +∞ für alle v ∈ V \ {s},
V OR(v) := s für alle v ∈ V.
1. Alle Knoten seien unmarkiert.
2. Bestimme einen unmarkierten Knoten u, so dass DIST (u) = min{DIST (v) :
v unmarkiert}. Markiere u. (Falls u = t gehe zu 5.)
3. Für alle unmarkierten Knoten v mit vw ∈ A führe aus:
Falls DIST (v) > DIST (u) + c(uv) setze:
DIST (v) := DIST (u) + c(uv) und V OR(v) := u.
4. Sind noch nicht alle Knoten markiert, gehe zu 2.
5. Für alle markierten Knoten v ist DIST (v) die Länge des kürzesten (s, v)Weges. Falls v markiert ist und DIST (v) < +∞, so ist V OR(v) der
Vorgänger von v in einem kürzesten (u, v)-Weg, d.h. durch Rückwärtsgehen bis s kann ein kürzester (s, v)-Weg bestimmt werden. (Brechen wir
das Verfahren nicht in Schritt 2 ab und gilt am Ende DIST (v) = +∞, so
heißt das, dass es in D keinen (s, v)-Weg gibt.)
10
Übung 5
Für einen Graphen G = (V, A) betrachten wir die Reihenfolge v1 , v2 , ..., vn
mit vi ∈ V in der die Knoten von G im Dijkstra-Algorithmus markiert werden. Wir sagen dann, dass v1 , v2 , ..., vn eine (mögliche) Besuchsreihenfolge für
Dijkstra(G, v1 ) ist.
Sei G der folgende Graph mit Gewichtsfunktion c wie angegeben:
v3
v9
111111
000000
0000000
1111111
00
11
00
11
00
11
00000011001111111
111111
0000000
00
11
00
11
000000
111111
000000
111111
00
11
00
11
00
11
000
111
000000
111111
000000
111111
110011001111111
1111111110011111111111111
0000000
10111111
00000000000000
0000000
000
111
000000
00000000000000
11111111111111
0000000
1111111
10111111
000
111
000000
0000000
1111111
000000
000000010111111
1111111
3
1
v4
1
3
4
v8
2
v5
1
3
v2
1
2
v7
3
2
2
4
5
v6
v1
Welche der folgenden Aussagen sind richtig?
(a) Eine Besuchsreihenfolge für Dijkstra(G, c, v1 ) ist v1 , v4 , v9 , v8 , v6 , v5 , v2 , v7 , v3 .
(b) Eine Besuchsreihenfolge für Dijkstra(G, c, v7 ) ist v7 , v6 , v8 , v5 , v9 , v4 , v2 , v1 , v3 .
(c) Beim Ausführen von Dijkstra(G, c, v9 ) ist DIST(v9 ) stets echt kleiner
als DIST(v2 ). (“stets“ bedeutet, sobald DIST(v) < ∞ für den besagten
Knoten v.)
(d) Beim Ausführen von Dijkstra(G, c, v1 ) ist DIST(v3 ) stets echt kleiner
als DIST(v8 ).
(e) Beim Ausführen von Dijkstra(G, c, v7 ) ist DIST(u8 ) stets echt kleiner
als DIST(v9 ).
(f ) Beim Ausführen von Dijkstra(G, c, v7 ) enthält ein kürzester v7 , v9 -Pfad
immer die Kante {v6 , v9 }.
(g) Beim Ausführen von Dijkstra(G, c, v1 ) enthält ein kürzester v1 , v2 -Pfad
immer die Kante {v5 , v2 }.
11
Der Floyd-Warshall-Algorithmus
Lemma 1
~ = (V, A, c), c : E
~ → R und i, j ∈ [n] und k ∈ [0, n]. Weiter seien
Seien D
k
Pi,j
:= {P = (v1 , . . . , vr ) :
mki,j
:=
(
P ist gerichteter i, j-Pfad und v2 , . . . , vr−1 ∈ [k]} und
k
min{c(P ) : P ∈ Pi,j
}
∞
k
falls Pi,j
6= ∅,
sonst.
Dann gilt:
mki,j
=
(
falls k = 0
falls k ≥ 1.
Funktionsweise:
•
•
•
Laufzeit:
Algorithmus 6 (Floyd-Warshall)
Input: Digraph D = ([n], A, c) ohne negativ gerichtete Kreise, c : A → R.
Output: Matrix M = (mij ) ∈ Rn×n mit mij =Länge des kürzesten i, j-Weges.
1. FOR i = 1 TO n
2.
3.
FOR j = 1 TO n


0
0
mi,j := ∞


c(i, j)
falls i = j,
falls i 6= j, (i, j) ∈ A,
sonst.
4. FOR k = 1 TO n
5.
6.
FOR i = 1 TO n
FOR j = 1 TO n
7.
8. RETURN M := (mni,j )1≤i,j≤n
12
Modifikationen:
• Berechnung von kürzesten Pfaden.
k
k
Sei wi,j
der Vorgänger von j auf einem Pfad P ∈ Pi,j
mit c(P ) = mki,j .
Dann gilt
→
−
falls i 6= j und (i, j) ∈ E ,
0
wi,j
:=
sonst.
(
k−1
k−1
k−1
falls mi,j
≤ mi,k
+ mk,j
k
k ≥ 1 : wi,j =
k−1
k−1
k−1
falls mi,j
> mi,k
+ mk,j
.
Modifizierter Algorithmus gibt schließlich die Matrix der kürzesten Pfade
n
W = (wij
)1≤i,j≤n aus.
• Erkennen von negativen Zyklen.
Es gilt:
Es gibt einen Zyklus negativer Länge ⇐⇒
Sobald also im Laufe des Algorithmus in M
• Kürzeste i, j-Wege auch bei negativen Zyklen.
– Tritt bei der Ausführung des Algorithmus ein negatives Diagonalelement auf →
–
– Am Ende enthält die Matrix M
∗
∗
∗
13
Übung 6
Gegeben sei der folgende gerichtete, gewichtete Graph G = (V, E, c):
2
3
4
2
2
1
-3
-2
6
5
1
3
1
5
(a) Berechnen Sie mithilfe des Floyd-Warshall-Algorithmus einen kürzesten
Weg von v1 nach v6 und dessen Länge.
(b) Zeigen Sie, dass der Dijkstra-Algorithmus für das gleiche Problem unbrauchbar ist.
14
Minimal aufspannende Bäume, Unabhängigkeitssysteme und Matroide
Definition 1
Sei G = (V, E, c) ein zusammenhängender Graph mit c : E → R≥0 . Ein minimal aufspannender Baum (minimal spanning tree=MST) von G ist
Bemerkung 1
Die Definition kann problemlos auf Graphen mit allgemeinen Gewichtsfunktionen c : E → R erweitert werden.
Problemstellung
Gegeben: Gewichteter zusammenhängender Graph G = (V, E, c).
Gesucht: MST in G.
Übung 7
Sei G = (V, E, c) ein ungerichteter (nicht notwendigerweise zusammenhängender) Graph mit c : E → R. Zeigen Sie, dass das Problem einen Wald maximalen
Gewichts in G (d.i. ein Wald W ⊂ G mit c(W ) = max{c(W ′ ) : W ′ ⊂ G ist
Wald }) zu finden, auf das MST-Problem zurückgeführt werden kann.
15
Der Algorithmus von Prim
Funktionsweise:
Laufzeit:
Algorithmus 7 (Algorithmus von Prim)
Input: Graph G = (V, E, c), c : E → R≥0 , G zusammenhängend
Output: Baum T = (V, F )
1. Wähle beliebigen Knoten s ∈ V
2. W := {s}, F := ∅, d(s) := 0
3. forall v ∈ N (s) do V or(v) := s, d(v) := c({s, v})
4. forall v ∈ V \ (N (s) ∪ {s}) do V or(v) := N IL, d(v) := ∞
5. W 6= V
6.
y := Knoten mit minimalem d(.)-Wert in V \ W
7.
W := W ∪ {y}, F := F ∪ {{V or(y), y}}
8.
forall z ∈ N (y) ∩ (V \ W ) mit d(z) > c({y, z})
9.
10.
d(z) := c({y, z})
V or(z) := y
16
Der Algorithmus von Kruskal
Funktionsweise:
Laufzeit:
Algorithmus 8 (Algorithmus von Kruskal)
Input: Graph G = (V, E, c), Längenfunktion c : E → R≥0
Output: Baum T = (V, F )
1. Sortiere alle Kanten in E so, daß c(e1 ) ≤ . . . ≤ c(em )
2. F := ∅
3. for i = 1 to m do
Bemerkung 2
17
Übung 8
Sei G = (V, E, c) der folgende Graph:
v3
v9
11001100
111111
000000
0000000
1111111
00
11
00000011001111111
111111
0000000
1100110011001100
000000
111111
000000
111111
00
11
000
111
000000
111111
000000110011111111111111
111111
110011001111111
10111111
1111111
0000000
00000000000000
0000000
000
111
000000
10111111
00000000000000
11111111111111
0000000
1111111
000
111
000000
0000000
1111111
000000
000000010111111
1111111
3
1
v4
1
3
4
v8
2
v5
1
3
v2
1
5
v7
3
2
2
4
5
v6
v1
Welche der folgenden Aussagen sind richtig?
(a) Eine gültige Reihenfolge beim Ablaufen der Knoten im Prim-Algorithmus
ist v5 , v4 , v9 , v8 , v1 , v6 , v3 , v7 , v2 .
(b) Im Algorithmus von Prim wird der Knoten v2 stets als Letzter in den
spannenden Baum eingebunden.
(c) Im Algorithmus von Kruskal existieren unmittelbar vor dem letzten Schritt
stets die Komponenten {v2 } und V − v2 .
(d) Kein minimal spannender Baum enthält die Kanten {v1 , v5 } und {v4 , v5 }
gleichzeitig.
18
Übung 9
Betrachten Sie den folgenden Algorithmus:
Algorithmus 9 (Reverse Kruskal)
Input: Zusammenhängender Graph G = (V, E, c), Längenfunktion c : E → R≥0
Output: Baum T = (V, F )
1. Sortiere alle Kanten in E so, daß c(e1 ) ≤ . . . ≤ c(em )
2. for i = m to 1 do
3.
if G − ei zusammenhängend then G := G − ei
Zeigen Sie:
(a) Reverse Kruskal erzeugt einen aufspannenden Baum von G.
(b) Sei nun c injektiv, T R der von Reverse Kruskal erzeugte Baum und T der
durch den klassischen Algorithmus von Kruskal erzeugte Baum. Beweisen
oder widerlegen Sie, dass für die Kante em mit dem größten Gewicht in
E gilt: em ist Kante in T R ⇐⇒ em ist Kante in T .
19
Matroide
Definition 2 (Unabhängigkeitssystem, Matroid)
• Ein Unabhängigkeitssystem ist ein Paar (E, I), wobei E eine endliche
Menge ist und
(M1)
• E heißt
, die Mengen A ⊆ E mit A ∈ I heißen
die Mengen B ⊆ E mit B 6∈ I heißen
• Ein Unabhängigkeitssystem heißt Matroid, wenn außerdem noch die folgende Eigenschaft gilt:
(M2)
Definition 3 (Basis, Kreis und Rang eines Unabhängigkeitssystems)
Sei U = (E, I) ein Unabhängigkeitssystem.
Eine Menge in I heißt Basis, wenn sie
Eine Menge in I heißt Kreis, wenn sie
Weiter ist
r+ (U ) :=
der obere Rang von U , und
r− (U ) :=
Wenn
der untere Rang von U .
=: r(U ), dann heißt r(U ) Rang von U .
Lemma 2
Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt: U ist genau dann ein
Matroid, wenn
Proposition 1
Sei (E, I) ein Unabhängigkeitssystem. Dann gilt:
(a)
(b) (E, I) ist genau dann Matroid, wenn gilt:
(M2’)
20
und
Beispiele 1
(1) Matrixmatroid:
Sei A = (s1 | . . . |sn ) eine Matrix und E = {s1 , . . . , sn } die Menge der
Spalten von A. Außerdem sei
I := {F ⊆ E : F ist linear unabhängige Familie von Vektoren}.
Dann ist U = (E, I) ein
Basen:
r(U ) =
(2) Graphischer Matroid oder Kreismatroid:
Sei G = (V, E) ein Graph und sei
I := {F ⊆ E :
}.
Dann ist U = (E, I) ein
Unabhängige Mengen:
Basen:
Kreise:
r(U ) =
Übung 10
Sei (E, I) das Kreismatroid des Graphen G aus Übung 8.
Sind die folgenden Aussagen richtig?
(a) {u6 , u7 } ist in jedem Element von I enthalten.
(b) {u6 , u7 } ist in einem Element von I enthalten.
(c) {u6 , u7 } ist in genau einem Element von I enthalten.
(3) Partitionsmatroid:
Sei E eine endliche Menge, k ∈ N, (E1 , E2 , . . . , Ek ) eine Partition von E,
b1 , b2 , . . . bk ∈ N0 und
I := {I ⊆ E : |I ∩ Ei | ≤ bi , i = 1, . . . k}.
Dann ist (E, I) ist ein
(4) Sei G = (V, E) ein Graph mit E 6= ∅. Wir definieren
I := {M ⊆ E : M Matching}.
Dann ist U := (E, I) ein
Basen:
r+ (U ) =
21
Übung 11
Sei G = (V, E) ein Graph und I die Menge aller Teilmengen I von V , sodass
ein Matching M in G existiert, das alle Knoten von I überdeckt.
Zeigen Sie: (V, I) ist ein Matroid.
Bemerkung: (V, I) heißt der Matchingmatroid.
22
Maximierungsprobleme über Unabhängigkeitssystemen
Definition 4
Ein Maximierungsproblem über einem Unabhängigkeitssystem (E, I) ist gegeben durch eine Gewichtsfunktion P
ℓ : E → R≥0 (und der Vereinbraung, dass für
Mengen A ∈ I wieder ℓ(A) := e∈A ℓ(e) sein soll). Gesucht ist eine Menge
A∗ ∈ I mit
Algorithmus 10 (Greedy-Algo. zur Max. über Unabhsys.)
Eingabe: Unabhängigkeitssystem (E, I), Gewichtsfunktion ℓ : E → R≥0
Ausgabe: Ag ∈ I
1. Sortiere E = {e1 , . . . , em } so, daß ℓ(e1 ) ≥ . . . ≥ ℓ(em )
2. Ag := ∅
3. for i = 1 to m do
Definition 5
Sei U = (E, I) ein Unabhängigkeitssystem. Für F ⊆ E setzen wir wieder UF :=
(F, IF ) und
(
1
falls r+ (UF ) = 0
κ(F ) := r− (UF )
falls r− (UF ) > 0
r+ (UF )
und nenne ρ(U ) :=
den Rangquotienten von U .
Satz 1 (Hauptsatz)
Sei (E, I, ℓ) eine Maximierungsaufgabe über dem Unabhängigkeitssystem U =
(E, I) mit Greedy-Lösung Ag ⊆ E und optimaler Lösung A∗ ⊆ E. Dann gilt
und es gibt eine Gewichtsfunktion ℓ : E → R≥0 , für die die zweite Ungleichung
mit Gleichheit gilt.
Korollar 1 (Edmonds-Rado)
Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt:
U ist Matroid ⇐⇒
23
Übung 12
Sei G = (V, E) ein ungerichteter Graph.
(a) Weiter sei (E, I) mit
I := {F ⊂ E ist ein Teilmenge eines s,t-Pfades in G},
wobei s und t Knoten in V sind und t von s in G erreichbar ist, gegeben.
Zeigen sie, dass (E, I) ein Unabhängigkeitssystem, aber im Allgemeinen
keine Matroid ist.
(b) Berechnen Sie eine straffe untere Schranke für den Rang-Quotienten für
das Unabhängigkeitssystem aus (a).
24
Maximalfluss-Problem und bipartites Matching
Netzwerke
Definition 6 (Netzwerk, Fluss)
• Ein Netzwerk ist ein Tupel N = (V, A, s, t, c), wobei G = (V, A, c) ein gerichteter Graph mit Kapazitätsfunktion c : A → R≥0 ist und die
s∈
V und die
t ∈ V zwei ausgezeichnetene Knoten sind.
Für einen Knoten v ∈ V schreiben wir
N + (v) := {w ∈ V : ∃(v, w) ∈ A}
und
N − (v) := {w ∈ V : ∃(w, v) ∈ A}.
• Eine Abbildung f : A → R≥0 heisst s-t-Fluss (engl. flow) in N , wenn
–
–
gilt.
• Der Wert von f ist definiert als
val(f ) :=
Ein Fluss f hat maximalen Wert in N , falls
Flüsse f ′ in N gilt.
25
für alle
Übung 13
Sei N = (V, A, s, t, c) ein Netzwerk. Sind die folgenden Aussagen richtig oder
falsch?
(a) N besitzt einen Fluss mit maximalen Wert.
(b) Wenn f : E → R ein maximaler Fluss für N ist, dann gilt entweder
f (u, v) = 0 oder f (u, v) = c(u, v) für jede Kante (u, v) ∈ E.
(c) N besitzt einen maximalen Fluß für den gilt, dass entweder f (u, v) = 0
oder f (u, v) = c(u, v) für jede Kante (u, v) ∈ E.
(d) Ist f ein maximalen Fluss in N , so ist f eindeutig.
(e) Ist f ein maximalen Fluss in N und c injektiv, so ist f eindeutig.
26
Max-Fluss-Problem
Gegeben: Netzwerk N
Gesucht: Fluss f in N mit maximalem Wert.
Übung 14
Uberlegen Sie sich, auf welche Weise die folgenden Verallgemeinerungen des
Max-Flow-Problems auf das ursprüngliche Problem zurückgeführt werden können:
(a) Es existieren mehrere Quellen s1 , . . . , sk und Senken t1 , . . . , tl .
(b) Zusätzlich zu den Kantenkapazitäten ci sind Knotenkapazitäten di gegeben,
d.h. der Durchfluss eines jeden zulässige s-t-Flusses durch den Knoten i
darf di nicht überschreiten.
27
MaxFlowMinCut-Theorem
Definition 7 (Schnitt, Kapazität)
Eine Menge X ⊆ V heißt s-t-Schnitt (engl. cut), wenn
Die Kapazität von X ist definiert durch
cap(X) :=
Lemma 3
Sei N ein Netzwerk und f ein Fluß in N und X ein beliebiger s-t-Schnitt. Dann
gilt
val(f ) =
Satz 2 (MaxFlowMinCut-Theorem)
Sei N ein Netzwerk. Dann gilt:
Übung 15
Bestimmen Sie einen minimalen Schnitt im folgenden Graphen. Wie groß ist
der maximale s,t-Fluss? Können Sie anhand eines oder mehrerer minimaler
Schnitte einen maximalen s,t-Fluss bestimmen?
2
v1
2
v4
1
7
5
s
v3
3
4
t
4
5
6
6
v2
v5
3
28
Der Algorithmus von Ford-Fulkerson
Definition 8 (Restnetzwerk)
Sei N = (V, A, s, t, c) ein Netzwerk und f ein Fluss in N .
Das Restnetzwerk von N bezüglich f ist definiert als Nf := (V, Af , s, t, cf ),
wobei wir zunächst die Kapazitätsfunktion c mittels c(x, y) := 0 für (x, y) ∈
/ A
auf ganz V × V erweitern. Dann setzen wir

,falls f (x, y) > 0





,falls f (y, x) > 0
cf (x, y) :=





,sonst
sowie Af :=
Lemma 4
Wenn f ein Fluss in N und W ein gerichteter Pfad im Restnetzerk Nf sind,
dann sei 0 < δ := mine∈W cf (e) und definiere f ′ wie folgt:
1. Falls (x, y) ∈ W und δ < f (y, x), setze f ′ (x, y) := 0 und f ′ (y, x) :=
f (y, x) − δ.
2. Falls (x, y) ∈ W und δ ≥ f (y, x), setze f ′ (x, y) := f (x, y) + δ − f (y, x)
und f ′ (y, x) := 0.
3. Falls (x, y) 6∈ W und (y, x) 6∈ W , setze f ′ (x, y) := f (x, y).
Dann ist f ′ ein Fluss in N mit val(f ′ ) > val(f ). (Wir sagen, dass wir f ′ aus
f durch Augmentieren von f entlang von W erhalten haben.)
Algorithmus 11 (Ford-Fulkerson)
Input: Netzwerk N = (V, A, s, t, c)
Output: Fluss f
1. f := 0
2.
3.
Laufzeit:
29
Übung 16
Betrachten sie das folgende Netzwerk N mit den angegebenen Flusskapazitäten:
12
v1
v4
20
16
s
4
10
9
t
7
4
13
v2
v3
14
Berechnen Sie mit Hilfe des Algorithmus von Ford-Fulkerson einen maximalen Fluss von N . Geben Sie dabei in jedem Schritt das Restnetzwerk und den
augmentierenden Pfad an.
30
Der Algorithmus von Edmond-Karp
Dieser ist eine Modifikation des Ford-Fulkerson-Algorithmus.
Algorithmus 12 (Edmonds-Karp)
~ s, t, c)
Input: Netzwerk N = (V, E,
Output: Fluss f
1. f := 0
2. Solange ∃ augmentierenden s-t-Pfad P in Gf
2a.
Konstruktion bzw. Aktualisierung von Gf
2b.
3. Für jede Kante e auf P erhöhe den Fluss um cf (P ) = min{Restkapazität auf Kanten in P }.
Laufzeit:
31
Übung 17
Sei N = (V, A, s, t, c) ein Netzwerk. Sind die folgenden Aussagen richtig oder
falsch?
(a) Sind in N alle Kapazitäten ganzzahlig, so gibt es einen Fluss maximalen
Wertes, in dem jede Kante einen ganzzahligen Flusswert hat.
(b) Sind in N alle Kapazitäten ganzzahlig, so gibt es keinen Fluss maximalen
Wertes, in dem eine Kante einen nicht-ganzzahligen Flusswert hat.
(c) Wenn jede Kapazität in N mit einer positiven Zahl λ multipliziert wird,
dann bleibt jeder minimale Schnitt ein minimaler Schnitt des geänderten
Netzwerkes.
(d) Wenn zu jeder Kapazität in N eine positive Zahl λ addiert wird, dann
bleibt jeder minimale Schnitt ein minimaler Schnitt des geänderten Netzwerkes.
(e) Das Restnetzwerk von N zu einem gegebenen Fluss ist eindeutig.
32
Matchings
Definition 9 (Matching, maximales, größtes, perfektes, Matchingzahl)
Sei G = (V, E) ein Graph.
• Eine Menge M ⊆ E heißt Matching, falls
• M heißt
– maximales Matching, wenn
– größtes Matching, wenn
– perfektes Matching, wenn
Bemerkung 3
Es gilt: M maximales Matching
M größtes Matching
33
M perfektes Matching
Der Flussalgorithmus
Funktionsweise:
•
•
•
•
Laufzeit:
34
Übung 18
Bestimmen Sie mit Hilfe des Flussalgorithmus ein maximales Matching im folgenden Graphen:
8
6
7
3
4
1
2
35
9
5
Herunterladen