Wiederholungskurs zu den Grundlagen der Diskreten

Werbung
Wiederholungskurs zu den Grundlagen der
Diskreten Optimierung
von Dipl.-Math. Wolfgang Kinzner
im Wintersemester 2008/2009
Zentrum für Mathematik
Technische Universität München
30. April 2009
Inhaltsverzeichnis
1 Grundlagen der Graphentheorie
2
2 Kürzeste Wege
7
3 Matroide und minimal aufspannende Bäume
12
4 Flüsse
17
5 Matchings
25
1
1
Grundlagen der Graphentheorie
Landau-Notation
Definition 1
Es seien f, g : N → R+
0 zwei Funktionen. Wir schreiben
f (n) = O(g(n))
:⇔
f (n) = Ω(g(n)) :⇔
f (n) = Θ(g(n)) :⇔
f (n) = o(g(n)) :⇔
f (n) = ω(g(n)) :⇔
∃c ∈ R+ ∃n0 ∈ N ∀n ≥ n0 : f (n) ≤ cg(n),
∃c ∈ R+ ∃n0 ∈ N ∀n ≥ n0 : f (n) ≥ cg(n),
∃c1 , c2 ∈ R+ ∃n0 ∈ N ∀n ≥ n0 : c1 g(n) ≤ f (n) ≤ c2 g(n),
∀c ∈ R+ ∃n0 ∈ N ∀n ≥ n0 : f (n) ≤ cg(n),
∀c ∈ R+ ∃n0 ∈ N ∀n ≥ n0 : f (n) ≥ cg(n).
Bemerkung 1 Es gelten:
f (n)
n→∞ g(n)
1. f (n) = o(g(n)) ⇔ lim
f (n)
n→∞ g(n)
2. f (n) = O(g(n)) ⇐ lim
= 0.
existiert.
3. f (n) = O(g(n)) ⇔ g(n) = Ω(f (n)).
4. f (n) = Θ(g(n) ⇔ f (n) = O(g(n)) und f (n) = Ω(g(n)).
Übung 1.1
Welche der folgenden Aussagen ist richtig?
(a)
(i) 5n2 + 9n + 7 = O(n2 ).
(ii) 5n2 + 9n + 7 = Θ(n2 ).
(iii) 5n2 + 9n + 7 = o(n2 ).
(iv) 5n2 + 9n + 7 = o(n3 ).
(v) 5n2 + 9n + 7 = Θ(n3 ).
(vi) log(n2 ) = Θ(log(n3 ))
(vii) log n = Θ(ln n)
(viii) ∀ǫ ∈ R+ ∀k ∈ N : (log n)k = o(nǫ )
(ix) 10log n = O(2n ).
(x) 10
√
n
= O(2n ).
(xi) 10n = O(2n ).
(b) Es gibt zwei Funktionen f, g, für die weder f (n) = O(g(n)) noch g(n) =
O(f (n) gilt.
2
Repräsentation von Graphen
Allgemeine Voraussetzung ab jetzt (wenn nicht anders erwähnt): G = (V, E) ist
ein ungerichteter ungewichteter Graph mit V = [n] (d.h. |V | = n) und |E| = m.
(1) Adjazenzliste Feld von n Listen, eine für jeden Knoten in V .
1 → ...
..
..
..
.
.
.
v → v1 → v2 → . . . →
..
..
..
.
.
.
n → ...
mit N (v) = {v1 , v2 , . . . , vk }.
vk
Vorteil: Kompakte Darstellung mit O(n + m) Speicher.
Nachteil: Test, ob {v, w} Kante ist, kostet in schlechtestem Fall O(n) Zeit
(2) Adjazenzmatrix:


. . . a1n
.. 
..
.
. 
. . . ann
a11
 ..
n × n Matrix A = (aij )1≤i,j≤n =  .
a
n1
1 , falls {i, j} ∈ E,
mit aij =
.
0 sonst
Vorteil: Test, ob {v, w} Kante ist, kostet O(1) Zeit
Nachteil: Adjazenzmatrix erfordert Θ(n2 ) Speicher.
Übung 1.2
Gegeben sei der folgende ungerichtete, ungewichtete Graph G:
1
4
2
3
(a) Geben Sie die Adjazenzliste und die Adjazenzmatrix A von G an.
(b) Geben Sie A2 an, ohne das Matrixprodukt (algebraisch) zu berechnen. Wie
kann man an A und A2 erkennen, das G Dreiecke enthält? Ist A2 Adjazenzmatrix eines Graphen?
3
Breiten- und Tiefensuche
Funktionsweise Breitensuche:
• Beginnt bei beliebigem Startknoten u ∈ V und läuft anschließend alle
Sphären Vi (u) ab. (i < ∞)
• Hat am Ende jeden Knoten w der Zusammenhangskomponente genau einmal besucht. (bekannt(w) = 1)
• Berechnet die Abstände aller Knoten v ∈ V von u. (abst[v] = dist(u, v))
• Berechnet (minimale) u, w-Pfade in der Zusammenhangskomponente von
u.
(w, vor(w), vor(vor(w)), . . . , u)
• Berechnet einen Spannbaum F der Zusammenhangskomponente von u.
(F = {(w, vor(w)) : w ∈ W \ {u}})
Laufzeit: O(mu + n)
(mit mu = ♯ Kanten der Zshgsk. von u)
Algorithmus 1
Input: Graph G = (V, E), Knoten u ∈ V
Output: Fnkten bekannt : V → {0, 1}, abst : V → N0 ∪ {∞},
vor : V \ {u} → V
BFS∗ (G, u)
(1)
Enqueue (Q, u)
(2)
bekannt[u] := 1; abst[u] := 0;
(3)
foreach w ∈ V \ {u} do bekannt[w] := 0; abst[w] :=
∞
(4)
while Q 6= ∅
(5)
v:= Dequeue (Q)
(6)
foreach w ∈ N (v) and bekannt[w] = 0
(7)
Enqueue (Q, w)
(8)
bekannt[w] := 1
(9)
abst[w] := abst[v] + 1
(10)
vor[w] := v
4
Modifikationen:
• Test auf Bipartitheit:
– Es gilt: G bipartit ⇐⇒ G hat 2-Färbung.
– Färbe Startknoten mit Farbe 0, seine Nachbarknoten mit Farbe 1,
deren Nachbarknoten wieder mit 0 usw.
– Bekommt Knoten dieselbe Farbe wie einer seiner Nachbarknoten ⇒
2-Färbung nicht möglich ⇒ G nicht bipartit.
– BFS fertig, dann überprüfe, ob bekannt(v) = 1 ∀v ∈ V .
∗ Ja, dann ist G bipartit.
∗ Nein, dann setze Verfahren mit neuem Knoten von anderer Zusammenhangskomponente fort.
Laufzeit: O(m + n)
• Test auf Zusammenhang:
– Nach Ausführung von BFS bekannt(v) = 1 für alle v ∈ V ⇒ G
zusammenhängend.
– Gibt es noch Knoten in Q mit bekannt(v) = 0 ⇒ G nicht zusammenhängend.
Laufzeit: O(mu + n)
• Test auf Kreisfreiheit:
– Für jedes v, aus Warteschlange entnommen, teste zusätzlich, ob v
Nachbarknoten w hat, der nicht Vorgängerknoten ist und trotzdem
bekannt ist.
– Wenn der Fall ⇒ Kreis gefunden.
– Wenn BFS gesamten Graphen (d.h. alle ZHK) durchläuft, ohne einen
Kreis zu finden ⇒ G kreisfrei.
Laufzeit: O(m + n)
• Test, ob Graph Baum ist:
– Es gilt: G ist Baum ⇔ ist zusammenhängend und kreisfrei.
– Teste also G auf die beiden Eigenschaften wie oben beschrieben.
Laufzeit: O(n)
5
Übung 1.3
Welche der folgende Aussagen richtig?
n
(a) Auf einer n-elementigen Knotenmenge gibt es genau 2( 2 ) verschiedene
Graphen.
(b) Ist G nicht zusammenhängend, dann gilt immer n > m.
(c) Ein Graph ist genau dann ein Baum, wenn je zwei Knoten durch genau
einen Pfad verbunden sind.
(d) Bäume sind immer bipartit.
(e) Man kann dist(v, w) für v, w ∈ V unter Verwendung von BFS in O(n+m)
bestimmen.
(f ) Man kann dist(v, w) für v, w ∈ V unter Verwendung von DFS in O(n+m)
bestimmen.
(g) Ist G zusammenhängend, so haben BFS und DFS eine Laufzeit von O(n).
(h) Ist G zusammenhängend, aber kein Baum, so sind die durch BFS und
DFS, vom selben Startknoten aus, konstruierten Spannbäume immer verschieden.
Übung 1.4
Sei G = (V, E) ein Graph, dann bezeichnet G := (V,
V
2
\ E) sein Komplement.
(a) Die Bildung von G kostet Θ(n2 ) Zeit. (Bei Darstellung über über Adjazenzmatrix)
(b) Zeigen sie: Ein bipartiter Graph auf n Knoten hat höchstens
n2
4
Kanten.
(c) Wie läßt sich in O(n + m) Zeit testen, ob das Komplement eines Graphen
mit n Knoten und m Kanten bipartit ist.
Übung 1.5
Sei G = (V, E) ein ungerichteter Graph ohne Schleifen. Mit δ(G) := min d(v)
v∈V
werde der Minimalgrad von G bezeichnet.
Zeigen Sie: Gilt δ(G) ≥ 2, dann hat G einen Kreis, dessen Länge mindestens
δ(G) + 1 ist.
6
2
Kürzeste Wege
Der Dijkstra-Algorithmus
Funktionsweise:
• Modifikation von BFS.
• Bildet zusätzlich Minimum über die Abstände und besucht dann den
nächst günstigen Knoten.
• Berechnet die Abstände von einem Startknoten zum allen anderen Knoten.
• Wichtige Voraussetzung: Alle Kanten haben positive Gewichte.
Laufzeit: O(n2 )
(mit Fibonacci-Heaps: O(n log n + m))
Algorithmus 2 (Dijkstra)
~ = (V, E,
~ ℓ) mit Längenfunktion ℓ : E → R+ ,
Input: Graph G
Knoten s ∈ V
Output: Funktion abst : V → R ∪ {∞}
Dijkstra(G, ℓ, s)
(1)
foreach x ∈ V \ {s} do abst[x] := ∞
(2)
abst[s] := 0
(3)
Q := V
(4)
while Q 6= ∅
(5)
x := Knoten in Q mit kleinstem abst[.]-Wert
(6)
Q := Q \ {x}
~
(7)
foreach y ∈ Q mit (x, y) ∈ E
(8)
abst[y] := min{abst[y], abst[x] + ℓ(x, y))
Modifikation:
Berechnung der kürzesten Pfade durch Speicherung des Vorgängers jedes Knotens.
Algorithmus 3
~ = (V, E,
~ ℓ) mit Längenfunktion ℓ : E → R+ ,
Input: Graph G
Knoten s ∈ V
Output: Funktion abst : V → R ∪ {∞}
Dijkstra*(G, ℓ, s)
(1)-(8) wie oben
(9)
if abst[x] + ℓ(x, y) < abst[y]
(10)
then abst[y] = abst[x] + ℓ(x, y)
(11)
vor[y] = x
(12) foreach v ∈ V
(13)
A[v, 1] = v
(14)
for i = 2 to n
(15)
A[v, i] = vor(A[v, i − 1])
7
Übung 2.1
Für einen Graphen G = (V, E) betrachten wir die Reihenfolge v1 , v2 , ..., vn mit
vi ∈ V , in der die Knoten von G im Dijkstra-Algorithmus aus Q gelöscht werden
(Zeile 6). Wir sagen dann, dass v1 , v2 , ..., vn eine (mögliche) Besuchsreihenfolge
für Dijkstra(G, v1 ) ist.
Sei G der folgende Graph mit Gewichtsfunktion ℓ wie angegeben:
u3
u9
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
u4
1
3
4
u8
2
u5
1
3
u2
1
2
u7
3
2
2
4
5
u6
u1
Welche der folgenden Aussagen sind richtig?
(a) Eine Besuchsreihenfolge für Dijkstra(G, ℓ, u1 ) ist u1 , u4 , u9 , u8 , u6 , u5 , u2 , u7 , u3 .
(b) Eine Besuchsreihenfolge für Dijkstra(G, ℓ, u7 ) ist u7 , u6 , u8 , u5 , u9 , u4 , u2 , u1 , u3 .
(c) Beim Ausführen von Dijkstra(G, ℓ, u9 ) ist abst[u9 ] stets echt kleiner als
abst[u2 ]. (“stets“ bedeutet, sobald abst[v] < ∞ für den besagten Knoten
v.)
(d) Beim Ausführen von Dijkstra(G, ℓ, u1 ) ist abst[u3 ] stets echt kleiner als
abst[u8 ].
(e) Beim Ausführen von Dijkstra(G, ℓ, u7 ) ist abst[u8 ] stets echt kleiner als
abst[u9 ].
(f ) Beim Ausführen von Dijkstra*(G, ℓ, u7 ) enthält ein kürzester u7 , u9 Pfad immer die Kante {u6 , u9 }.
(g) Beim Ausführen von Dijkstra*(G, ℓ, u1 ) enthält ein kürzester u1 , u2 Pfad immer die Kante {u5 , u2 }.
8
Übung 2.2
Welche der folgenden Aussagen sind richtig?
(a) Seien v1 , v2 , ..., vn eine mögliche Besuchsreihenfolge für Dijkstra(G, v1 ).
Dann gilt am Ende des Algorithmus abst[v1 ] ≤ abst[v2 ] ≤ · · · ≤ abst[vn ].
(b) Ist man beim Aufruf von Dijkstra(G, ℓ, s) nur an dem Abstand von s
zu einem festen Knoten t interessiert, so kann man abbrechen, sobald
abst[t] < ∞.
(c) Ist man beim Aufruf von Dijkstra(G, ℓ, s) nur an dem Abstand von s zu
einem festen Knoten t interessiert, so kann man abbrechen, sobald t aus
Q gelöscht wird.
(d) Sei G ein ungerichteter, ungewichteter Graph. Dann findet der DijkstraAlgorithmus einen kürzesten Weg von s nach t in O(n + m) Schritten.
(e) Berechnet man mit dem Dijkstra*-Algorithmus mit einem Durchlauf die
kürzesten Pfade von einem Startknoten zu allen anderen Knoten, so bildet
die Vereinigung dieser Pfade einen Spannbaum von G bzw. der Zusammenhangskomponente des Startknotens.
(f ) Nehmen wir an, in G existieren negative Kantengewichte und sei −C das
kleinste dieser Gewichte. Der kürzeste Weg zwischen zwei Knoten in einem
solchen Graphen kann bestimmt werden, indem zunächst jedes Gewicht um
(C + 1) erhöht und dann der Dijkstra-Algorithmus verwendet wird.
(g) Ist G ein gerichteter Graph ohne negative Zyklen, in dem nur Kanten am
Startknoten negative Gewichte haben dürfen. Dann liefert der DijkstraAlgorithmus richtige Ergebnisse.
(h) Nehmen wir an, G sei ungerichtet und habe genau eine Kante e mit negativem Gewicht, aber keine negativen Zyklen. Dann kann ein kürzester
s-t-Weg durch zweimaliges Aufrufen des Dijkstra-Algorithmus auf einem
Subgraphen von G gefunden werden.
9
Der Floyd-Warshall-Algorithmus
Lemma 1
~ = (V, E),
~ ℓ:E
~ → R und i, j ∈ [n] und k ∈ [0, n]. Weiter seien
Seien G
k
Pi,j
:= {P = (v1 , . . . , vr ) :
dki,j
:=
P ist gerichteter i, j-Pfad und v2 , . . . , vr−1 ∈ [k]} und
k
k
min{ℓ(P ) : P ∈ Pi,j
} falls Pi,j
6= ∅,
∞
sonst.
Dann gilt:
dki,j =
ℓ(i, j)
falls k = 0
k−1 k−1
k−1
min{di,j , di,k + dk,j } falls k ≥ 1.
Funktionsweise:
• Berechnet Abstände von allen Knoten des Graphen zueinander. (Matrix
D = (dni,j )1≤i,j≤n )
• Verwendet das Prinzip der dynamischen Programmierung. D.h. er löst
zunächst ein Teilproblem, verwendet diese Lösung für nächst größeres Teilproblem usw.. (Lemma 1)
• Funktioniert auch bei Graphen mit negativen Kantengewichten. Hat al~ hat keine negativen Zyklen.
lerdings Voraussetzung: G
Laufzeit: O(n3 )
Algorithmus 4
~ = (V, E),
~ Längenfunktion ℓ : E → R
Input: Graph G
Output: n × n Matrix D
Floyd–Warshall(G, ℓ)
(1)
for i = 1 to n
(2)
for j = 1 to n
(3)
dˆ0i,j := ℓ(i, j)
(4)
for k = 1 to n
(5)
for i = 1 to n
(6)
for j = 1 to n
k−1 ˆk−1
k−1
(7)
dˆki,j := min{dˆi,j
, di,k + dˆk,j
}
n
ˆ
(8)
return D := (d )1≤i,j≤n
i,j
10
Modifikationen:
• Berechnung von kürzesten Pfaden.
k
k
Sei wi,j
der Vorgänger von j auf einem Pfad P ∈ Pi,j
mit ℓ(P ) = dki,j .
Dann gilt
−
→
i
falls i 6= j und (i, j) ∈ E ,
0
wi,j
:=
NIL sonst.
(
k−1
k−1
k−1
k−1
wi,j
falls di,j
≤ di,k
+ dk,j
k
k ≥ 1 : wi,j
=
k−1
k−1
k−1
k−1
wk,j
falls di,j > di,k + dk,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 ⇐⇒ ∃i, k ∈ [n] mit dki,i < 0.
Sobald also im Laufe des Algorithmus in D ein negativer Diagonaleintrag auftaucht, bricht der modifizierte Algorithmus ab mit dem Ergebnis
´´negativer Zyklus gefunden´´.
Übung 2.3
Gegeben sei der folgende gerichtete, gewichtete Graph G = (V, E, ℓ) mit V =
{v1 , ..., v6 } und E = {e1 , ..., e8 }.
v2
3
v4
2
2
v1
-3
v6
-2
5
1
v3
1
v5
(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.
Übung 2.4
Was passiert beim Floyd-Warshall Algorithmus zur Bestimmung kürzester s, tWege, wenn es zwar einen Zyklus negativer Länge gibt, dieser jedoch nicht von
s aus erreichbar ist oder t nicht von diesem erreicht werden kann? Geben Sie
eine direkte Modifikation des Algorithmus an, so dass ein kürzester s, t-Weg
gefunden wird.
11
3
Matroide und minimal aufspannende Bäume
Der Algorithmus von Prim
Funktionsweise:
Beginnt mit beliebigem Knoten und baut sukzessive MST durch Hinzunahme
der nächst größeren angrenzenden Kante zusammen.
Laufzeit:
O(n2 ) (mit Fibonacci-Heaps: O(n log n + m))
Algorithmus 5 (Algorithmus von Prim)
Input: Graph G = (V, E), Längenfunktion ℓ : E → R≥0
Output: Baum T = (V, F )
Prim(G, ℓ)
(1)
Wähle beliebigen Knoten s ∈ V
(2)
W := {s}, F := ∅, σ[s] := 0
(3)
foreach v ∈ N (s) do vor[v] := s, σ[v] := ℓ(s, v)
(4)
foreach v ∈ V \ (N (s) ∪ {s}) do vor[v] := N IL,
(5)
(6)
(7)
(8)
(9)
(10)
σ[v] := ∞
while W 6= V
y := Knoten mit minimalem σ[.]-Wert in V \ W
W := W ∪ {y}, F := F ∪ {vor[y], y}
foreach z ∈ N (y) ∩ (V \ W ) mit σ[z] > ℓ(y, z)
σ(z) := ℓ(y, z)
vor[z] := y
Der Algorithmus von Kruskal
Funktionsweise:
Sortiert zunächst die Kanten der Größe nach. Beginnt danach mit der kleinsten
Kante und nimmt danach immer die nächst größere Kante hinzu, die keinen
Kreis erzeugt.
Laufzeit:
O((m + n) log n)
Algorithmus 6 (Algorithmus von Kruskal)
Input: Graph G = (V, E), Längenfunktion ℓ : E → R+
Output: Baum T = (V, F )
Kruskal(G, ℓ)
(1)
Sortiere alle Kanten in E so, daß ℓ(e1 ) ≤ · · · ≤ ℓ(em );
(2)
F := ∅;
(3)
for i = 1 to m
(4)
if (V, F ∪ {ei }) kreisfrei then F := F ∪ {ei }
12
Übung 3.1
Sei G = (V, E) der folgende Graph mit Gewichtsfunktion ℓ wie angegeben:
u3
u9
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
u4
1
1
3
4
u8
2
u5
1
3
u2
1
5
u7
3
2
2
4
5
u6
u1
Welche der folgenden Aussagen sind richtig?
(a) Eine gültige Reihenfolge beim Ablaufen der Knoten im Prim-Algorithmus
ist
u5 , u4 , u9 , u8 , u1 , u6 , u3 , u7 , u2 .
(b) Im Algorithmus von Prim wird der Knoten u2 stets als Letzter in den
spannenden Baum eingebunden.
(c) Im Algorithmus von Kruskal existieren unmittelbar vor dem letzten Schritt
stets die Komponenten {u2 } und V − u2 .
(d) Kein minimal spannender Baum enthält die Kanten {u1 , u5 } und {u4 , u5 }
gleichzeitig.
13
Matroide
Definition 2 (Unabhängigkeitssystem, Matroid)
• Ein Unabhängigkeitssystem ist ein Paar (E, I), wobei E eine endliche
Menge ist und I ⊆ P(E) mit
(M1) ∅ ∈ I,
(M2) Falls A ∈ I und B ⊆ A, dann B ∈ I.
• E heißt Grundmenge, die Mengen A ⊆ E mit A ∈ I heißen unabhängig und die Mengen B ⊆ E mit B 6∈ I heißen abhängig.
• Eine Menge A ∈ I heißt Basis, wenn sie inklusionsmaximal unabhängig ist.
Falls A inklusionsminimal abhängig ist, so heißt A ein Kreis.
• Ein Unabhängigkeitssystem heißt Matroid, wenn außerdem noch die folgende Eigenschaft gilt:
(M3) Falls A, B ∈ I und |A| > |B|, dann gibt es ein x ∈ A\B mit B∪{x} ∈
I. (Austauschbedingung)
Wichtige Beispiele 1
(1) Vektorraummatroid:
Sei V ein Vektorraum, E eine Menge von Vektoren in V . Außerdem sei
I := {F ⊆ E : F ist linear unabhängige Familie von Vektoren in V } ⊆ P(V ).
Dann ist (E, I) ein Matroid.
(2) Graphischer Matroid oder Kreismatroid:
Sei G = (V, E) ein Graph und sei
I := {F ⊆ E : (V, F ) ist kreisfreier Graph }.
Dann ist (E, I) ein Matroid.
Unabhängige Mengen: Wälder
Basen: Spannbäume
(3) Sei G = (V, E) ein Graph mit E 6= ∅. Wir definieren
I := {M ⊆ E : M Matching}.
Dann ist U := (E, I) ein Unabhängigkeitssystem, aber i. A. kein Matroid.
Basen: Maximale Matchings.
14
Übung 3.2
Sei (E, I) das Kreismatroid des Graphen G aus Aufgabe 3.1.
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.
Übung 3.3
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}.
Zeigen Sie: (E, T ) ist ein Matroid.
Übung 3.4
Eine Hilfsorganisation hat aus weihnachtlichen Spenden n Ladungen mit Lebensmitteln zur Verfügung. Für jede Ladung i ∈ [n] wurde ein Nährwert wi ∈ N
und ein Verfalldatum ti ∈ N0 ermittelt. Täglich kann nur eine Ladung in das
Krisengebiet gebracht werden. Ziel der Helfer ist es, eine Auswahl F ⊆ [n] von
Ladungen zu treffen (nach dem Verfallsdatum sortiert), so dass keine Ladung
i ∈ F nach ihrem Verfalldatum geliefert wird und der Nährwert aller gelieferten
Ladungen maximiert wird. Zeigen Sie, dass dem Problem ein Matroid und ein
Maximierungsproblem über diesem zu Grunde liegt.
Übung 3.5
(a) Sei (E, I) ein Unabhängigkeitssystem. Zeigen Sie:
(E, I) ist genau dann ein Matroid, wenn die folgende Bedingung erfüllt
ist:
(M3)´ Wenn X ⊆ E und I1 , I2 ∈ {I : I ∈ I, I ⊆ X} maximal unabhängig
bezüglich X sind (d.h. ∀x ∈ X \ Ii (i = 1, 2) : Ii ∪ {x} ∈
/ I), dann gilt
|I1 | = |I2 |.
(b) Sei (E, I) ein Matroid, I ∈ I, e ∈ E und I ∪{e} ∈
/ I. Dann enthält I ∪{e}
genau einen Kreis.
Übung 3.6
Zeigen Sie:
(a) Seien (E1 , I1 ), (E2 , I2 ) Matroide mit E1 ∩ E2 = ∅. Dann ist auch (E1 ∪
E2 , I) mit I = {I1 ∪ I2 : I1 ∈ I1 , I2 ∈ I2 } ein Matroid.
(b) Seien (E, I1 ), (E, I2 ) Matroide. Dann ist (E, I1 ∩I1 ) im Allgemeinen kein
Matroid.
15
Maximierungsprobleme über Unabhängigkeitssystemen
Definition 3
Ein Maximierungsproblem über einem Unabhängigkeitssystem (E, I) ist gegeben durch eine GewichtsfunktionP
ℓ : 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
ℓ(A∗ ) = max ℓ(A).
A∈I
Algorithmus 7 (Greedy-Algo. zur Max. über Unabhsys.)
Input: Unabhängigkeitssystem (E, I), Gewichtsfunktion ℓ : E →
R+
Output: Ag ∈ I
Greedy–Max(E, I, ℓ)
(1)
Sortiere E = {e1 , . . . , em } so, daß ℓ(e1 ) ≥ . . . ≥ ℓ(em );
(2)
Ag := ∅;
(3)
for i = 1 to m
(4)
if Ag ∪ {ei } ∈ I then Ag := Ag ∪ {ei }
Satz 1
Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt:
U ist genau dann Matroid, wenn der Greedy–Algorithmus 7 für jede Funktion
ℓ : E → R≥0 eine optimale Lösung der Maximierungsaufgabe (E, I, ℓ) findet.
Definition 4 (Approximationsgüte)
Ist Ag die vom Greedy-Algorithmus gefundene maximale Lösung und A∗ die
g
tatsächliche maximale Lösung der Maximierungsaufgabe, so nennt man A
A∗ die
Approximationsgüte des Greedy-Algorithmus.
Übung 3.7 (Klausuraufgabe 6)
Sei G = (V, E) ein Graph mit V = {v1 , . . . , vn } und Maximalgrad ∆ := ∆(G) =
maxv∈V deg(v). Der folgende Algorithmus M SN hat das Ziel, eine möglichst
große stabile Menge in G zu finden:
Algorithmus 8 (Maximale stabile Menge MSN)
(1)
S := ∅
(2)
for i = 1 to n
(3)
if G[S ∪ {vi }] enthält KEINE Kante then S := S ∪
{vi }
(4)
return S
(a) Für ein bestimmtes Unabhängigkeitssystem U und eine Gewichtsfunktion
c auf der Grundmenge von U ist M SN ein Greedy-Algorithmus für ein
Maximierungsproblem über U . Geben Sie U und c an, und begründen Sie,
warum U ein Unabhängigkeitssystem ist.
(b) Zeigen Sie: M SN hat Approximationsgüte mindestens
16
1
∆.
4
Flüsse
Netzwerke
Definition 5 (Netzwerk, Fluss)
~ s, t, c), wobei G = (V, E)
~ ein ge• Ein Netzwerk ist ein Tupel N = (V, E,
richteter Graph ist, s, t ∈ V zwei ausgezeichnetene Knoten benennen und
~ → R+ eine Kapazitätsfunktion. Die Knoten s bzw. t werden Quelle
c:E
0
bzw. Senke genannt. Für einen Knoten v ∈ V schreiben wir
~
N + (v) := {w ∈ V : ∃(v, w) ∈ E}
und
~
N − (v) := {w ∈ V : ∃(w, v) ∈ E}.
~ → R+ heisst s-t-Fluss (engl. flow) in N , wenn
• Eine Abbildung f : E
0
P
P
f ((x, y)) ∀x ∈ V \ {s, t}
(Flusserf ((y, x)) =
–
y∈N − (x)
y∈N + (x)
haltung),
– f ((x, y)) ≤ c((x, y))
~
∀(x, y) ∈ E
(Zulässigkeit),
wobei wir im Folgenden der Einfachheit halber immer nur noch f (x, y)
statt f ((x, y)) und c(x, y) statt c((x, y)) schreiben werden.
• Der Wert von f ist definiert als
X
f (s, y) −
val(f ) :=
y∈N + (s)
X
f (y, s)
y∈N − (s)
Ein Fluss f hat maximalen Wert in N , falls val(f ) ≥ val(f ′ ) für alle
Flüsse f ′ in N gilt.
Übung 4.1
In Brutopia ist der Diktator Brutus I. auf Druck des Auslands zurückgetreten, jetzt soll eine Demokratie in dem Land eingeführt werden. Die m verschiedenen gesellschaftlichen Gruppierungen (Widerstandsgruppen, Gewerkschaften,
religiöse Gruppen, einflußreiche Verbände usw.) haben sich darauf geeinigt, ein
Übergangsparlament zu bilden, in das jede Gruppe einen Vertreter entsendet (das
Parlament hat also genau m Mitglieder). Um von Anfang an Gleichberechtigung
zu demonstrieren, soll dabei der Anteil von Frauen und Männern ausgewogen
sein. Man entschließt sich daher, Obergrenzen bF und bM (jeweils etwas mehr
als m
2 , um die Parlamentsbildung leichter zu machen) für die Anzahl von Frauen bzw. Männern im Parlament festzusetzen.
Können Sie dem brutopischen Volk helfen, ein Übergangsparlament zu bestimmen, indem Sie das Problem als Netzwerkflussproblem formulieren? Beachten
Sie, dass jeder Brutopier Mitglied mehrerer gesellschaftlicher Gruppierungen
sein kann.
17
MaxFlowMinCut-Theorem
Definition 6 (Schnitt, Kapazität)
Eine Menge X ⊆ V mit s ∈ X und t ∈ V \ X heißt s-t-Schnitt (engl. cut).
Die Kapazität von X ist definiert durch
X
cap(X) :=
c(u, v).
u∈X,v∈N + (u)\X
Lemma 2
Sei N ein Netzwerk und f ein Fluß in N und X ein beliebiger s-t-Schnitt. Dann
gilt
X
X
val(f ) =
f (x, y) −
f (y, x).
x∈X,y∈N + (x)\X
x∈X,y∈N − (x)\X
Satz 2 (MaxFlowMinCut-Theorem)
Sei N ein Netzwerk. Dann gilt:
max
f : s-t-Fluss in N
val(f ) =
min
X: s-t-Schnitt in N
cap(X)
Übung 4.2
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
18
Der Algorithmus von Ford-Fulkerson
Definition 7 (Restnetzwerk)
~ s, t, c) ein Netzwerk und f ein Fluss in N .
Sei N = (V, E,
~ f , s, t, cf ),
Das Restnetzwerk von N bezüglich f ist definiert als Nf := (V, E
~
wobei wir zunächst die Kapazitätsfunktion c mittels c(x, y) := 0 für (x, y) ∈
/ E
auf ganz V × V erweitern. Dann setzen wir

falls f (x, y) > 0
 c(x, y) − f (x, y)
c(x, y) + f (y, x)
falls f (y, x) > 0
cf (x, y) :=

c(x, y)
sonst
~ f := {(x, y) : cf (x, y) > 0}.
sowie E
Lemma 3
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 9 (Ford-Fulkerson)
~ s, t, c)
Input: Netzwerk N = (V, E,
Output: Fluss f
~ s, t, c))
Ford-Fulkerson(N = (V, E,
(1)
f := 0
(2)
while ∃ s-t-Pfad W in Nf
(3)
augmentiere f entlang von W wie in Lemma 3
Satz 3
Sei N ein Netzwerk P
mit Kapazitäten aus N0 . Dann terminiert Algorithmus 9
c(u, v)) Schritten mit einem Fluss maximalen Werts.
nach höchstens O(
u,v∈V
19
Übung 4.3
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.
20
Schichtnetzwerk und der Algorithmus von Dinic
Definition 8 (Saturiert, Schichtnetzwerk, Durchsatz)
~ s, t, c) ein Netzwerk und f ein Fluss in N .
Sei N = (V, E,
• Der Fluss f heißt saturiert, wenn es im Restnetzwerk Nf keinen f -augmentierenden
Pfad gibt, der nur Kanten aus N benutzt.
~ f , s, t, cf )
• Das geschichtete Restnetzwerk ist definiert als GNf = (V ′ , GE
mit
k := distNf (s, t),
V0 := {s},
V ′ := V0 ∪· · ·∪Vk ,
Vk := {t}, Vi := {x ∈ V : distNf (s, x) = i},
n
o
~ f := (x, y) ∈ E
~ f : x ∈ Vi , y ∈ Vi+1 , 0 ≤ i ≤ k − 1 .
GE
• Der Durchsatz eines Knotens v 6∈ {s, t} ist definiert als
X
X
DS(v) := min{
cf (x, v),
cf (v, x)},
~f
(x,v)∈GE
für s bzw. t setzen wir
X
DS(s) :=
cf (s, x)
~f
(v,x)∈GE
und
~f
(s,x)∈GE
DS(t) :=
X
cf (x, t).
~f
(x,t)∈GE
Funktionsweise Dinic:
• Berechne in jeder Runde einen saturierten Fluss in GNf .
• Verwendet die Subroutinen MaxFlow, PushFlow und PullFlow.
• MaxFlow sucht wiederholt Knoten mit minimalem Durchsatz und ruft
PushFlow und PullFlow auf, bis in GNf kein s-t-Pfad mehr existiert.
• PushFlow drückt eine Ladung der Größe DS(v) vom Knoten v bis zum
Knoten t entlang der Kanten von GNf . PullFlow zieht dieselbe Ladung
von v nach s.
• Anschließend berechnet Dinic GNf neu.
• Insgesamt entsteht dadurch ein Fluss maximalen Wertes.
Laufzeit:
2
O(n3 ) (bei 0-1 Kapazitäten O(n 3 m))
21
Algorithmus 10
~ f , s, t, cf ), Knoten v, Fluss g
Input: GNf = (V ′ , GE
Output: Fluss g
PushFlow(v, g)
(1)
Q := {v}, push[v] := DS(v)
(2)
foreach x ∈ V ′ \ {v} do push[x] := 0
(3)
while Q 6= {t}
(4)
v:=Dequeue (Q)
(5)
while push[v] 6= 0
~f
(6)
wähle Kante (v, x) ∈ GE
(7)
if cf (v, x) ≥ push[v] then
(8)
push[x] := push[x] + push[v]
(9)
g(v, x) := g(v, x) + push[v]
(10)
push[v] := 0
(11)
else
(12)
push[x] := push[x] + cf (v, x)
(13)
g(v, x) := g(v, x) + cf (v, x)
(14)
push[v] := push[v] − cf (v, x)
(15)
if x 6∈ Q then Enqueue (Q, x)
(16)
return g
Algorithmus 11
~ f , s, t, cf )
Input: GNf = (V ′ , GE
Output: Fluss g
~ f , s, t, cf ))
MaxFlow(GNf = (V ′ , GE
(1)
g := 0
(2)
while es gibt s-t-Pfad in GNf
(3)
v:=Knoten mit minimalem Durchsatz
(4)
g := PushFlow (GNf , v, g)
(5)
g := PullFlow (GNf , v, g)
(6)
aktualisiere Kapazitäten in GNf
(7)
entferne rekursiv Knoten von Durchsatz 0 und
(8)
Kanten mit Kapazitäten 0 aus GNf
(9)
(aber berechne kein neues Restnetzwerk)
Algorithmus 12
~ s, t, c))
Dinic(N = (V, E,
(1)
f := 0
(2)
while es gibt s-t-Pfad in GNf
(3)
f := f + MaxFlow (GNf )
(4)
berechne GNf neu
22
Übung 4.4
Welche der folgenden Aussagen sind richtig?
(a) Im nebenstehenden geschichteten Netzwerk wird durch einmaligen Aufruf
von PushFlow und PullFlow ein Fluss mit Wert 9 erzeugt.
00000
11111
111111
000000
000000
111111
111111
000000
000000
111111
00000
11111
00000000000000
111111
11111111
000000
111111
000000
111111
0000
1111
00000
11111
000000
111111
0000000
1111111
000000
111111
000000
111111
0000
1111
00000
11111
000000
111111
0000000 1111
1111111
1111111111
00000000000000
4
4
5
4
4
4
s
5
5
5
t
4
(b) Im nebenstehenden geschichteten Netzwerk wird durch einmaligen Aufruf
von PushFlow und PullFlow ein Fluss mit Wert 1 erzeugt.
1
1
1
1
s
1
1
1
t
1
1
1
(c) Im nebenstehenden geschichteten Netzwerk wird durch einmaligen Aufruf
von PushFlow und PullFlow ein Fluss mit Wert 2 erzeugt.
1
2
s
3
2
1
t
3
1
2
2
1
1
(d) Das nebenstehenden Netzwerk stimmt mit seinem geschichteten Restnetzwerk zum Fluss mit Wert 0 überein.
1
1
s
1
1
1
1
1
1
1
1
t
1
1
23
Übung 4.5
Welche der folgenden Aussagen sind richtig?
(a) Das Restnetzwerk eines Graphen zu gegebenem Fluss ist eindeutig.
(b) Das geschichtete Restnetzwerke eines Graphen zu gegebenem Fluss ist eindeutig.
(c) Ein Fluss hat genau dann maximalen Wert, wenn er saturiert ist.
(d) Es kann in einem Netzwerk zwei saturierte Flüsse mit unterschiedlichem,
nicht-maximalen Wert geben.
(e) In den Restnetzwerken, die im Dinic-Algorithmus erzeugt werden, wächst
die Distanz von s zu t stets streng.
Übung 4.6
Betrachten Sie das nachfolgend abgebildete Netzwerk.
Die Kapazitäten der Kanten stehen in den Kreisen, die anderen Zahlen geben
den derzeitigen Fluss f an. Bestimmen Sie mithilfe des Algorithmus von Dinic
einen maximalen Fluss. Geben Sie dabei die entsprechenden Restnetzwerke und
die darin enthaltenen saturierenden Flüsse an.
24
5
Matchings
Grundlegendes
Definition 9 (Matching, maximales, größtes, perfektes, Matchingzahl)
Sei G = (V, E) ein Graph.
• Eine Menge M ⊆ E heißt Matching, falls
• Eine Menge M ⊆ E heißt Matching, falls keine zwei Kanten aus M inzident sind, d.h. ∀e, e′ ∈ E, e 6= e′ : e ∩ e′ = ∅.
• M heißt
– maximales Matching, wenn für alle e ∈ E \ M gilt, dass M ∪ {e} kein
Matching ist.
– größtes Matching, wenn für alle Matchings M ′ von G gilt: |M | ≥
|M ′ |.
– perfektes Matching, wenn 2|M | = |V | gilt.
• Die Matchingzahl ist definiert als
ν(G) := max{|M | : M ist Matching von G},
also als die Kardinalität eines größten Matchings von G.
• Ein Knoten v heißt überdeckt von M , wenn es eine Kante e ∈ M mit
v ∈ e gibt.
Bemerkungen 1
1. Es gilt:
M maximales Matching ⇐= M größtes Matching ⇐= M perfektes Matching
2. Sei
τ (G) := min{ℓ ∈ N : es gibt eine Knotenüberdeckung der Größe ℓ in G}.
die Knotenüberdeckungszahl.
(a) Dann gilt: ν(G) ≤ τ (G) ≤ 2ν(G)
(b) Ist G = (A ∪ B, E) bipartit, dann gilt ν(G) = τ (G).
25
Übung 5.1
Sei G ein beliebiger Graph auf n Knoten. Welche der folgenden Aussagen sind
richtig? (α(G) := max{k ∈ N : ∃k-stabile Menge in G} (Stabilitätszahl))
(a) α(G) ≤ τ (G).
(b) α(G) ≤ n − τ (G).
(c) α(G) ≥ n − τ (G).
Sei G = (A ∪ B, E) ein bipartiter Graph auf 2n Knoten. Welche der folgenden
Aussagen sind richtig, welche falsch?
(d) Wenn α(G) = n ist, so besitzt G ein perfektes Matching.
(e) Wenn G ein perfektes Matching besitzt, so ist α(G) = n.
26
Der Flussalgorithmus
Funktionsweise:
• Überführe den bipartiten Graphen G = (A ∪ B, E) in ein Netzwerk N =
~ s, t, c) wie folgt
(V ∪ {s, t}, E,
b
s
c=1
b
b
b
b
b
b
..
.
..
.
b
b
b
b
b
b
b
t
c=1
c=1
A
• Dann gilt
max
f Fluss in N
B
val(f ) =
max
M Matching in G
|M |.
• Berechne nun mit Dinic einen maximalen Fluss f in N .
• Außerdem ist
~ ∩ (A × B) : f (e) = 1}
M = {e ∈ E
ein größtes Matching von G.
• Berechne daher mit Dinic einen maximalen Fluss in N .
Laufzeit:
2
O(n 3 m)
Übung 5.2
Bestimmen Sie mit Hilfe des Flussalgorithmus ein maximales Matching im folgenden Graphen:
8
6
7
3
4
1
2
27
9
5
Augmentierende Pfade und der Algorithmus von Hopcraft
und Karp
Definition 10 (Alternierende und Augmentierende Pfade)
Sei M ein Matching in G = (V, E).
• Ein Pfad in G heißt M -alternierend, falls er abwechselnd Kanten aus M
und E \ M benutzt.
• Ein Pfad in G der Länge ≥ 1 heißt M -augmentierend, falls er M -alternierend
ist und Anfangs- und Endknoten nicht von M überdeckt sind.
Definition 11 Sei M ein Matching in G. Dann sei
∞
falls M größtes Matching
ℓ(M ) :=
min{ℓ(P ) : P ist M -augm. Pfad}
sonst
Algorithmus 13 (Hopcroft-Karp)
Input: Graph G = (A ∪ B, E)
Output: Matching M
Hopcroft–Karp(G = (A ∪ B, E))
(1)
M := ∅
(2)
while ℓ(M ) < ∞
(3)
S:= nicht von M -überdeckte Knoten in A
(4)
T := Knoten, die von S aus über M -augmentierende
Pfade der Länge ℓ(M ) erreichbar sind.
(5)
bestimme mittels DFS ausgehend von den Knoten in
T eine inklusionsmaximale Menge knotendisjunkter
M -augmentierender Pfade der Länge ℓ(M )
(6)
augmentiere alle diese Pfade gleichzeitig
Satz 4
Algorithmus 13 findet in einem bipartiten
Graphen ein größtes Matching und
√
lässt sich mit einer Laufzeit von O( nm) Schritten implementieren.
Übung 5.3
Gegeben sei der folgende Graph:
(a) Gibt es eine Möglichkeit für HopkroftKarp, nach einer Augmentationsphase ein größtes Matching in G gefunden zu haben?
(b) Gibt es eine Möglichkeit für HopkroftKarp, mehere Augmentationsphasen zu brauchen, um in G ein größtes Matching zu finden?
28
Der Satz von Hall
Satz 5 (Heiratssatz von Hall)
Sei G = (A ∪ B, E) ein bipartiter Graph. Dann gilt: G hat genau dann ein
perfektes Matching, wenn
(i) |A| = |B|
(< ∞)
(ii) ∀S ⊆ A : |S| ≤ |NG (S)|,
(Hall − Bedingung)
wobei NG (S) die Menge aller Knoten in B ist, die mindestens einen Nachbarn
in der Menge S haben.
Übung 5.4 (Ein unendliches Gegenbeispiel zum Satz von Hall)
Finden Sie einen bipartiten Graphen G = (A ∪ B, E) mit unendlichen Knotenmengen A und B und der Eigenschaft |Γ(S)| ≥ |S| für jedes endliche S ⊆ A
und jedes endliche S ⊆ B, sodass G kein perfektes Matching enthält.
Übung 5.5
Bei einer Weihnachtsfeier soll jedes Kind genau vier Geschenke erhalten. Es
gibt daher viermal so viele Geschenke wie Kinder. Natürlich darf ein Kind dabei nur solche Geschenke bekommen, die es mag, sonst fängt es an zu weinen.
Geben Sie eine hinreichende und notwendige Bedingung dafür an, dass alle Geschenke verteilt werden und kein Kind weint, und beweisen Sie deren Korrektheit.
Übung 5.6
Welche der folgenden Aussagen sind richtig?
(a) Jeder 2-reguläre Graph mit perfektem Matching ist bipartit.
(b) Jeder r-reguläre bipartite Graph besitzt ein perfektes Matching.
(c) Jeder 3-reguläre Graph besitzt ein perfektes Matching.
29
Herunterladen