Optimierung 2 - TUM - Zentrum Mathematik - M9

Werbung
Optimierung 2
Leitfaden zur Vorlesung von Anusch Taraz
im Wintersemester 2007/2008
Zentrum für Mathematik
Technische Universität München
17. März 2008
Inhaltsverzeichnis
1 Einführung in die Graphentheorie
2
2 Kürzeste Wege, minimal spannende Bäume, Matroide
10
2.1
Kürzeste Wege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.2
Minimal spannende Bäume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.3
Matroide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3 Flüsse in Netzwerken
17
4 Matchings
22
5 Ganzzahlige lineare Optimierung
28
5.1
Ganzzahlige Polyeder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
5.2
Unimodularität und totale Unimodularität . . . . . . . . . . . . . . . . . . . . . . .
29
6 Travelling Salesman Problem
30
1
Vorwort
Dies ist ein Leitfaden durch die Vorlesung Optimierung 2“ im Wintersemester 2007/2008. Er
”
enthält (im Gegensatz zur Vorlesung) keinerlei Beweise, sondern sollte lediglich als erweitertes
Inhaltsverzeichnis angesehen werden.
1
Einführung in die Graphentheorie
Definition 1.1 (Zahlen) Wir bezeichnen mit N := {0, 1, 2, . . . } die Menge der natürlichen Zahlen
und setzen N+ := N \ {0}. Die Menge der ganzen Zahlen ist Z := {. . . , , −2, −1, 0, 1, 2, . . . }.
Für i, j ∈ N mit i ≤ j sei [i, j] := {i, . . . , j} und [i] := [1, i].
Mit log bzw. ln wird der Logarithmus zur Basis 2 bzw. e bezeichnet. Reelle Zahlen runden wir mit
der sogenannten oberen bzw unteren Gaußklammer. Für x ∈ R sei
x := max{n ∈ Z : n ≤ x}
x := min{n ∈ Z : x ≤ n}.
Sei V eine Menge und k ∈ N. Dann bezeichne mit
V
:= {W ⊆ V : |W | = k},
k
(1)
V k := V × · · · × V = {(v1 , . . . , vk ) : vi ∈ V },
(2)
die Menge aller k-elementigen Teilmengen von V bzw das k-fache kartesische Produkt von V .
Bemerkung 1.2 Offensichtlich gilt, dass
V |V |
k = k
und
k
V = |V |k ,
wenn V endlich ist.
Definition 1.3 (Graphen) Ein Graph ist ein Tupel G = (V, E), wobei V eine nicht–endliche
Menge und E ⊆ V2 eine Teilmenge der zweielementigen Teilmengen von V ist.1 Die Elemente
v ∈ V heißen die Knoten (auch Ecken, engl. vertices oder nodes), die Elemente aus e ∈ E die
Kanten (engl. edges) von G.
Ein gewichteter Graph G = (V, E, ) enthält zusätzlich eine Gewichts- oder Längenfunktion
: E → R.
Definition 1.4 (isomorph) Viele dieser Graphen unterscheiden sich jedoch lediglich in den Na”
men“ ihrer Knoten: Zwei Graphen G1 = (V1 , E1 ) und G2 = (V2 , E2 ) heißen isomorph, in Zeichen
G1 ∼
= G2 , falls es eine Bijektion f : V1 → V2 gibt, so daß gilt: {u, v} ∈ E1 ⇔ {f (u), f (v)} ∈ E2 .
Definition 1.5 (spezielle Graphen) Die folgenden Graphen werden so oft benutzt, dass sie sich
eigene Namen verdient haben:
Pn
Cn
Kn
En
:= (V, E) mit V := {0, . . . , n} und E := {{i − 1, i} : i ∈ [n]}, für n ∈ N0
:= (V, E) mit V := [n] und E := {{i, i + 1} : i ∈ [n − 1]} ∪ {n, 1}, für n ∈ N, n ≥ 3
n
:= (V, E) mit V := [n] und E :=
für n ∈ N
2
:= (V, E) mit V := [n] und E := ∅ für n ∈ N.
Ein Graph, der isomorph zu Pn ist, heißt Pfad der Länge n.
Ein Graph, der isomorph zu Cn ist, heißt Kreis der Länge n.
Ein Graph, der isomorph zu Kn ist, heißt Clique auf n Knoten, oder kurz: n-Clique.
Ein Graph, der isomorph zu En ist, heißt stabile Menge auf n Knoten, oder kurz: n-stabile Menge.
1 Es werden hier fast ausschließlich nur sogenannte einfache (endliche) Graphen betrachtet, d.h. Graphen ohne
Schlingen (Kanten, deren Endpunkte zusammenfallen) und ohne mehrfache (parallele) Kanten zwischen zwei Knoten.
2
Wenn x und y die zwei Knoten in Pn bezeichnen, die nur in einer Kante enthalten sind, dann
nennt man x und y auch Anfangs- und Endknoten und sagt, dass Pn ein x, y-Pfad ist. Achtung:
ein Pfad der Länge n hat n + 1 Knoten (aber n Kanten).
Manchmal spricht man auch von vollständigen Graphen statt von Cliquen, oder von unabhängigen statt von stabilen Mengen.
Definition 1.6 (Subgraphen) Ein Graph H = (W, F ) heißt
Subgraph eines Graphen G =
.
Zwei
Sonderfälle verdienen eigene
(V, E), in Zeichen H ⊆ G, falls W ⊆ V und F ⊆ E ∩ W
2
Namen:
Falls F = E ∩ W
2 , dann heißt H induzierter Subgraph von G. In diesem Fall ist G offensichtlich
durch die Auswahl der Knoten W festgelegt und wir schreiben auch H = G[W ].
Falls W = V , dann heißt H aufspannender Subgraph von G.
Wenn G = (V, E, ) ein gewichteter Graph ist und H = (W, F ) ⊆ G, dann sei (H) :=
das Gewicht (manchmal auch die Länge) von H.
e∈F
(e)
Definition 1.7 (zusammenhängender Graph, Baum) Ein Graph G = (V, E) heißt zusammenhängend, wenn es für alle Knoten x, y ∈ V einen x, y-Pfad als Subgraph von G gibt. Ein Graph
G heißt kreisfrei, wenn es keinen Kreis als Subgraphen von G gibt. Wenn G zusammenhängend
und kreisfrei ist, nennt man G einen Baum.
Mit diesen Vokabeln ausgestattet können wir bereits eine Reihe von wichtigen kombinatorischen
Optimimerungsproblemen präzise definieren.
Definition 1.8
a) Kürzester Weg:
Eingabe: G = (V, E, ) und s, t ∈ V .
Gesucht: s, t-Pfad H als Subgraphen von G, der (H) minimiert.
b) Minimal aufspannender Baum:
Eingabe: G = (V, E, ).
Gesucht: Baum H als aufspannenden Subgraphen von G, der (H) minimiert.
c) Minimal aufspannender Kreis / Travelling Salesman Problem:
Eingabe: G = (V, E, ).
Gesucht: Kreis H als aufspannenden Subgraphen von G, der (H) minimiert.
d) Größte Clique:
Eingabe: G = (V, E).
Gesucht: Clique H auf k Knoten als Subgraphen von G, der k maximiert.
Analog kann man natürlich auch eine größte stabile Mengen suchen. Die entsprechenden Kardinalitäten der Clique bzw. der stabilen Menge heißen Cliquenzahl ω(G) und Stabilitätszahl α(G):
ω(G) := max{k ∈ N : ∃k-Clique in G}
α(G) := max{k ∈ N : ∃k-stabile Menge in G}
Bemerkung 1.9 Wir werden im Laufe der Vorlesung sehen, dass es für die Probleme a) und
b) effiziente Verfahren gibt, die eine optimale Lösung finden. Wir werden außerdem zeigen, dass
dies für das Problem c) aller Voraussicht nach nicht möglich ist, es aber Verfahren gibt, die einer optimalen Lösung beweisbar nahe kommen; was wiederum für das Problem d) ebenfalls außer
Reichweite zu liegen scheint.
Definition 1.10 (Nachbarn) Zwei Knoten u, v ∈ V eines Graphen G = (V, E) heißen adjazent,
verbunden oder benachbart, falls {u, v} ∈ E. Eine Kante e ∈ E berührt oder inzidiert mit einem
Knoten v ∈ V , wenn v ∈ e. Die Nachbarschaft eines Knotens v ∈ V ist die Menge N (v) := {u ∈
V | {u, v} ∈ E} der Nachbarn von v. Der Grad deg(v) := |N (v)| eines Knotens v ∈ V zählt die
Kanten, die in dem Graphen mit v inzidieren. (Manchmal schreibt man auch NG und degG , um
zu betonen, um welchen Graphen es sich handelt.) Mit Δ(G) und δ(G) werden der größte und der
kleinste in G auftretende Grad bezeichnet. Ist Δ(G) = δ(G) = k, dann spricht man von einem
k-regulären Graphen.
Sei G = (V, E) und v ∈ V . Mit G − v bezeichnet man den Graphen, den man erhält, wenn man v
3
aus V und alle Kanten aus E, die mit v inzidieren, entfernt. Sei e ∈ E. Mit G − e bezeichnet man
den Graph, aus dem man lediglich die Kante e entfernt, also (V, E \ {e}).
Proposition
1.11 Für jeden Graphen G = (V, E) gilt:
a) v∈V d(v) = 2|E|,
b) G hat eine gerade Anzahl von Knoten ungeraden Grades.
Beweis. a) Wenn wir die Summe der Grade bilden, dann zählen wir jede Kante genau zweimal,
nämlich von jedem ihrer zwei Endknoten aus einmal.
b) Siehe Übungsaufgabe 0.2.
Vorlesung 19.10.07
Proposition 1.12
a) Wenn G = (V, E) ein Baum und |V ≥ 2 dann hat G mindestens zwei Blätter, d.h. Knoten v, w
mit deg(v) = deg(w) = 1.
b) Sei G = (V, E) zusammenhängender Graph mit Kreis C, un es sei e eine beliebige Kante im
Kreis. Dann ist G := G − e ein zusammenhängender Graph.
c) Ein Graph G ist zusammenhängend genau dann wenn G einen Baum als aufspannenden Subgraphen besitzt.
Beweis. ...
Satz 1.13 Für einen Graphen G = (V, E) auf n = |V | Knoten sind äquivalent:
a) G ist ein Baum;
b) G ist zusammenhängend und hat n − 1 viele Kanten;
c) G ist kreisfrei und hat n − 1 viele Kanten;
d) G ist Kanten-maximal kreisfrei;
e) G ist Kanten-minimal zusammenhängend;
f ) Je zwei Knoten aus V sind in G durch genau einen Pfad verbunden.
Beweis. Wir zeigen hier exemplarisch nur die Implikation a) ⇒ b). Der Rest folgt eventuell in den
Übungen...
Für die Anzahl der Bäume gibt es eine sehr schöne, kurze Formel, die wir hier ohne Beweis
angeben.
Satz 1.14 (Cayley, 1882) Die Anzahl der Bäume mit Knotenmenge [n] beträgt nn−2 .
Definition 1.15 (Bipartite Graphen) Ein Graph G = (V, E) heißt bipartit genau dann, wenn
˙ hat, so dass A und B stabile Mengen induzieren.
seine Knotenmenge V eine Partition V = A∪B
Mit anderen Worten: alle Kanten verlaufen zwischen A und B, d.h.
E ⊆ {{a, b} : a ∈ A, b ∈ B} .
Bei Gleichheit spricht von einem vollständigen bipartiten Graphen, und bezeichnet ihn in Analogie
zum K|V | mit K|A|,|B| .
Bemerkung 1.16
a) Stabile Mengen, Pfade und (wie wir gleich sehen werden) Bäume im allgemeinen sind bipartit.
b) Ein Kreis ist genau dann bipartit, wenn er eine gerade Anzahl von Knoten besitzt.
4
Definition 1.17 (Zusammenhangskomponente, Abstand, Sphäre) Sei G = (V, E) ein Graph.
a) Eine Zusammenhangskomponente von G ist ein inklusionsmaximaler zusammenhängender Subgraph von G.
b) Der Abstand zwischen zwei Knoten u, v ist definiert als:
min{k ∈ N : ∃ u, v-Pfad der Länge k} : falls es einen u, v−Pfad gibt,
dist(u, v) :=
∞
: sonst.
c) Sei u ∈ V . Für 0 ≤ i ≤ n − 1 heißt dann die Knotenmenge Si (u) := {v ∈ V : dist(u, v) = i}
die i-te Sphäre um u.
Offensichtlich gilt S0 (u) = {u} und S1 (u) = N (u).
Mit Hilfe des Begriffs der Sphäre lässt sich zeigen, dass ungerade Kreise das einzige Hindernis
für einen bipartiten Graphen darstellen.
Satz 1.18 (König 1936) Sei G = (V, E) ein zusammenhängender Graph. Dann sind äquivalent:
a) G ist bipartit.
b) G enthält keine Kreise ungerader Länge als Subgraphen.
c) Für jeden Knoten u ∈ V gilt: A := S0 (u) ∪ S2 (u) ∪ ... und B := S1 (u) ∪ S3 (u) ∪ ... bilden stabile
Mengen.
Beweis. Die Implikation c) ⇒ a) ist klar nach Definition, weil für die so definierten Mengen A und
˙
B gilt: V = A∪B.
Die Implikation a) ⇒ b) ist auch klar, siehe auch 1.16b). Um die Implikation
b) ⇒ c) zu zeigen, nehmen wir an, dass es eine Kante e = {x, y} gebe, die innerhalb von A oder
B liegt. Wir unterscheiden zwei Fälle:...
Damit ist insbesondere klar, dass Bäume bipartit sind (wie in Bemerkung 1.16 angekündigt).
Vorlesung 25.10.07
Definition 1.19 (Färbung) Sei k ∈ N. Eine k-Färbung von G ist eine Abbildung f : V → [k]
mit
∀{x, y} ∈ E :
f (x) = f (y).
Die chromatische Zahl von G wird bezeichnet mit
χ(G) := min{k ∈ N : G hat eine k-Färbung }.
Bemerkung 1.20
a) Der folgende Graph hat chromatische Zahl 3...
b) G ist genau dann bipartit, wenn χ(G) ≤ 2.
c) χ(C2k ) = 2 und χ(C2k+1 ) = 3.
d) χ(Kn ) = n und χ(En ) = 1.
e) ω(G) ≤ χ(Kn ).
f ) |V |/α(G) ≤ χ(G).
g) Wir werden noch sehen: es ist algorithmisch einfach, zu entscheiden, ob χ(G) ≤ 2, aber schwer
zu entscheiden, ob χ(G) ≤ 3.
Definition 1.21 (Laundau–Notation) Es seien f, g : N → R+ zwei Funktionen. Wir schreiben
f (n) = O (g(n))
wenn es Konstanten c ∈ R+ und n0 ∈ N gibt, so daß
f (n) ≤ c g(n)
∀n ≥ n0 .
Wir schreiben
f (n) = Ω (g(n)) ,
5
wenn es Konstanten c ∈ R+ und n0 ∈ N gibt, so daß
f (n) ≥ c g(n)
∀n ≥ n0 .
Wir schreiben
f (n) = Θ (g(n)) ,
wenn es Konstanten c1 , c2 ∈ R+ und n0 ∈ N gibt, so daß
c1 g(n) ≤ f (n) ≤ c2 g(n)
∀n ≥ n0 .
Wir schreiben
f (n) = o (g(n)) ,
wenn es für jede Konstante c ∈ R
+
eine Konstante n0 ∈ N gibt, so daß
f (n) ≤ c g(n)
∀n ≥ n0 .
Wir schreiben
f (n) = ω (g(n)) ,
wenn es für jede Konstante c ∈ R+ eine Konstante n0 ∈ N gibt, so daß
f (n) ≥ c g(n)
∀n ≥ n0 ;
Beispiel 1.22 a) 7n2 + 17n = O(n2 ),
b) 17n = O(n2 ),
c) 7n2 + 17n = Θ(n2 ),
c) 17 n2 = o(n2 ),
d) 17 n2 = o(n2.1√),
e) n2 + 5n − 7 n + (−1)n ln n = Θ(n2 ).
Bemerkung 1.23 a) limn→∞
f (n)
g(n)
=0
⇔
f (n) = o(g(n))
b) f (n) = Θ(g(n) genau dann, wenn f (n) = O(g(n)) und f (n) = Ω(g(n)).
Definition 1.24 (Repräsentationen von Graphen) Es sei G = (V, E) ein Graph. Wir wollen
im Folgenden zwei Möglichkeiten der Repräsentation und Speicherung von Graphen betrachten.
Ab jetzt gelte immer, falls nichts anderes gesagt wird: Für einen Graphen G = (V, E) setzen wir
n := |V | und m := |E|.
(1) Adjazenzliste
Feld von n Listen, eine für jeden Knoten in V
Für v ∈ V enthält die Liste Adj[v] Verweise auf alle Knoten, die zu v benachbart sind.
Vorteil: Kompakte Darstellung (O(n + m) Speicher)
Nachteil: Test, ob {v, w} Kante ist, kostet in schlechtestem Fall O(n) Zeit
(2) Adjazenzmatrix
n × n Matrix A = (aij ) mit
1 , falls {i, j} ∈ E
aij =
0 sonst
Vorteil: Test, ob {v, w} Kante ist, kostet O(1) Zeit
Nachteil: Adjazenzmatrix erfordert Θ(n2 ) Speicher.
Bemerkung 1.25 Falls m = O(n) ist ein Aufwand von O(n + m) natürlich viel besser als O(n2 ).
Ein Verfahren mit Platz- oder Zeitkomplexität O(m+n) ist daher einem Verfahren mit Komplexität
O(n2 ) vorzuziehen. Wir werden einige Beispiele für kanonische Graphenklassen sehen, für die
m = O(n) gilt.
6
Wir kommen nun zu zwei für Graphenalgorithmen fundamentale Prinzipien, der Breitensuche
(engl. Breadth-First-Search, kurz BFS) und der Tiefensuche (engl. Depth-First-Search, kurz DFS).
Beide stellen Methoden dar, einen Graphen zu durchsuchen bzw. zu durchlaufen, um Strukturinformation über den Graphen zu gewinnen. Viele Graphenalgorithmen sind nichts anderes als eine
auf das Problem abgestimmte Variante der Breiten- oder Tiefensuche.
Breitensuche. Zu einem gegebenen Startknoten u ∈ V berechnet der Algorithmus Breitensuche beginnend mit i = 0 sukzessive aus der Sphäre Si (u) die Sphäre Si+1 (u) durch Untersuchung
der Nachbarn der Knoten in Si - bis schließlich alle Knoten der Zusammenhangskomponente von
G, die u enthält, besucht wurden.
Die Knoten werden dabei in einer Warteschlange (engl. Queue) Q abgespeichert, die nach
dem first-in first-out Prinzip arbeitet. Mit Enqueue (Q, u) wird das Element u am Ende von Q
eingefügt, mit v := Dequeue (Q) wird das Element am Anfang von Q als v gespeichert und aus
Q entfernt.
Als ein Ergebnis der Breitensuche werden die Knoten nach und nach als bekannt“ markiert.
”
Dazu wird ein Vektor bekannt der Länge n mitgeführt; seine i-te Komponente bekannt[i] ist gleich
0, wenn der Knoten i noch nicht bekannt ist, andernfalls ist sie gleich 1.
Vorlesung 26.10
Algorithmus 1.26
Input: Graph G = (V, E), Knoten u ∈ V
Output: Feld “bekannt“
BFS(G, u)
(1)
Enqueue (Q, u)
(2)
bekannt[u] := 1; foreach w ∈ V \ {u} do bekannt[w] := 0
(3)
while Q = ∅
(4)
v := Dequeue (Q)
(5)
foreach w ∈ N (v) and bekannt[w] = 0
(6)
Enqueue (Q, w)
(7)
bekannt[w] := 1
Proposition 1.27 Sei G = (V, E) ein Graph und u ∈ V ein Knoten von G, sowie H = (W, F )
die Zusammenhangskomponente von G, die u enthält. Dann besucht BFS(G, u) alle Knoten und
Kanten von G, die in H liegen, genau einmal. Das heißt: die Knoten werden genau einmal in Q
aufgenommen (und dabei als bekannt markiert) und die Kanten werden genau einmal (in Schritt
(5)) entlang gegangen. Die Laufzeit beträgt O(|V | + |F |).
¾
Beweis: ...
Durch eine minimale Erweiterung von BFS können wir auch die Abstände von u zu allen
anderen Knoten berechnen und einen aufspannenden Baum berechnen.
Algorithmus 1.28
Input: Graph G = (V, E), Knoten u ∈ V
Output: Felder “bekannt“, “abst“, “vor“
BFS∗ (G, u)
(1)
Enqueue (Q, u)
(2)
bekannt[u] := 1; foreach w ∈ V \ {u} do bekannt[w] := 0
(3)
abst[u] := 0
(4)
while Q = ∅
(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
7
Proposition 1.29 Sei G = (V, E) ein Graph und u ∈ V ein Knoten von G, sowie H = (W, F )
die Zusammenhangskomponente von G, die u enthält. Dann gilt für BFS∗ (G, u):
a) Wenn w in Q aufgenommen wird, hat vor[w] Q als letzter Knoten verlassen.
b) Wenn a vor b in Q aufgenommen wird, dann gilt abst[a] ≤ abst[b].
c) Zu jedem Zeitpunkt unterscheiden sich die abst[.]-Werte in Q nur um maximal 1.
d) Die Folge w, vor[w], vor[vor[w]], . . . bildet einen w, u-Pfad der Länge abst[w].
e) Die Kantenmenge F := {{w, vor[w]} : w ∈ W \ {u}} bildet die Kantenmenge eines aufspannenden Baumes von H.
f ) Für alle w ∈ W gilt: abst[w] = dist(u, w).
Beweis: a) gilt nach Konstruktion.
b) und c): diese Bedingungen gelten zu Beginn, wenn Q = (u). Jeder neue Knoten w erhält einen
Wert abst[w], der um eins höher ist als der von vor[w], welcher Q gerade verlassen hat (siehe a)).
Also bleiben die Bedingungen erhalten.
d) Zwischen w und vor[w] ist nach Konstruktion eine Kante. Da abst[w] − 1 = abst[vor[w]] sinkt
der abst[.] Wert in dieser Folge mit jedem Schritt um 1, es muss sich also um einen Pfad handeln,
der bei u endet und Länge abst[w] hat.
e) F enthält n − 1 Kanten. Wegen d) enthält der Graph (V, F ) für alle Knoten w einen w-u-Pfad,
ist also zusammenhängend, und damit nach Satz 1.13 ein Baum.
f) Wegen d) gilt abst[w] ≥ dist(u, w) für alle Knoten w. Es genügt also zu zeigen, dass auch
abst[w] ≤ dist(u, w) gilt. Wir beweisen dies durch Induktion über dist(u, w).
Wenn dist(u, w) = 0, dann u = w und abst[u] = 0. Gelte also die Behauptung für alle Knoten mit
kleinerem Abstand zu u als w.
Betrachte einen kürzesten u, w-Pfad P . Sei y der Nachbar von w auf P . Nach Induktionsannahme
gilt abst[y] ≤ dist(u, y). Außerdem ist dist(u, y) + 1 = dist(u, w).
Also muss wegen abst[w] ≥ dist(u, w) > dist(u, y) ≥ abst[y] und Kontraposition von b) der Knoten
y vor dem Knoten w die Schlange Q verlassen haben. Entweder w ist zu dem Zeitpunkt, wo y die
Schlange Q verlässt, schon in Q; dann gilt nach c) abst[w] ≤ abst[y]+1 ≤ dist(u, y)+1 = dist(u, w),
was zu zeigen war. Oder w kommt jetzt in die Schlange, dann ist vor[w] = y und wiederum
abst[w] = abst[y] + 1 ≤ dist(u, y) + 1 = dist(u, w), was zu zeigen war.
¾
Tiefensuche. In vielen Fällen ist es unerheblich, in welcher Reihenfolge man die Knoten und
Kanten eines Graphen abläuft – entscheidend ist, daß alle Knoten und Kanten (ggf. einer Zusammenhangskomponente) besucht“ werden. Der Algorithmus Tiefensuche, den wir nun kennen”
lernen werden, unterscheidet sich von Breitensuche lediglich durch die Auswahlstrategie für die
zu besuchenden Knoten und ist ein repräsentatives Beispiel für den sinnvollen Einsatz rekursiver
Programmierung.
Ein ausgewählter Knoten u ∈ V wird der Startknoten der Tiefensuche. Wenn es einen Nachbarn
w gibt, der noch unbekannt ist, dann markiere diesen Knoten als bekannt und wähle ihn als einen
neuen Startknoten für einen rekursiven Aufruf der Tiefensuche. Gibt es während eines solchen
Aufrufs einmal keinen unbekannten Nachbarn, dann beende diesen rekursiven Aufruf und kehre zu
dem Vorgänger zurück, und betrachte dessen Nachbarn (weiter).
Algorithmus 1.30
Input: Graph G = (V, E), Knoten u ∈ V
Output: Felder “bekannt“, “vor“
DFS(G, u)
(1)
foreach v ∈ V
(2)
bekannt[v] := 0
(3)
DFS-visit(u)
DFS-visit(v)
(1)
bekannt[v] := 1
(2)
foreach w ∈ N (v)
(3)
if bekannt[w] = 0 then vor[w] := v, DFS-visit(w)
Vorlesung 02.11.07
8
Proposition 1.31 Sei G = (V, E) ein Graph und u ∈ V ein Knoten von G, sowie H = (W, F )
die Zusammenhangskomponente von G, die u enthält. Dann markiert DFS(G, u) alle Knoten und
Kanten von G, die in H liegen, als bekannt. Die Kantenmenge F̂ := {{w, vor[w]} : w ∈ W \ {u}}
bildet einen aufspannenden Baum von H. Die Laufzeit beträgt O(|V | + |F |).
Beweis: Die Laufzeit der Tiefensuche kann wie folgt abgeschätzt werden: jeder Knoten wird höchstens einmal in DFS-visit aufgerufen, danach ist er bekannt und kann nicht noch einmal aufgerufen
werden. Wenn DFS-visit für Knoten
v aufgerufen wird, entstehen Kosten in der Höhe von maximal
deg(v). Also in der Summe O(|V | + v∈W deg(w)) = O(|V | + |F |) ergibt.
Ansonsten verläuft der Beweis analog zu den Beweisen von 1.27 und 1.29.
9
¾
2
Kürzeste Wege, minimal spannende Bäume, Matroide
2.1
Kürzeste Wege
Definition 2.1 (Kürzeste Pfade Problem, vergleiche auch Definition 1.8) Gegeben ein Graph
G = (V, E) mit einer Längen- (oder Gewichts-) Funktion : E → R≥0 , sowie s, t ∈ V . Gesucht ist
ein s, t-Pfad P = (W, F ) ⊆ G mit minimaler Länge
(e).
dist(s, t) := (P ) :=
e∈F
Lemma 2.2 Sei P = (v1 , . . . , vk ) ein kürzester v1 , vk -Pfad. Dann ist für alle 1 ≤ i ≤ j ≤ k der
Pfad (vi , . . . , vj ) ein kürzester vi -vj -Pfad.
Beweis: Klar durch Einsetzen eines angeblich kürzeren Pfades.
¾
Algorithmus 2.3
Input: Graph G = (V, E), Längenfunktion : E → R+ , Knoten s ∈ V
Output: Feld “abst“
Dijkstra(G, , s)
(1)
foreach x ∈ V \ {s} do abst[x] := ∞
(2)
abst[s] := 0
(3)
Q := V
(4)
while Q = ∅
(5)
x := Knoten in Q mit kleinstem abst[.]-Wert
(6)
Q := Q \ {x}
(7)
foreach y ∈ N (x) ∩ Q
(8)
abst[y] := min{abst[y], abst[x] + ({x, y})
Proposition 2.4 Der Algorithmus von Dijkstra hat Laufzeit O(n2 ) und berechnet abst[x] = dist(s, x)
für alle x ∈ V .
¾
Beweis: . . .
Bemerkung 2.5
a) Bei der Distanzberechnung in einem ungewichteten Graphen mittels Breitensuche reichte“ die
”
Reihenfolge in Q. Hier muss genauer geschaut werden (und jedesmal ein neues“ Minimum gebildet
”
werden, weil sich die abst[.]–Werte permanent ändern; daher auch die höhere Laufzeit. Durch die
Benutzung von intelligenteren Datenstrukturen (zB sogenannten Fibonacci-Heaps) lässt sich das
Verfahren auf O(m + n log n) beschleunigen.
b) Der Algorithmus von Dijkstra breitet sich kreisförmig um den Startknoten aus und arbeitet
nicht zielgerichtet. Dies wird im sogenannten A∗ -Algorithmus verbessert – siehe eventuell in den
Übungen.
c) Der Algorithmus von Dijkstra funktioniert nicht, wenn es Kanten mit negativer Länge gibt.
Warum nicht?
d) Der Algorithmus von Dijkstra bestimmt mit abst[x] = dist(s, x) nur die Länge von kürzesten
s, x-Pfaden, nicht aber die Pfade selber. Wie kann man das leicht ändern?
Vorlesung 8.11.
= (V, E,
) mit endlicher KnoDefinition 2.6 Ein gerichteter, gewichteter Graph ist ein Tupel G
→ R. Für
tenmenge V = ∅, gerichteter Kantenmenge E ⊆ V × V und Gewichtsfunktion : E
s, t ∈ V definieren wir:
• ein gerichteter s, t-Weg ist eine Folge von Knoten W = (v1 , . . . , vk ) mit k ≥ 1 und s = v1 ,
für alle i ∈ [k − 1],
t = vk und (vi , vi+1 ) ∈ E
10
• ein gerichteter s, t-Pfad ist ein gerichteter s, t-Weg mit paarweise verschiedenen Knoten, d.h.
vi = vj für alle i = j ∈ [k],
• ein gerichteter Zyklus ist ein gerichteter Weg (v1 , . . . , vk ) mit k ≥ 1 und (vk , v1 ) ∈ E,
• ein gerichteter Kreis ist ein gerichteter Pfad (v1 , . . . , vk ) mit k ≥ 2 und (vk , v1 ) ∈ E.
k−1
((vi , vi+1 )), das Gewicht eines
Das Gewicht eines Weges/Pfades ist definiert durch (W ) := i=1
k−1
Zyklus/Kreises ist definiert durch (W ) := ((vk , v1 )) + i=1 ((vi , vi+1 )).
heißt stark zusammenhängend, wenn für alle s, t ∈ V ein s, t-Weg in G
existiert. Die Distanz von
G
s zu t ist definiert als
min{(W ) : W ist ger. s, t−Weg} : falls es einen ger. s, t-Weg gibt,
dist(s, t) :=
∞
: sonst.
= (V, E,
) stark zusammenhängend. Dann gilt:
Proposition 2.7 Sei G
a) Wenn es einen Zyklus W mit (W ) < 0 gibt, dann gilt dist(u, v) = −∞ für alle u, v ∈ V .
b) Wenn es keinen solchen Zyklus gibt, dann gibt es zu jedem Paar u, v ∈ V einen u, v-Pfad
W = (v1 , . . . , vk ) mit (W ) = dist(u, v) und
c) für alle i ≤ j ∈ [k] ist der Pfad (vi , . . . , vj ) ein kürzester vi , vj -Weg.
¾
Beweis: ...
Bemerkung 2.8 Wir treffen die folgenden Vereinbarungen. Wir schreiben abgekürzt (i, j) =
((i, j)). Außerdem setzen wir (i, j) := 0 wenn i = j, und (i, j) := ∞ wenn i = j und (i, j) ∈ E.
Wir wollen nun in dem veränderten Szenario (gerichteter Graph, eventuell negative Kantenlängen) die Distanzen dist(u, v) für alle geordneten Paare u, v ∈ V bestimmen. Das folgende
Lemma ist das Kernstück des Algorithmus und illustriert die Strategie der dynamischen Programmierung.
= (V, E),
:E
→ R und i, j ∈ [n] und k ∈ [0, n]. Es seien
Lemma 2.9 Seien G
P ki,j := {P = (v1 , . . . , vr ) :
P ist gerichteter i, j-Pfad und v2 , . . . , vr−1 ∈ [k]} ,
dki,j := min{(P ) : P ∈ P ki,j }.
Dann gilt:
dki,j =
(i, j)
k−1
k−1
min{dk−1
i,j , di,k + dk,j }
:
:
falls k = 0
falls k ≥ 1
¾
Beweis: ...
Algorithmus 2.10
= (V, E),
Längenfunktion : E → R,
Input: Graph G
habe keine Kreise negativer Länge
Voraussetzung: G
Output: n × n Matrix D
Floyd–Warshall(G, )
(1)
for i = 1 to n
(2)
for j = 1 to n
(3)
d0i,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
(7)
dki,j := min{dk−1
i,j , di,k + dk,j }
n
(8)
return D := (di,j )1≤i,j≤n
Proposition 2.11 Algorithmus 2.10 berechnet in O(n3 ) die Matrix D[i, j] = dni,j = dist(i, j) für
alle Paare i, j ∈ [n].
11
¾
Beweis: ...
Angenommen, man hat die Distanzen berechnet. Was ist zu tun, um die kürzesten Pfade zu
ermitteln?
Bemerkung 2.12
a) Wir illustrieren die Pfadberechnung am Beispiel des Algorithmus Floyd–Warshall. Sei dazu
k
k
k
k
∈ P ki,j mit (Pi,j
) = dki,j ; und sei πi,j
der Vorgänger von j auf Pi,j
. Dann gilt:
Pi,j
0
=
πi,j
k
πi,j
=
i
N IL
:
:
falls i = j und (i, j) ∈ E
sonst
k−1
πi,j
k−1
πk,j
:
:
k−1
k−1
falls dk−1
i,j ≤ di,k + dk,j
k−1
k−1
falls dk−1
i,j > di,k + dk,j
b) Algorithmus 2.10 setzt voraus, dass der Graph keine Kreise negativer Länge besitzt. Wie
überprüft man das? Behauptung: G hat genau dann einen Zyklus negativer Länge. wenn es gibt
i, k ∈ [n] mit dki,i < 0.
Vorlesung 9.11.
2.2
Minimal spannende Bäume
Definition 2.13 (minimal spannender Baum) Gegeben ein (ungerichteter) Graph G = (V, E)
und eine Längenfunktion : E → R≥0 . Gesucht ist ein
spannender Baum T = (V, F ) ⊆ G (engl:
minimal spanning tree, kurz: MST), so dass (T ) := e∈F (e) minimal unter allen spannenden
Bäumen von G ist.
Idee: Wir bauen den Baum sukzessive auf, indem zu einem bereits konstruierten Teilbaum die
kürzeste Kante zwischen Baumknoten“ und Nicht-Baumknoten“ hinzugefügt wird.
”
”
Algorithmus 2.14 (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) ∪ {x}) do vor[v] := N IL, σ[v] := ∞
(5)
(6)
(7)
(8)
(9)
(10)
while W = 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
Satz 2.15 Der Algorithmus von Prim arbeitet korrekt und kann mit Laufzeit O(n2 ) implementiert
werden.
Beweis. Korrektheit: Nach jedem Durchlauf der WHILE-Schleife gilt:
(1) T = (W, F ) ist Baum auf W .
12
(2) Für alle v ∈ V \W gilt
σ[v] = min{(x, v) | x ∈ W und {x, v} ∈ E}
und σ[v] = (vor[v], v).
(3) Es gibt einen minimalen spannenden Baum T ∗ mit T ⊆ T ∗ .
Aus (1) und (3) folgt die Behauptung, daß der Algorithmus von Prim korrekt arbeitet.
Offensichtlich gelten (1) - (3) nach der Initialisierung.
Angenommen, (1) - (3) gelten zu Beginn einer WHILE-Schleife.
Sei T der zu Beginn der WHILE-Schleife konstruierte Baum, sei T ∗ ein minimal spannender
Baum, der T enthält, und sei y der Knoten, der im jetzt folgenden Schleifendurchlauf neu zu W
hinzugefügt wird. Dann gelten nach Konstruktion (1) und (2) auch nach Beendigung der WHILESchleife (bzgl. der neuen Menge W). Es bleibt, (3) zu zeigen.
Falls {y, vor[y]} ∈ E(T ∗ ), sind wir schon fertig.
Angenommen, dies ist nicht der Fall. Dann existiert Pfad P ∗ in T ∗ , der vor[y] mit y verbindet.
Sei {x , v } ∈ P ∗ die Kante, die W ”verläßt”, mit x ∈ W und v ∈ V \ W . Nach Wahl von y und
(2) gilt
(vor[y], y) = σ[y] ≤
≤
σ[v ]
(v , x ).
Betrachte T̃ := (T ∗ \{v , x }) ∪ {vor[y], y} .
T̃ ist spannender Baum in G (weil wieder zusammenhängend und n − 1 Kanten) der Länge
(T̃ )
= (T ∗ ) − (v , x ) + (vor[y], y)
≤ (T ∗ )
Da T ∗ ein minimal spannender Baum ist, gilt (T̃ ) = (T ∗ ), und T̃ ist auch ein minimal spannender
Baum, der zudem T enthält.
Laufzeit:
Die Initialisierung benötigt O(n) Schritte.
Die WHILE-Schleife wird (n − 1)-mal durchlaufen, und in jedem Durchlauf werden höchstens
O(n)-Schritte benötigt, insgesamt also O(n2 ).
¾
Bemerkung: Es ist möglich, den Algorithmus von Prim mit O(m + n log n) Laufzeit zu implementieren.
Hier die Idee für einen noch einfacheren Algorithmus: Wähle in jedem Schritt die kürzeste
Kante überhaupt, die keinen Kreis erzeugt.
Algorithmus 2.16 (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 }
Satz 2.17 Der Algorithmus von Kruskal arbeitet korrekt und kann mit Laufzeit O((m + n) log n)
implementiert werden.
13
Vorlesung 15.11.07
Beweis: Die Korrektheit beweisen wir im nächsten Abschnitt in einem allgemeinen Rahmen.
Zur Laufzeit: Sortieren kostet O(m log m) = O(m log n). Test auf Kreisfreiheit: wir können uns
nicht n-mal einen O(m)-Test via BFS leisten. Stat dessen merken wir uns für jede Komponente
einen repräsentativen Knoten (R-Knoten). Jeder Knoten zeigt auf den R-Knoten seiner Komponente (zu Beginn, beim leeren Graphen, auf sich selber). Jeder R-Knoten merkt sich außerdem
noch die Größe seiner Komponente.
Wenn nun eine neue Kante ei = {x, y} im Algorithmus getestet wird, brauchen wir lediglich
die R-Knoten von x und y zu vergleichen: wenn sie gleich sind, liegen x und y in der gleichen
Komponente und {x, y} darf nicht zu F hinzugefügt werden. Andernfalls liegt die Kante zwischen
zwei Komponenten und darf hinzugefügt werden. In dem Fall wählen sich alle Knoten der kleineren
Komponente den R-Knoten der größeren Komponente als neuen R-Knoten, und dieser R-Knoten
merkt sich, dass seine Komponente eine neue Größe bekommen hat. Wir sagen, dass die Knoten
der kleineren Komponente korrigiert werden.
Ein Test (ob eine Kante eingefügt werden darf) geht mit dieser Datenstruktur in O(1). Das
Update in einer Runde (in der eine Kante hinzugefügt wird) verursacht Kosten, die proportional zu
der Anzahl der zu korrigierenden Knoten sind. Die Komponentengröße eines korrigierten Knoten
verdoppelt sich mindestens. Das heißt, das jeder Knoten höchstens log n mal korrigiert wird, und
¾
damit sind die gesamten Update Kosten O(n log n).
2.3
Matroide
Definition 2.18 (Unabhängigkeitssystem, Matroid) Ein Unabhängigkeitssystem ist ein Paar
(E, I), wobei E eine endliche Menge ist und ∅ = I ⊆ P(E) und die die Bedingung
B ∈ I, A ⊆ B ⇒ A ∈ I
(3)
erfüllt ist. E heißt Grundmenge, die Mengen A ⊆ E mit A ∈ I heißen unabhängig, und die Mengen
B ⊆ E mit B ∈ I heißen abhängig.
Wenn außerdem noch gilt, dass
∀A, B ∈ I mit |A| < |B| : ∃e ∈ B \ A mit (A ∪ {e}) ∈ I,
(4)
dann nennen wir (E, I) ein Matroid.
Proposition 2.19 Sei G = (V, E) ein Graph und sei
I := {F ⊆ E : (V, F ) ist kreisfreier Graph }.
Dann ist (E, I) ein Matroid.
¾
Beweis: ...
Proposition 2.20 Sei (E, I) ein Unabhängigkeitssystem. Dann gilt:
a) ∅ ∈ I.
b) (E, I) ist genau dann Matroid, wenn gilt:
∀A, C ∈ I, |A| + 1 = |C| : ∃e ∈ C \ A mit (A ∪ {e}) ∈ I.
(5)
¾
Beweis: ...
Proposition 2.21 Sei (E, I) ein Unabhängigkeitssystem, F ⊆ E und IF := {A ∈ I : A ⊆ F }.
Dann gilt:
a) (F, IF ) ist ein Unabhängigkeitssystem.
b) Wenn (E, I) ein Matroid ist, dann ist auch (F, IF ) ein Matroid.
(F, IF ) heißt das durch F induzierte Unabhängigkeitssystem.
14
¾
Beweis: klar nach Definition.
Definition 2.22 Sei U = (E, I) ein Unabhängigkeitssystem. Jede inklusionsmaximale unabhängige Menge von I heißt Basis. Jede inklusionsminimale abhängige Menge von I heißt Kreis. Wir
definieren den
oberen Rang von U := r+ (U ) := max{|B| : B Basis von U }
unteren Rang von U := r− (U ) := min{|B| : B Basis von U }.
Wenn R+ (U ) = r− (U ) =: r(U ), dann heißt r(U ) Rang von U .
Mit dieser Definition kann man nun eine neue Charakterisierung von Matroiden angeben:
Lemma 2.23 Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt: U ist genau dann ein Matroid,
wenn
∀F ⊆ E und UF := (F, IF ) gilt, dass r+ (UF ) = r− (UF ).
¾
Beweis: ...
Lemma 2.24 Sei M := (E, I) ein Matroid, A ∈ I, e ∈ E, A ∪ {e} ∈ I. Dann enthält A ∪ {e}
genau einen Kreis.
Beweis. eventuell später.
Vorlesung 16.11.07
Definition 2.25 Ein Maximierungsproblem über einem Unabhängigkeitssystem E, I) ist gegeben
durch eine
Gewichtsfunktion : 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 2.26 (Greedy–Algorithmus zur Maximierung über Unabh.sys.)
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 }
Dieser Algorithmus heißt Greedy–Algorithmus (engl. greedy = gierig), weil er in jedem Schritt
den größtmöglichen Gewinn anstrebt. Eine von ihm gefundene Lösung Ag ∈ I wollen wir Greedy–
Lösung von (E, I, ) nennen. Unser Ziel ist es nun, eine weitere Charaktersierung von Matoriden
zu finden, nämlich dass der Greedy–Algorithmus genau dann das Maximierungsproblem optimal
löst, wenn (E, I) ein Matroid ist. Tatsächlich werden wir noch mehr beweisen.
Definition 2.27 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 ) := min{κ(F ) : F ⊆ E} den Rangquotienten von U .
15
Bemerkung 2.28 Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt:
a) ρ(U ) ≤ 1.
(2.23)
(2.27)
b) U Matroid ⇔ ∀F ⊆ E: r+ (UF ) = r− (UF ) ⇔ ρ(U ) = 1.
Beispiel 2.29 Sei m ≥ 4 und E = {e1 , . . . , em }, und
I := {{e1 }} ∪ P({e2 , . . . , em }).
Dann ist U := (E, I) ein Unabhängigkeitssystem, aber kein Matroid.
Setze außerdem γ ∈ N und : E → N definiert durch
γ + 1 für e = e1 ,
(e) :=
γ
für e ∈ E \ {e1 }.
Dann ist Ag = {e1 }, aber die optimale Lösung A∗ des Maximierungsproblems über U ist gegeben
durch A∗ = {e2 , . . . , em }. Es gilt also (Ag ) und (A∗ ) = (m − 1)γ. Außerdem ist r− (U ) = 1 und
r+ (U ) = m − 1. Man beobachtet also, dass
(Ag )
γ+1
1
1
r− (U )
=
= (1 + )
≈
.
(A∗ )
γ(m − 1)
γ m−1
r+ (U )
Das folgende technische Lemma ist lediglich eine Rechenhilfe:
Lemma 2.30 Seien E = {e1 , . . . , em }, A ⊆ E, : E → R. Wir definieren für alle j = 0, . . . , m
die Mengen Ej := {e1 , . . . , ej } und Aj := A ∩ Ej . Dann gilt
e∈A
(e) =
m
((ej ) − (ej+1 ))|Aj |,
j=1
wobei wir (em+1 ) := 0 setzen.
Satz 2.31 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
1≥
(Ag )
≥ ρ(U ),
(A∗ )
und es gibt eine Gewichtsfunktion, für die die zweite Ungleichung mit Gleichheit gilt.
Korollar 2.32 Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt: U ist genau dann Matroid,
wenn der Greedy–Algorithmus 2.26 für jede Funktion : E → R≥0 eine optimale Lösung der
Maximierungsaufgabe (E, I, ) findet.
Vorlesung 22.11.07
Was hilft uns das alles bei dem Versuch, die Korrektheit von Kruskals Algorithmus (siehe 2.16
und 2.17) zu beweisen?
Definition 2.33 Sei U = (E, I) ein Unabhängigkeitssystem und J := {B ∈ I : B ist Basis von I}.
Dann heißt (E, J) das zu (E, I) gehörige Basissystem.
Eine Minimierungsaufgabe über einem Unabhängigkeitssytem (E, I) mit Kostenfunktion : E → R
besteht darin, in dem zu (E, I) gehörigen Basissytem (E, J) eine Menge B ∗ ∈ J mit (B ∗ ) =
minB∈J (B) zu finden.
Beispiel 2.34 Das Problem minimal spannender Baum“ (siehe Definition 2.13) in einem Gra”
phen G = (V, E) mit : E → R ist eine Minimierungsaufgabe über dem Unabhängigkeitssystem
(E, I) mit : E → R, wobei I := {F ⊆ E : (V, F ) ist kreisfrei}.
16
Proposition 2.35 Sei U = (E, I) ein Unabhängigkeitssystem und (E, J) das zugehörige Basissystem. Sei : E → R eine Kostenfunktion
und β := max{0, max{(e) : e ∈ E}}. Definiere
ψ(e) := β − (e) für e ∈ E und ψ(A) := e∈A ψ(e) für alle A ∈ I. Dann gilt:
βr− (U ) − max{ψ(A) : A ∈ I} ≤ min{(B) : B ∈ J} ≤ βr+ (U ) − max{ψ(A) : A ∈ I}.
¾
Beweis: ...
Korollar 2.36 Sei U = (E, I) ein Matroid, (E, J) zugehöriges Basissytem, : E → R eine
Kostenfunktion und β und ψ so wie in 2.35 definiert. Wir betrachten den allgemeinen Greedy–
Minimierungsalgorithmus über Unabhängigkeitssystemen, den wir aus dem Algorithmus 2.16 erhalten, in dem wir die Bedingung (V, E ∪ {ei }) kreisfrei“ durch F ∪ {ei } ∈ I“ ersetzen. Dann
”
”
gilt:
a) ψ(e) ≥ 0 für alle e ∈ E.
b) βr(U ) − max{ψ(A) : A ∈ I} = min{(B) : B ∈ J}.
c) Der Greedy–Minimierungsalgorithmus angewendet auf (E, I, ) berechnet eine Menge B ∗ ∈ J
mit (B ∗ ) = min{(B) : B ∈ J}.
¾
Beweis: ...
Der Trick mit dem Aufaddieren von β, um die Zielfunktion nicht-negativ zu machen, funktioniert hier, weil (anders als bei dem Problem der kürzesten Wege) im Matroid alle Basen gleich
viele Elemente enthalten.
Zum Abschluss noch ein kleiner Ausblick:
Bemerkung 2.37 Seien M1 := (E, I1 ), . . . , MK := (E, Ik ) Matroide und : E → R≥0 . Dann
ist U := (E, I) mit I := I1 ∩ · · · ∩ Ik ein Unabhängigkeitssystem und für den Rangquotienten
gilt: ρ(U ) ≥ 1/k. Insbesondere liefert der Greedy–Algorithmus für das Maximierungsproblem auf
(E, I, ) eine Approximation der Güte
1
(Ag )
≥ .
(A∗ )
k
¾
Beweis: ohne.
3
Flüsse in Netzwerken
Vorlesung 16.11
s, t, c), wobei G =
Definition 3.1 (Netzwerk, Fluss) Ein Netzwerk ist ein Tupel N = (V, E,
→ R≥0
(V, E) ein gerichteter Graph ist, s, t ∈ V zwei ausgezeichnetene Knoten benennen und c : E
eine Kapazitätsfunktion. Die Knoten s bzw. t werden Quelle bzw. Senke genannt. Für einen Knoten
v ∈ V schreiben wir
N + (v) := {w ∈ V : ∃(v, w) ∈ E}
N − (v) := {w ∈ V : ∃(w, v) ∈ E}.
→ R≥0 heisst s-t-Fluss (engl. flow) in N , wenn
Eine Abbildung f : E
f ((y, x)) =
f ((x, y)) ∀x ∈ V \ {s, t}
[Flusserhaltung] ,
y∈N − (x)
y∈N + (x)
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
val(f ) :=
f (s, y) −
f (y, s)
y∈N + (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.
17
Wenn es Kanten (x, y) und (y, x) mit f (x, y) ≥ f (y, x) > 0 gibt, dann erhält man einen neuen
Fluss f mit val(f ) = val(f ) durch f (x, y) := f (x, y)−f (y, x), f (y, x) := 0 und f (u, v) := f (u, v)
für alle anderen Kanten (u, v). Wir können also ab jetzt die folgende Vereinbarung treffen:
Für jedes Knotenpaar x, y gilt: f (x, y) = 0 oder f (y, x) = 0.
Proposition 3.2 Jedes Netzwerk besitzt mindestens einen Fluss maximalen Werts.
¾
Beweis: ...
Definition 3.3 (Schnitt) 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
c(u, v)
cap(X) :=
u∈X,v∈N + (u)\X
Vorlesung 23.11.07
Lemma 3.4
a) Wenn f ein Fluss und X ein s-t-Schnitt im Netzwerk N sind, dann gilt val(f ) ≤ cap(X).
b)
f (x, y) −
f (y, x)
val(f ) =
x∈X,y∈N + (x)\X
x∈X,y∈N − (x)\X
¾
Beweis: ...
Bemerkung 3.5 Wir können das Flussproblem auch als LP formulieren. Dazu führen wir die
folgenden Bezeichnungen ein. Sei v ∈ V . Setze
δ − (v) := {(x, v) ∈ E},
n := |V |,
m := |E|,
δ + (v) := {(v, y) ∈ E}
= {e1 , . . . , em },
E
V = {s, t, v1 , . . . , vn−2 }
cT = (ce1 , . . . , cem ) ∈ Rm
≥0 mit cej := c(ej ).
Mit unserer Lösungsvariable x ∈ Rm
≥0 beschreiben wir die Flusswerte der einzelnen Kanten: wenn
(a, b) = ej , dann soll xej = f (a, b). Unser LP lautet also
maxm uT x
x∈R
u.d.N.
Cx = 0,
0 ≤ x ≤ c,
wobei uT = (ue1 , . . . , uem ) ∈ Rm definiert ist durch
⎧
+
⎪
⎨+1 : ej ∈ δ (s)
uej = −1 : ej ∈ δ − (s)
⎪
⎩
0
: sonst
und C = (Cvi ,ej ) ∈ R(n−2)×m mit
Cvi ,ej
⎧
⎪
⎨+1
= −1
⎪
⎩
0
: ej ∈ δ − (vi )
: ej ∈ δ + (vi )
: sonst.
Die Matrix C nennt man auch die (Knoten-Kanten) Inzidenzmatrix, in diesem Fall von dem
gerichteten Graphen G − {s, t}.
18
s, t, c) ein Netzwerk und f ein Fluss in N . Das
Definition 3.6 (Restnetzwerk) Sei N = (V, E,
f , s, t, cf ), wobei wir zunächst die
Restnetzwerk von N bezüglich f ist definiert als Nf := (V, E
auf ganz V × V erweitern. Dann setzen wir
Kapazitätsfunktion c mittels c(x, y) := 0 für (x, y) ∈ E
⎧
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.7 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:
(i) Falls (x, y) ∈ W und δ < f (y, x), setze f (x, y) := 0 und f (y, x) := f (y, x) − δ.
(ii) Falls (x, y) ∈ W und δ ≥ f (y, x), setze f (x, y) := f (x, y) + δ − f (y, x) und f (y, x) := 0.
(iii) Falls (x, y) ∈ W und (y, x) ∈ 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.)
Vorlesung 29.11
Satz 3.8 (MaxFlowMinCut-Theorem) Sei N ein Netzwerk. Dann gilt:
max
f : Fluss in N
val(f ) =
min
X: s-t-Schnitt in N
cap(X)
Korollar 3.9 Sei f ein Fluss in N . Wenn es in Nf keine s-t-Pfade mehr gibt, dann hat f maximalen Wert.
Algorithmus 3.10
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.7
Satz 3.11 Sei
N ein Netzwerk mit Kapazitäten aus N0 . Dann terminiert Algorithmus 3.10 nach
höchstens O( u,v c(u, v)) Schritten mit einem Fluss maximalen Werts.
Bemerkung 3.12 Zwei Probleme bleiben: der Algorithmus ist zu langsam, und kann im Falle
nicht natürlicher Kapazitäten eventuell gar nicht oder gegen einen suboptimalen Fluss konvergieren.
Abhilfe: augmentiere in jeder Runde entlang mehrerer kürzester s-t-Pfade.
s, t, c) ein Netzwerk und f ein Fluss in N . Der Fluss f heißt
Definition 3.13 Sei N = (V, E,
saturiert, wenn es im Restnetzwerk Nf keinen f -augmentierenden Pfad gibt, der nur Kanten aus
N benutzt.
(Bemerkung: Wenn f maximalen Wert hat, dann ist f saturiert, aber nicht notwendigerweise
umgekehrt.)
f , s, t, cf ) mit
Das geschichtete Restnetzwerk ist definiert als GNf = (V , GE
k := distNf (s, t),
V := V0 ∪ · · · ∪ Vk ,
V0 := {s},
Vk := {t},
Vi := {x ∈ V : distNf (s, x) = i},
f := (x, y) ∈ E
f : x ∈ Vi , y ∈ Vi+1 , 0 ≤ i ≤ k − 1 .
GE
19
Der Durchsatz eines Knotens v ∈ {s, t} ist definiert als
DS(v) := min{
cf (x, v),
f
(x,v)∈GE
cf (v, x)},
f
(v,x)∈GE
für s bzw. t setzen wir
DS(s) :=
cf (v, x),
DS(t) :=
f
(v,x)∈GE
cf (x, v).
f
(x,v)∈GE
Mit Hilfe dieser Konzepte entwickeln wir nun eine Verbesserung des Algorithmus 3.10. Die
Grundidee ist dabei wie folgt: wir berechnen in jeder Runde einen saturierten Fluss im geschichteten
Restnetzwerk.
Vorlesung 30.11.
Algorithmus 3.14
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)
Die Routine PullFlow drückt“ dabei (mittels einer BFS–ähnlichen Vorgehensweise) eine
”
Ladung der Größe DS(v) vom Knoten v bis zum Knoten t entlang der Kanten des geschichteten
Restnetzwerks, siehe die folgende Psudocode–Beschreibung. Dies geht, weil v als Knoten mit minimalem Durchsatz gewählt war. Die Routine PullFlow arbeitet im kompletter Analogie und
zieht“ die Ladung von s nach v.
”
Algorithmus 3.15
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 = {t}
(4)
v:=Dequeue (Q)
(5)
while push[v] = 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 ∈ Q then Enqueue (Q, x)
(16)
return g
Lemma 3.16 Algorithmus 3.14 berechnet einen saturierten Fluss g in GNf .
20
¾
Beweis: ...
Algorithmus 3.17
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
Lemma 3.18 Nach jedem Aufruf von MaxFlow innerhalb von Algorithmus 3.17 vergrößert sich
der s-t-Abstand in GNf .
Satz 3.19 Algorithmus 3.17 findet einen Fluss maximalen Werts in O(n3 ) Schritten.
Beweis: Die Korrektheit, also die Optimalität des Flusses, ist klar: Der Algorithmus terminiert
erst, wenn ein Fluss f gefunden ist, so dass GNf (und damit auch Nf ) keinen s-t-Pfad mehr
besitzt. Nach Korollar 3.9 hat f dann maximalen Wert.
Zur Laufzeit: Wegen Lemma 3.18 kann es maximal n Durchläufe der Prozedur MaxFlow in
Algorithmus 3.17 geben. Es genügt also zu zeigen, dass ein MaxFlow–Durchlauf in O(n2 ) erledigt
werden kann.
Betrachte einen MaxFlow–Aufruf. Da in jeder while–Schleife mindestens ein Knoten mit
Durchsatz 0 gelöscht wird, kann es nur n solche Schleifendurchläufe geben. Betrachte den i-ten
Durchlauf der while–Schleife, 1 ≤ i ≤ n. In den PushFlow und PullFlow Routinen werden nun
Kanten bearbeitet. Wieviele? Jede bearbeitete wird anschließend entfernt (diejenigen mit Kapazität 0) oder verbleibt. Letztere wollen wir berührt nennen. Sei mi bzw. m∗i die Anzahl der im i-ten
Schleifendurchlauf entfernten bzw. berührten Kanten.
Es ist offensichtlich, dass jede Kante des Netzwerks nur in maximal einer der Schleifen gelöscht
werden kann, also gilt i mi ≤ m. Außerdem kann in jeder der i–ten Schleife pro Knoten nur
maximal eine Kante berührt werden, denn wenn sie nicht entfernt, sondern nur berührt wurde,
besteht kein Bedarf, eine weitere, aus diesem Knoten ausgehende Kante zu berühren. Also gilt
m∗i ≤ n. Insgesamt folgt damit:
Kosten(einmal MaxFlow) ≤
n
Kosten in der i-ten while–Schleife ≤
i=1
≤ O(m) +
n
O(mi ) + O(m∗i )
i=1
n
O(m∗i ) ≤ O(m) +
i=1
n
i=1
O(n) = O(m + n2 ) = O(n2 ).
¾
Korollar 3.20
a) Bei 0-1-Kantenkapazitäten hat der Algorithmus 3.17 eine Laufzeit von O(nm).
b) Eine genauere Analyse zeigt: tatsächlich geht es bei 0-1-Kapazitäten sogar in O(n2/3 m) Schritten.
c) Bei ganzzahligen Kantenkapazitäten berechnet der Algorithmus 3.17 einen Fluss mit ganzzahligen Flusswerten.
Beweis: a) Da bei 0-1-Kapazitäten keine berührten Kanten (sondern nur entfernte) Kanten auftreten ergibt sich die Behauptung aus der vorangegangenen Laufzeitanalyse.
b) ohne.
c) Wenn die Kantenkapazitäten ganzzahlig sind und der Startfluss ganzzahlig ist, dann sind
auch die Kapazitäten im Restnetzwerk ganzzahlig, somit auch die Durchsätze aller Knoten, und
damit ist dann auch der neue Fluss wieder ganzzahlig, und alles wiederholt sich.
¾
Vorlesung 7.12.
21
4
Matchings
Definition 4.1 Sei G = (V, E) ein Graph. Eine Menge M ⊆ E heißt Matching, falls für alle
e, e ∈ M mit e = e gilt, dass e ∩ e = ∅. Ein Matching M heißt maximales Matching, wenn für alle
e ∈ E \ M gilt, dass M + e kein Matching ist. M heißt größtes Matching, wenn für alle Matchings
M gilt: |M | ≥ |M |. M heißt perfektes Matching, wenn 2|M | = |V | gilt. Offensichtlich ist ein
größtes Matching maximal, aber ein maximales Matching nicht notwendigerweise ein größtes. Die
Matchingzahl
ν(G) := max{|M | : M ist Matching von G}
ist definiert 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. Eine Menge
S ⊆ V heißt Knotenüberdeckung von G, wenn von jeder Kante in E mindestens ein Knoten in S
liegt.
τ (G) := max{|S| : S ist Knotenüberdeckung von G}
heißt Knotenüberdeckungszahl.
Proposition 4.2 In jedem Graphen G gilt: ν(G) ≤ τ (G).
¾
Beweis: ...
Satz 4.3 (Satz von König) Sei G = (A ∪ B, E) bipartit. Dann gilt:
a) Ein größtes Matching von G lässt sich in O(n2/3 m) Schritten berechnen.
b) ν(G) = τ (G).
Beweis: a) Wir gehen zunächst alle Kanten von G durch und betrachten anschließend nur noch
die Menge V der Knoten, die wenigstens einen Nachbarn haben. Dies geht in O(m) und führt zu
einem Graphen G mit m Kanten und n ≤ 2m Knoten. Jetzt konstruieren wir aus G wie folgt ein
s, t, c): füge eine Kante von s zu jedem Knoten in A ∩ V ein, und
Netzwerk N := (V ∪ {s, t}, E,
von jedem Knoten in B ∩ V zu t. Jede Kante aus E wird von ihrem Endknoten in A zu ihrem
Endknoten in B orientiert. Alle Kanten erhalten Kapazität 1. Wir berechnen nun mit Hilfe von
Algorithmus 3.17 einen Fluss f maximalen Werts in N und behaupten:
∩ (A × B) : f (e) = 1} ist ein Matching in G.
1) M := {e ∈ E
2) val(f ) = |M |.
3) M ist größtes Matching in G.
Das sieht man wie folgt ein: Nach Korollar 3.20 gilt, dass f ganzzahlig ist, wegen der Kapazitäts Wegen Flusserhaltung ist M ein Matching in
beschränkung gilt also f (e) ∈ {0, 1} für alle e ∈ E.
G , also auch in G, damit ist 1) bewiesen. Außerdem gilt:
val(f ) =
f (x, y) = |M |,
x∈A,y∈B
was 2) beweist. Und schließlich zu 3): M ist ein größtes Matching in G , denn wir können zu
jedem Matching M in G wie folgt einen Fluss f in N konstruieren: die Kanten aus M erhalten
Flusswert 1, die sie mit s und t verbindenden Kanten auch, alle anderen Kanten erhalten Flusswert
0. Wegen der Matchingeigenschaft ist das ein Fluss, er hat Flusswert val(f ) = |M |. Damit folgt:
2)
|M | = val(f ) ≤ max{val(f ) : f Fluss in N } = val(f ) = |M |,
also ist M größtes Matching in G und somit auch in G.
Wir können also mit Hilfe des Flusses f ein größtes Matching in G berechnen. Für die Laufzeitberechnung erinnern wir uns daran, dass N genau n + 2 Knoten und m + n Kanten hat, und
dass n ≤ 2m gilt. Also können wir die Laufzeit gemäß Korollar 3.20 durch
O((n + 2)2/3 (m + n ) = O(n2/3 m)
abschätzen.
22
b) Wir hatten in Proposition 4.2 bereits bewiesen, dass ν(G) ≤ τ (G) gilt. Um die umgekehrte
Ungleichung zu zeigen, konstruieren wir wieder ausgehend von G ein Netzwerk N : im Unterschied
zum Netzwerk N aus Teil a) übernnehmen wir alle Knoten aus G (auch die ohne Nachbarn), und
die Kanten zwischen A und B erhalten Kapazität ∞, ansonsten genauso wie in N . Wir berechnen
wieder mit Hilfe von Algorithmus 3.17 einen Fluss f maximalen Werts in N . Wegen Flusserhaltung
haben die Kanten zwischen A und B auch unter f Flusswert ≤ 1, und damit folgt, dass beide
Flüsse gleichen Wert haben.
Sei nun X ⊆ A ∪ B ∪ {s} ein s, t-Schnitt minimaler Kapazität in N . Dann gilt:
a)
3.8
cap(X) = max{val(f ) : f Fluss in N } = val(f ) = val(f ) = ν(G).
Man beachte, dass es in N keine Kanten von A ∩ X nach B \ X geben kann, weil sonst cap(X) = ∞
wäre. Daraus folgt, dass die Menge C := (A \ X) ∪ (B ∩ X) eine Knotenüberdeckung von G ist.
Weiterhin gilt, dass
cap(X) =
cap(s, v) +
cap(v, w) +
cap(w, t)
(s,v)∈E:v∈A\X
(v,w)∈E:v∈A∩X,w∈B\X
(w,t)∈E:w∈B∩X
|A \ X| + 0 + |B ∩ X| = |C|.
=
Also ist
τ (G) ≤ |C| = cap(X) = ν(G),
was zu zeigen war.
¾
Vorlesung 13.12.
Satz 4.4 (Heiratsatz von Hall) Sei G = (A ∪ B, E) bipartit. Dann besitzt G genau dann ein
Matching, das alle Knoten in A überdeckt, wenn
∀S ⊆ A : |N (S)| ≥ |S|,
wobei N (S) := {y ∈ V : ∃x ∈ S mit {x, y} ∈ E} die Nachbarschaft von S ist.
¾
Beweis: ...
Aus dem Satz von Hall lässt sich das folgende Korollar leicht ableiten:
Korollar 4.5 Sei G = (A ∪ B, E) bipartit. Dann gilt: G besitzt genau ein perfektes Matching,
wenn |A| = |B| und für jede Menge S ⊆ A gilt: |N (S)| ≥ |S|.
¾
Beweis: ...
Für allgemeine (soll heißen: nicht–notwendigerweise bipartite) Graphen gibt es die folgende
Defektformel von Berge. Bezeichne mit q(G) die Anzahl Komponenten von G mit einer ungeraden
Anzahl von Knoten. Definiere den Defekt von G als
def (G) := max{q(G[V \ S]) − |S|}.
S⊆V
Satz 4.6 (Defektformel von Berge) Für jeden Graphen G = (V, E) gilt: |V |−2ν(G) = def (G).
Beweis: Wir zeigen hier nur die einfache Richtung ≥: Sei S ⊆ V eine beliebige Teilmenge. Dann
ist
|V | − 2ν(G) = minimale Anzahl von nicht gematchten Knoten ≥ q(G[V \ S]) − |S|,
denn nachdem man die Menge S entfernt hat, muss in jeder Zusammenhangskomponente mit einer
ungeraden Anzahl mindestens ein Knoten ungematcht bleiben, falls er sich nicht mit einem Knoten
aus S zu einer Matchingkante zusammen tut. Ein Knoten in S kann das aber höchstens einmal
tun, und damit bleiben mindestens q(G[V \ S]) − |S| Knoten ungematcht.
Da obige Ungleichung für jede Teilmenge S gilt, muss auch |V | − 2ν(G) ≥ def (G) sein.
23
¾
Definition 4.7 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.
Proposition 4.8 Ein Matching M in G ist genau dann ein größtes Matching, wenn es keinen
M -augmentierenden Pfad in G gibt.
¾
Beweis: ...
Vorlesung 14.12.
Korollar 4.9 Wenn es Matchings M1 und M2 in G mit |M1 | > |M2 | gibt, dann existieren |M1 | −
|M2 | knotendisjunkte M2 -augmentierende Pfade in G, die nur Kanten aus M1 ΔM2 enthalten.
¾
Beweis: siehe Beweis von Proposition 4.8.
Damit ist die Idee für unseren Algorithmus klar: beginnne mit dem leeren Matching, solange
es noch augementierenden Pfade gibt, augmentiere das Matching entlang dieses Pfades, wenn es
keine mehr gibt, ist das Matching größtmöglich. Allerdings: wie sucht man nach augmentierenden
Pfaden bzw. stellt sicher, dass es keine mehr gibt?
Zunächst eine Definition und ein technisches Lemma:
Definition 4.10 Sei M ein Matching in G. Dann sei
∞
(M ) :=
min{(P ) : P ist größter M -augm. Pfad}
falls M größtes Matching
sonst
Bemerkung 4.11
a) Seien A1 , . . . , At ⊆ A. Dann ist A1 Δ . . . ΔAt die Menge aller Elemente aus A, die in genau
einer ungeraden Anzahl von Ai enthalten ist.
b) Seien P1 , . . . , Pt knotendisjunkte M -augmentierende Pfade. Dann ist
M := M Δ (E(P1 ) ∪ · · · ∪ E(Pt )) = M ΔE(P1 )Δ . . . ΔE(Pt )
ein Matching mit |M | = |M | + t.
¾
Beweis: ...
Ähnlich wie bei den saturierten Flüssen im geschichteten Restnetzwerk ist es nun von entscheidender Bedeutung, dass nach einer gutgewählten Augmentationsrunde der Parameter (M ) um
mindestens eins wächst.
Lemma 4.12 Sei M Matching in G und P1 , . . . , Pt eine inklusionsmaximale Menge von knotendisjunkten M -augmentierenden Pfaden der Länge (M ). Dann ist M := M Δ (E(P1 ) ∪ · · · ∪ E(Pt ))
ein Matching mit
(M ) > (M ).
¾
Beweis: folgt später.
Wir beschreiben nun unseren Algorithmus zunächst nur ungenau und werden später in der
Laufzeitanalyse die Details nachliefern.
24
Algorithmus 4.13
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 diese Pfade gleichzeitig
Satz 4.14 Algorithmus 4.13 findet
in einem bipartiten Graphen ein größtes Matching und lässt
√
sich mit einer Laufzeit von O( nm) Schritten implementieren.
Beweis: Wir erläutern zunächst, wie sich ein Durchlauf der while-Schleife in O(n + m) Schritten
implementieren lässt. Die Menge S ist unmittelbar gegeben. Starte nun im ersten Knoten von S
eine Breitensuche. Sobald ein ungematchter Nachbar auftaucht, wird (M ) = 1 festgelegt. Sind alle
Nachbarn gematcht, dann nehme – statt wie üblich die Nachbarn selber – die Matchingpartner der
Nachbarn in die Queue auf. Gehe zunächst nicht weiter in die Tiefe, sondern starte nun im nächsten
Knoten von S eine analoge Breitensuche. Stößt eine Breitensuche dabei auf Nachbarn, die schon
von einer anderen Breitensuche entdeckt wurden, dann wird die Kante bis dahin noch erkundet,
die Nachbarn dann aber nicht weiterverfolgt. Wenn alle Knoten in S nur gematchte Nachbarn
haben, gehen die Breitensuchen einen Schritt weiter in die Tiefe. Die Breitensuchen verlaufen also
so parallel wie möglich.
Auf diese Weise wird der Parameter (M ) und die Menge T bestimmt. Wir merken uns dabei
zu jedem Knoten seinen Vorgänger, der einen um eins kleineren Abstabd zu der Menge S hat.
Hierbei wird jede Kante nur einmal beschritten, so dass nur der Aufwand O(n + m) anfällt.
Starte nun in einem beliebigen Knoten in T eine Tiefensuche und verfolge dabei die Vorgänger
zurück bis hin zu einem Knoten in S. Ein auf diese Weise einmal gefundener M –augmentierender
Pfad der Länge (M ) wird als bekannt markiert. Starte nun die nächste Tiefensuche in einem
neuen Knoten von T , bereits markierte Knoten werden dabei nicht wieder betrachtet. Auf diese
Weise findet der Algorithmus wiederum in O(n + m) die gewünschte inklusionsmaximale Menge
knotendisjunkter Pfade.
√
Wir zeigen nun noch, dass es nur O( n) Aufrufe der while-Schleife gibt. Sei M ∗ ein größtes
Matching. Nach jedem Durchlauf der while-Schleife
erhöht sich nach Lemma 4.12 (M ) um mindes√
tens
eins.
Sei
M
das
aktuelle
Matching
nach
n
Durchläufen,
jetzt beträgt (M ) also mindestens
√
n.
∗
Nach Korollar 4.9
knotendisjunkte (M -augmentierende) Pfade der
√ existieren jetzt |M∗ | − |M | √
|
−
|M
|)
n ≤ n. Dadurch ist die Anzahl der weiteren
Länge mindestens n. Also muss (|M
√
√
√
Durchläufe durch (|M ∗ | − |M |) ≤ n/ n = n beschränkt, und es gibt insgesamt höchstens 2 n
Durchläufe.
Da wir uns auf zusammenhängende Graphen beschränken können (betrachte andernfalls die
Zusammenhangskomponenten
einzeln), gilt O(n+m) = O(m) und es ergibt sich somit eine Laufzeit
√
√
von O( n(n + m) = O( nm).
¾
Vorlesung 20.12.
Es fehlt noch der
Beweis: von Lemma 4.12. ...
¾
Angenommen, wir haben einen gewichteten Graphen gegeben und wollen nun nicht ein größtes
Matching berechnen, sondern ein möglichst leichtes (oder schweres) perfektes Matching. Ein erster
25
Schritt ist eine elegante Beschreibung der perfekten Matchings eines Graphens.
Definition 4.15 Sei G = (V, E) ein Graph. P M (G) bezeichne die Menge der charakteristischen
Vektoren der perfekten Matchings von G, das heißt:
0
e ∈ M
m
P M (G) := x ∈ {0, 1} : ∃ perfektes Matching M von G mit xe :=
1
e∈M
Proposition 4.16 Sei G = (V, E) ein Graph. ur Erinnerung: δ(v) := {e ∈ E : v ∈ e}. Dann gilt
⎧
⎫
⎨
⎬
P M (G) = x ∈ Rm : ∀v ∈ V :
xe = 1, ∀e ∈ E : xe ∈ {0, 1}
⎩
⎭
e∈δ(v)
¾
Beweis: ...
Natürlich stört uns an dieser Beschreibung noch die Ganzzahligkeitsbedingung. Der erste naheliegende Schritt ist die Ersetzung von xe ∈ {0, 1} durch xe ≥ 0, und das führt zu der folgenden
Definition.
Definition 4.17
F P M (G) =
⎧
⎨
⎩
x ∈ Rm : ∀v ∈ V :
xe = 1, ∀e ∈ E : xe ≥ 0
e∈δ(v)
⎫
⎬
⎭
Man beachte: P M (G) ist eine Familie von 0, 1-Vektoren, F P M (G) ist ein Polytop. Wie verhalten sich P M (G) und F P M (G) zueinander? Offensichtlich gilt, dass P M (G) ⊆ F P M (G) gilt.
Im Falle von bipartiten Graphen G können wir aber noch viel mehr sagen.
Satz 4.18 Sei G ein bipartiter Graph. Dann gilt: Die Ecken von F P M (G) sind ganzzahlig.
Beweis: Angenommen,
x̃ sei eine nicht–ganzzahlige Ecke von F P M (G). Sei Ẽ := {e ∈ E : 0 <
x̃e < 1}. Wegen e∈δ(v) xe = 1 berührt jeder Knoten, der eine Kante aus Ẽ berührt, mindestens
zwei. Also enthält Ẽ einen Kreis C, und weil G bipartit ist, muss C gerade Länge haben. Setze
die Komponenten in d ∈ Rm abwechselnd auf −1 und +1 für die Kanten in C, und auf 0 für alle
anderen Kanten. Für > 0 klein genug liegt dann x̃ + d und x̃ − d in F P M (G), aber dann kann
¾
x̃ = 12 (x̃ + d) + 12 (x̃ − d) nicht Ecke von F P M (G) sein; Widerspruch.
Vorlesung 21.12.07
Inwiefern hilft uns nun die Aussage, dass die Ecken von F P M (G) ganzzahlig sind?
Proposition 4.19 Sei P ein Polytop, S Menge mit S ⊆ P ⊆ Rm , und sei S die Menge der
Ecken von P . Wenn S ⊆ S gilt, dann folgt
a) conv(S) = P ,
b) min{wT x : x ∈ S} = min{wT x : x ∈ P }.
¾
Beweis: ...
Korollar 4.20 Für G bipartit gilt: conv(P M (G)) = F P M (G).
¾
Beweis: folgt sofort aus Proposition 4.19.
Damit haben wir ein Beispiel für eine sehr allgemeine Strategie kennengelernt: gegeben ein
diskreter Suchraum S, finde eine gute polyedrische Beschreibung P (die möglichst wenige Nebenbedingungen benötigt) mit S ⊆ P , so dass die Ecken von P in S liegen. Dies wollen wir jetzt
auch noch für allgemeine (also nicht-notwenidig bipartite) Graphen G erreichen.
Lassen wir die Bedingung “bipartit” aus Satz 4.18 fallen, dann sind die Ecken immer noch “fast
ganzzahlig”:
26
Satz 4.21 Sei G = (V, E) ein Graph, x ∈ F P M (G). Dann gilt: x ist Ecke von F P M (G) genau
dann, wenn für alle e ∈ E gilt, dass xe ∈ {0, 12 , 1} und die Menge {e ∈ E : xe = 12 } eine Familie
von knotendisjunkten, ungeraden Kreisen bildet.
Beweis: Angenommen, x sei von der obigen Form. Wir setzen w ∈ Rn durch
−1
xe = 0
we :=
0
xe > 0.
Dann ist wT x̃ ≤ 0 eine gültige Ungleichung für F P M (G) und wir behaupten, dass
F P M (G) ∩ {x̃ : wT x̃ = 0} = {x},
womit x tatsächlich Ecke von F P M (G) wäre. Die Aussage ⊇ in der Behauptung gilt, weil x ∈
F P M (G) nach Voraussetzung und wT x = 0 nach Konstruktion.
Angenommen, die Aussage ⊆ gelte nicht, das heisst, es gebe ein x̃ ∈ F P M (G) mit wT x̃ = 0 und
x̃ = x.
Wegen w ≤ 0 und x̃ ≥ 0 darf x̃ nur in den Komponenten positiv sein, wo auch
x positiv ist (weil
w dort 0 ist). Wenn xe = 1, dann xe = 0 für alle zu e inzidenten e wegen e∈δ(v) xe = 1. Also
ist auch dort x̃e = 0. Wegen e∈δ(v) x̃e = 1 dann aber wiederum x̃e = 1.
x̃ könnte also von x nur in den Komponenten x̃e mit xe = 12 abweichen. Das geht aber auch
nicht, da die entsprechenden Kanten ungerade Kreise bilden. Damit ist auch ⊆ in der Behauptung
bewiesen.
Zeigen wir nun die umgekehrte Richtung in der Aussage des Satzes: sei x eine Ecke von
F P M (G). Dann existiert ein w ∈ Rm , so dass x eindeutige optimale Lösung von
(P ) :
max{wT x : x ∈ F P M (G)}
ist.
Zunächst ist zu zeigen, dass xe ∈ {0, 1, } für alle e ∈ E ist. Dazu konstruieren wir einen bipartiten
Graphen G wie folgt:
V (G ) := {u : u ∈ V (G)} ∪ {u : u ∈ V (G)},
E(G ) := {{u , v }, {u , v } : {u, v} ∈ E(G)}.
Sei außerdem w ∈ R2m der Vektor, den man durch Verdoppelung / Hintereinanderhängen von w
erhält. Betrachte nun
(P ) :
max{(w )T x : x ∈ F P M (G )}.
Die optimale Lösung wird (u.a.) in einer Ecke x von F P M (G ) angenommen. Nach Satz 4.18
sind alle Ecken ganzzahlig, also auch x . Setze nun x̃ ∈ Rm durch x̃e = 12 (xe + xe ). Dann ist x̃
optimale Lösung von (P) (denn gäbe es eine bessere, dann auch eine bessere für (P’)), also muss
x = x̃, denn x war ja eindeutige Lösung von (P). Da x ganzzahlig, muss xe = x̃e ∈ {0, 12 , 1}.
1
Bleibt zu zeigen, dass die Menge
{e : xe = 2 } eine Familie von knotendisjunkten ungeraden
Kreisen bildet. Es ist klar wegen e∈δ(v) xe = 1, dass diese Kanten eine Familie von Kreisen bildet.
Hätte einer der Kreise eine gerade Länge, dann ergäbe sich in der gleichen Weise ein Widerspruch
¾
dazu, dass x Ecke von F P M (G) ist, wie in Satz 4.18.
Mit Hilfe dieses Satzes können wir nun die Nebenbedingungen in F P M (G) so verschärfen, dass
wir wieder eine Beschreibung von conv(P M (G)) erhalten. Für einen Graphen G = (V, E) und eine
Menge S ⊆ V definieren wir δ(S) := {e = {x, y} ∈ E : x ∈ S, y ∈ V \ S}.
Satz 4.22 Sei G = (V, E) ein Graph. Setze
Q(G) = x ∈ Rm : ∀v ∈ V :
xe = 1, ∀e ∈ E : xe ≥ 0,
e∈δ(v)
∀S ⊆ V mit |S| ≥ 3, |S| ungerade :
e∈δ(S)
Dann ist conv(P M (G)) = Q(G).
27
xe ≥ 1 .
Beweis: Zunächst ist klar nach Definition von Q(G), dass P M (G) ⊆ Q(G). Man kann nun zeigen,
dass jede Ecke von Q(G) in conv(P M (G)) liegt – aber wir werden diesen Beweis in der Vorlesung
¾
nicht führen. Daraus folgt dann mit Proposition 4.19 die Aussage des Satzes.
Vorlesung 10.1.08
5
5.1
Ganzzahlige lineare Optimierung
Ganzzahlige Polyeder
Definition 5.1 Sei L ⊆ Rn . L heißt Gitter (engl. lattice) des Rn , wenn es eine Basis {v1 , . . . , vn }
des Rn gibt mit
n
L=
λi vi : λ1 , . . . , λ − n ∈ Z}.
i=1
n
{v1 , . . . , vn } heißt Basis des Gitters. Z heißt Standardgitter im Rn .
Bemerkung 5.2 Sei L ein Gitter des Rn . Dann gibt es eine reguläre Matrix T ∈ Rn×n mit
L = T (Z).
¾
Beweis: ...
Oft ist es von Interesse, den optimalen Punkt eines linearen Optimierungsproblems auf einem solchen Gitter zu finden. Mit Bemerkung 5.2 wissen wir, dass wir uns hierfür im Folgenden
o.B.d.A. auf das Standardgitter beschränken können.
Definition 5.3 Sei P ⊆ Rn ein Polyeder. Dann heißt PI := conv(Zn ∩ P ) die ganzzahlige Hülle
(engl. integer hull) oder auch ganzzahliger Kern von P . Gilt P = PI , dann heißt P ganzzahlig.
Bemerkung 5.4 Sei P ⊆ Rn und c ∈ Rn . Dann gilt:
max
cT x =
n
x∈Z ∩P
maxn
x∈conv(Z ∩P )
cT x = max cT x = max cT x
x∈PI
x∈P
nach Definition 5.3 und den Ergebnissen der Optimierung 1. Insbesondere bedeutet dies, dass der
Optimalwert eines linearen Optimierungsproblems auf einem ganzzahligen Polyeder P ⊆ Rn im
Fall c ∈ Zn ganzzahlig ist.
Definition 5.5 Eine H-Darstellung {x ∈ Rn : Ax ≤ b} eines Polyeders heißt ganzzahlig, falls
A ∈ Zm×n und b ∈ Zm gilt. Ein Polyeder P heißt rational, falls P eine ganzzahlige H-Darstellung
besitzt.
Satz 5.6 Sei P = {x ∈ Rn : Ax ≤ b, A ∈ Rm×n , b ∈ Rm }. Gilt P = PI , dann hat P eine
ganzzahlige H-Darstellung P = {x ∈ Rn : A x ≤ b , A ∈ Zm ×n , b ∈ Zm , m ≤ m}.
¾
Beweis: ...
Satz 5.7 Sei P ein rationales Polyeder. Dann besitzt P eine V-Darstellung
P = conv(V ) + cone(S)
mit endlichen Teilmengen V ⊆ Qn und S ⊆ Zn .
¾
Beweis: ...
Man sieht also, dass es reicht, die Frage zu klären, wann alle Ecken eines rationalen Polyeders
ganzzahlig sind. Diese Frage ist aber – wie wir ja schon am Beispiel des Matching–Polytops gesehen haben – oft schwer zu beantworten. Im Folgenden beschäftigen wir uns daher mit einigen
hinreichenden Bedingungen für die Ganzzahligkeit von Polyedern.
28
5.2
Unimodularität und totale Unimodularität
Definition 5.8 Sei A ∈ Qm×n . Für jedes b ∈ Zm setze P (b) := {x ∈ Rn : Ax ≤ b}.
Definition 5.9 Eine Matrix A ∈ Zm×n heißt unimodular, wenn rang(A) = n ist und für jede
Teilmenge B ⊆ [m] mit |B| = n gilt, dass det(AB ) ∈ {−1, 0, 1}.
Zunächst ein technisches Lemma.
Lemma 5.10 Sei C ∈ Zn×n regulär. Dann sind folgende Aussagen äquivalent:
a) |det(C)| = 1,
b) für alle c ∈ Zn gilt C −1 c ∈ Zn ,
c) C −1 ∈ Zn×n .
¾
Beweis: ...
Satz 5.11 Sei A ∈ Zm×n mit rang(A) = n. Dann sind die beiden folgenden Aussagen äquivalent:
a) A ist unimodular.
b) Für jedes b ∈ Zm ist jede Ecke von P (b) ganzzahlig.
¾
Beweis: ...
Korollar 5.12 Seien A ∈ Zm×n unimodular und b ∈ Zm . Dann gilt P = PI .
¾
Beweis: Folgt aus Satz 5.7 und Satz 5.11.
Definition 5.13 Eine Matrix A ∈ Zm×n heißt total unimodular, wenn für jede quadratische Teilmatrix C von A gilt, dass det(C) ∈ {−1, 0, 1}.
Bemerkung 5.14 Sei A ∈ Zm×n total unimodular. Dann gilt A ∈ {0, ±1}m×n. Ferner ist jede
Matrix A , die aus A durch Streichen von (bis zu m − 1) Zeilen und (bis zu n − 1)) Spalten entsteht,
total unimodular.
¾
Beweis: klar nach Definition.
Satz 5.15 Die Matrix A ∈ Zm×n ist genau dann dann total unimodular, wenn
ist (wobei En hier die n × n Einheitsmatrix ist).
A
En
unimodular
¾
Beweis: ...
Satz 5.16 Sei A ∈ Zm×n und sei A eine der folgenden Matrizen:
A
A
AT , −A, (A, Em ),
,
.
En
−A
Dann ist A genau dann total unimodular, wenn A total unimodular ist.
¾
Beweis: ...
Korollar 5.17 Die Matrix A ∈ Zm×n ist genau dann total unimodular, wenn für jeden Vektor
b ∈ Zm alle Ecken von {x ∈ Rn : Ax ≤ b, x ≥ 0} ganzzahlig sind.
¾
Beweis: ...
29
Satz 5.18 Sei A ∈ {0, ±1}m×n. Dann sind äquivalent
a) A ist total unimodular.
b)
J der Spalten von A besitzt eine Zerlegung J = S ∪ T , so dass
j∈S Aj −
Jede Teilmenge m
j∈T Aj ∈ {0, ±1} , wobei Aj die j-te Spalte von A bezeichne.
c) Jede quadratische reguläre Teilmatrix A von A besitzt eine Zeile mit ungerader Anzahl von
Nichtnullelementen.
d) Die Summe aller Elemente jeder quadratischen Teilmatrix mit geraden Zeilen- und Spaltensummen ist durch 4 teilbar.
e) Keine quadratische Teilmatrix hat Determinate ±2.
¾
Beweis: ...
Vorlesung 17.1.08
Korollar 5.19
a) Sei A ∈ {0, ±1}m×n mit genau zwei Nichtnull-Elementen pro Spalte. Dann ist A genau dann
total unimodular, wenn es eine Aufteilung der Zeilen von A in zwei Klassen gibt, so dass für jede
Spalte gilt:
die zwei Nichtnull-Elemente einer Spalte gehören zu verschiedenen Klassen genau dann,
wenn sie gleiche Vorzeichen haben.
b) Sei A ∈ {0, ±1}m×n mit genau einer +1 und einer −1 pro Spalte. Dann ist A total unimodular.
¾
Beweis: ...
Beispiel 5.20 Sei G = (V, E) ein vollständiger bipartiter Graph, also
˙ 2 , |V | = n, |P1 | = n1 , |P2 | = n2 , E = {e1 , . . . , em } mit m = n1 · n2 .
V = P1 ∪P
Seien w = (w1 , . . . , wm ) ∈ Rm die Kantengewichte. Gesucht ist ein schwerstes Matching in G.
Sei M ein Matching in G. Dann definieren wir den für M charakteristischen Vektor x ∈ Rm
durch xi := 1 genau dann, wenn ei ∈ M . Betrachte nun die Inzidenzmatrix A ∈ R(n1 +n2 )×(n1 n2 )
von G, bei der wir die Zeilen so arrangieren, dass die ersten n1 Zeilen die Knoten in P1 repräsentieren, die zweiten n2 Zeilen die Knoten aus P2 .
Es gilt, dass x ∈ Rm genau dann charakteristischer Vektor eines Matchings in G ist, wenn
Ax ≤ 1 und x ∈ {0, 1}m, und daher können wir unser Optimierungsproblem wie folgt als ILP
formulieren:
maxm {wT x : Ax ≤ 1, x ∈ {0, 1}m}.
x∈R
Die Matrix A hat genau zwei Nichtnull-Elemente pro Spalte. Wähle Klassen K1 = {1, . . . , n1 } und
K2 = {n1 + 1, . . . , n1 + n2 }. Dann ist nach Korollar 5.19 A total unimodular, also hat P = {x ∈
Rm : Ax ≤ b, x ≥ 0} nur ganzzahlige Ecken nach Korollar 5.17. Also hat das obige ILP den
gleichen Wert wie das LP
maxm {wT x : Ax ≤ 1, x ≥ 0}.
x∈R
6
Travelling Salesman Problem
Definition 6.1 Sei G = (V, E) ein Graph. Ein Kreis in G mit |V | Knoten heißt Hamilton Kreis
(HK) in G.
Wir werden uns (u.a.) mit dem Problem beschäftigen, zu einem gegebenem Graph G zu entscheiden, ob G einen Hamilton Kreis hat. Für dieses Problem ist kein effizienter Algorithmus
30
bekannt, und wir werden mit Hilfe der NP-Vollständigkeitstheorie zeigen, dass es vermutlich auch
keinen gibt.
Dazu müssen wir zunächst einige grundlegende Begriffe aus der Vorlesung des letzten Semesters
wiederholen. (Entsprechend steht z.B. Definition I.6.4 für Definition 6.4 aus Optimierung I.)
Wiederholung. In Definition I.6.4 haben wir die Klasse P derjenigen Probleme eingeführt,
für die es einen Algorithmus mit polynomialer Laufzeit gibt, der das Problem korrekt entscheidet.
Die Klasse NP (siehe Definition I.6.7) enthält alle Probleme, die in polynomialer Zeit korrekt
gelöst werden können, wenn man ein sogenanntes Zertifikat mitgeliefert bekommt. Laut Proposition
I.6.9 gilt, dass P ⊆ NP. (Achtung: NP steht für Nondeterministic Polynomial, und nicht für Not
Polynomial.) Hinter der Klasse NP steht eine etwas gewöhnungsbedürftige Definition – tatsächlich
genügt es aber für unsere jetzigen Zwecke zu verstehen, dass NP eine sehr große Klasse ist, die
nahezu alle natürlichen Optimierungsprobleme enthält.
Im Gegensatz dazu müssen wir uns wieder sehr genau damit vertraut machen, wann ein Problem
L1 in ein Problem L2 überführt oder transformiert werden kann. In Definition I.6.10 haben wir
festgelegt, dass sich Problem L1 auf Problem L2 polynomial transformieren lässt (und schreiben
L1 ≤p L2 ), wenn es ein Polynom p(n) gibt und wir zu jedem f1 ∈ Σ∗ ein f2 ∈ Σ∗ in Zeit höchstens
p(|f1 |) konstruieren können, so dass
f1 ∈ L1 ⇔ f2 ∈ L2 .
Mit anderen Worten: L2 ist mindestens so schwer wie L1 , denn wenn wir L2 lösen könnten, dann
könnten wir mit Hilfe der obigen Transformation auch L1 lösen.
Und schließlich die Definition I.6.12: ein Problem L heißt NP-vollständig (englisch: NP-complete,
kurz: NPC), wenn L ∈ NP und für alle L ∈ NP gilt, dass L ≤p L.
Die folgende Proposition erklät, warum es unwahrscheinlich ist, dass ein Problem, das mindestens so schwer ist wie ein NP-vollständiges Problem, in polynomialer Zeit gelöst werden kann.
Proposition 6.2 Wir betrachten zwei Probleme L und L∗ . Wenn L∗ ∈ NPC und L∗ ≤p L und
L ∈ P, dann ist P = NP.
¾
Beweis: ...
Wir üben zunächst den Begriff der Transoformation an zwei sehr einfachen Beispielen.
Beispiel 6.3
a) Das Problem Clique ist wie folgt definiert.
Eingabe: Graph G und k ∈ N.
Frage: Hat G eine k-Clique?
b) Das Problem Stabile Menge ist wie folgt definiert.
Eingabe: Graph G und k ∈ N.
Frage: Hat G eine k-stabile Menge?
c) Das Problem Knotenüberdeckung ist wie folgt definiert.
Eingabe: Graph G und k ∈ N.
Frage: Hat G eine k-Knotenübderdeckung?
(Zur Erinnerung: eine k-Knotenübdereckung in G = (V, E) ist eine Menge S ⊆ V mit |S| = k, so
dass für alle Kanten e ∈ E gilt: e ∩ S = ∅.
Offensichtlich gilt die folgende Beziehung:
S ⊆ V ist -stabile Menge von G ⇔ V \ S ist (n − )-Knotenüberdeckung von G.
(6)
wie man mit der offensichtlichen Transformation (G, k) →
Es gilt: Clique ≤p Stabile Menge,
(Ḡ, k) nachweist, wobei Ḡ := (V, V2 \ E), denn G hat eine genau dann eine k-Clique, wenn Ḡ
eine k-stabile Menge hat.
31
Es gilt: Stabile Menge ≤p Knotenüberdeckung, wie man mit der offensichtlichen Transformation (G, k) → (G, n − k) nachweist, denn G hat genau dann eine k-stabile Menge, wenn Ḡ
eine n − k-Knotenüberdeckung hat.
Vorlesung 18.01.08
Definition 6.4 Ein Problem L heißt NP-schwer, wenn für alle Probleme L ∈ NP gilt, dass
L ≤p L.
Proposition 6.5 Wenn L NP-schwer ist und L ∈ P, dann ist P = NP.
¾
Beweis: ...
Wie zeigt man, dass ein Problem NP-schwer ist? Wegen der Transitivität der Relation ≤p
genügt hier der Vergleich mit einem NP-schweren Problem.
Proposition 6.6 Wenn es ein NP-schweres Problem L∗ gibt mit L∗ ≤p L, dann ist auch L auch
NP-schwer.
¾
Beweis: ...
Beispiel 6.7 Wir erinnern zunächst an das aussagenlogische Erfüllbarkeitsproblem (engl.: Satisfiability, kurz: SAT). Gegeben ist eine aussagenlogische Formel, z.B.
(x1 ∨ x̄2 ∨ x̄3 ) ∧ (x2 ∨ x̄5 ∨ x̄2 ) ∧ (x̄7 ∨ x1 ).
Hierbei sind x1 , . . . , xn Variablen, die die die Werte wahr“ oder falsch“ annehmen können, x̄i
”
”
ist die Negation von xi . Ein Term der Form xi oder x̄i nennt man Literal. Eine Klammer“, wie
”
sie in der obigen Formel auftritt, nennt man Klausel. Beim SAT-Problem erhält man als Eingabe
die Formel, und die Frage ist, ob es eine Belegung der Variablen mit wahr oder falsch gibt, sodass
die ganze Formel wahr wird. Mit k-SAT bezeichnet man den Spezialfall von SAT, bei dem jede
Klausel genau k verschiedene Variablen enthält.
a) Offensichtlich gilt (mit Hilfe der Identität als Transformation), dass 3-SAT ≤p SAT.
b) Umgekehrt haben wir in I.6.17 bewiesen, dass auch SAT ≤p 3-SAT.
c) Man kann zeigen, dass 2-SAT ∈ P gilt.
d) Der Grundstein der NP-Vollständigkeitstheorie wird durch das Resultat, dass SAT NPvollständig ist, gelegt (siehe I.6.16). Damit haben wir also einen Ausgangspunkt, und somit folgt
beispielsweise aus b) und Proposition 6.6 sofort, dass 3-SAT NP-schwer ist.
Satz 6.8 3-SAT ≤p CLIQUE.
¾
Beweis: ...
Nach diesen Vorbereitungen können wir uns nun langsam unserem Eingangs gestellten Problem
nähern.
Definition 6.9 Das Problem Hamiltonkreis (HK) erhält als Eingabe einen Graphen G und
soll die Frage beantworten, ob G einen Hamiltonkreis enthält.
Das Problem gerichteter Hamiltonkreis (GK) erhält als Eingabe einen gerichteten Graphen
und soll die Frage beantworten, ob G
einen gerichteten Hamiltonkreis enthält.
G
Satz 6.10 Knotenüberdeckung ≤p ger. Hamilton Kreis
32
¾
Beweis: ...
Mit dieser Transformation sind wir nun am Ziel. Wir haben gezeigt, dass
SAT ≤p 3-SAT ≤p Clique ≤p Stabile Menge ≤p Knotenüberdeckung
≤p ger. Ham.kreis ≤p ger. Ham.pfad ≤p Ham.pfad ≤p Ham.kreis
(die letzten drei Transformationen wurden in den Übungen behandelt). Damit haben wir bewiesen,
dass Hamiltonkreis ein NP-schweres Problem ist, und es daher vermutlich keine schnell zu überprüfende Charakterisierung für Graphen gibt, die einen Hamilton Kreis besitzen. Im Folgenden
wollen wir aber kurz einige hinreichende Bedingungen kennenlernen.
Vorlesung 24.01.08
Bemerkung 6.11 Wenn G = (V, E) einen Hamilton Kreis hat, dann muss δ(G) := min{deg(v) :
v ∈ V } ≥ 2.
Unser Ziel ist es zu zeigen: wenn δ(G) ≥ |V |/2, dann hat G einen Hamilton Kreis.
Lemma 6.12 Seien x, y zwei Knoten in G = (V, E) mit d(x) + d(y) ≥ n und {x, y} ∈ E. Dann
gilt: G hat genau dann einen HK, wenn G := (V, E ∪ {x, y}) einen HK hat.
¾
Beweis: ...
Korollar 6.13 Sei G = (V, E) ein Graph mit n = |V | ≥ 3.
a) Wenn für alle Paare x, y mit {x, y} ∈ E gilt, dass d(x) + d(y) ≥ n, dann hat G einen HK.
b) Wenn δ(G) ≥ n/2, dann hat G einen HK.
¾
Beweis: ...
Definition 6.14
a) Das Travelling
Salesman Problem (TSP) erhält als Eingabe einen vollständigen Graphen
G = (V, V2 ) und eine Kostenfunktion c : E → R≥0 sowie eine Zahl k ∈ R≥0 . Die Frage lautet: Hat
G einen HK der Länge höchstens k? (Die “Länge” eines HK ist dabei die Summe der benutzten
Kantengewichte.) Jeder HK in G wird als TSP-Tour bezeichnet. Eine optimale TSP–Tour ist eine
kürzest mögliche TSP-Tour. Mögliche Varianten / Spezialfälle lauten:
b) Metrisches TSP: Die Kostenfuntion c erfüllt die Dreiecksungleichung, also dass
∀x, y, z ∈ V :
d(x, y) + d(y, z) ≥ d(x, z).
c) Euklidisches TSP: Hier liegen die Knoten von V im R2 und c(x, y) := x − y2 .
d) Rektilineares TSP: Hier liegen die Knoten von V im R2 und c(x, y) := x − y1 .
Satz 6.15 Alle oben genannten Varianten des TSP sind NP-vollständig.
Wir werden später mit einem stärkeren Satz die NP-Vollständigkeit der allgemeinen Variante
a) zeigen.
Definition 6.16 Wir betrachten nun die Optimierungs– bzw. Suchvariante des TSP: Eingabe ist
ein vollständiger Graph G = (V, E) mit einer Kostenfunktion c : E → R≥0 , gesucht ist eine
optimale TSP–Tour, die wir mit opt(G, c) bezeichnen wollen. Mit Länge einer Tour – oder kurz, L
– bezeichnen wir die Summe der Kantengewichte, die in der Tour verwendet werden.
Ein Approximationsalgorithmus für das TSP mit Approximationsgüte r ∈ R≥0 ist ein Algorithmus A, der zu jeder TSP-Eingabe (G, c) eine TSP-Tour A(G, c) berechnet, so dass
Länge(A(G, c))
≤ r.
Länge(opt(G, c))
33
Vorlesung 25.01.08
Satz 6.17 Sei r beliebig, aber fest. Falls P = NP, dann existiert kein polynomialer Approximationsalgorithmus für TSP mit Güte r.
¾
Beweis: ...
Wir werden nun aber sehen, dass für das metrische TSP sehr wohl Approximationsalgorithmen
mit einer festen Gütegarantie existeren. Die Idee dabei ist, dass wir eine effizient berechenbare
untere Schranke für die Länge von opt(G, c) brauchen.
Proposition 6.18 Eine optimale TSP-Tour in (G, c) ist mindestens so lang wie ein minimal
spannender Baum in (G, c).
¾
Beweis: ...
Algorithmus 6.19
Input: vollständiger Graph G = (V, E), metrische Kostenfunktion c : E → R≥0
Output: TSP-Tour T
MST–Heuristik(G = (V, E), c)
(1)
Berechne MST B in (G, c)
(2)
Verdoppele alle Kanten in B und erhalte Multigraph B (3)
Berechne Euler Tour T in B (4)
while es Knoten v gibt, der durch T mehrfach durchlaufen wird
(5)
ersetze konsekutive Kanten {a, v}, {v, b} durch {a, b}
Satz 6.20 Algorithmus 6.19 ist ein polynomialer Approximationsalgorithmus für das metrische
TSP mit Güte 2.
¾
Beweis: ...
Wie können wir die Güte des Algorithmus noch verbessern? In Zeile (2) haben wir relativ
brutal alle Kanten verdoppelt, um einen eulerschen Graphen zu erzwingen. Etwas sparsamer ist
die Variante, die an dieser Stelle lediglich Matching–Kanten zwischen Knoten ungeraden Grades
in B einfügt.
Algorithmus 6.21
Input: vollständiger Graph G = (V, E), metrische Kostenfunktion c : E → R≥0
Output: TSP-Tour T
Christofides–Heuristik(G = (V, E), c)
(1)
Berechne MST B in (G, c)
(2)
Sei U die Menge aller Knoten ungeraden Grades in B. Füge ein in (G[U ], c)
leichtestes perfektes Matching zu B hinzu und erhalte B .
(3)
Berechne Euler Tour T in B (4)
while es Knoten v gibt, der durch T mehrfach durchlaufen wird
(5)
ersetze konsekutive Kanten {a, v}, {v, b} durch {a, b}
Satz 6.22 Algorithmus 6.21 ist ein polynomialer Approximationsalgorithmus für das metrische
TSP mit Güte 1.5.
Beweis: Sei M das in Schritt (2) berechnete Matching. Wir behaupten:
L(M ) ≤
1
1
L(opt(G[U ], c)) ≤ L(opt(G, c)).
2
2
(7)
Die zweite Ungleichung ist offensichtlich. Die erste Ungleichung ergibt sich wie folgt: betrachte
opt(G[U ], c). Dieser HK auf G[U ] induziert zwei perfekte Matchings in G[U ] (die erste, dritte,
34
fünfte Kante usw., und die zweite, vierte, sechste Kante usw.). Eins davon hat eine Länge von
höchstens 12 L(opt(G[U ], c)), also muss das leichteste perfekte Matching höchstens so lang sein.
Damit können wir nun ähnlich wie (aber besser als) im Falle der MST-Heuristik argumentieren.
Sei wieder A die vom Algorithmus berechnete TSP–Tour.
L(B )
L(B) + L(M ) (7) L(B) + 12 L(opt) 6.18 L(opt) + 12 L(opt)
3
L(A)
≤
=
= .
≤
≤
L(opt)
L(opt)
L(opt)
L(opt)
L(opt)
2
¾
Vorlesung 31.01.08
Die bisherigen Approximationsalgorithmen für das TSP haben den MST als untere Schranke für
die Länge einer optimalen TSP-Tour benutzt. Unser nächstes Ziel ist es, bessere untere Schranken
zu konstruieren.
Definition 6.23 Wir setzen
n
[n]
(
)
2
)}
T (n) := {x ∈ {0, 1}
: {e : xe = 1} bilden einen HK in Kn = ([n],
2
n
und bezeichnen conv(T (n)) als das TSP-Polytop. Zu gegebenem Kostenvektor c ∈ R( 2 ) lautet das
TSP-Problem also
min{cT x : x ∈ T (n)} = min{cT x : x ∈ conv(T (n))}.
Was uns aber fehlt, ist eine gute Beschreibung von conv(T (n)).
n
Proposition 6.24 Sei x ∈ Z( 2 ) . Dann ist x ∈ T (n) genau dann, wenn
0 ≤ xe ≤ 1
∀e ∈
x{v,w} = 2
[n]
2
(8)
∀v ∈ [n]
(9)
∀∅ = X ⊂ [n]
(10)
w:w=v
xe ≤ |X| − 1
e∈(X
2)
¾
Beweis: . . .
Bemerkung 6.25
n
P := {x ∈ R( 2 ) : x erfüllt (8),(9),(10) }
heißt Subtour-Polytop. Es gilt conv(T (n)) ⊂ P . Welche weiteren Ungleichungen brauchen wir, um
das TSP-Polytop zu beschreiben, d.h. Gleichheit zu erzwingen? Zunächst geben wir ein ein paar
äquivalente Umformungen für Bedingung (10) an.
n
Proposition 6.26 Angenommen, x ∈ R( 2 ) erfülle (8) und (9). Dann sind äquivalent:
xe ≤ |X| − 1
∀∅ = X ⊂ [n]
X
e∈( 2 )
xe ≤ |X| − 1
∀∅ = X ⊆ [2, n]
X
e∈( 2 )
x{v,w} ≥ 2
∀∅ = X ⊂ [n]
v∈S,w∈[n]\S
35
(vgl. 10)
(11)
(12)
¾
Beweis: . . .
Wir halten fest, dass
n
min{cT x : x ∈ T (n)} ≥ min{cT x : x ∈ R( 2 ) , x erfüllt (8), (9) und (10), (11) oder (12) }.
Hier noch ein weiterer Ansatz für eine weitere (?) untere Schranke.
Definition 6.27 Ein 1-Baum ist ein Subgraph H ⊆ ([n], [n]
2 ), der sich aus einem spannenden
Baum auf den Knoten {2, . . . , n} und zwei zu Knoten 1 inzidenten Kanten zusammensetzt.
Proposition 6.28 Die Kosten eines minimalen 1-Baums sind eine untere Schranke für die Kosten
einer optimalen TSP-Tour.
¾
Beweis: Klar – jede TSP-Tour ist ein 1-Baum.
Dies ergibt im allgemeinen keine gute untere Schranke. Betrachte beispielsweise den folgenden
Graphen mit den Knoten 1, 2, 3, 4, 5 und den Kosten 100 für die Kante {1, 5}, Kosten 1 für die
Kante {1, 4}, Kosten 10 für die Kanten {2, 3}, {2, 4} und {3, 4}, sowie Kosten 0 für alle anderen
Kanten.
Offensichtlich gibt es einen 1-Baum mit Kosten 0. Und eine TSP-Tour mit Kosten 10 findet
sich auch schnell. Wir würden gerne zeigen, dass das eine optimale TSP-Tour ist – scheinbar hilft
uns die untere Schranke durch den 1-Baum dabei nicht.
Doch, und zwar mit folgendem Trick. Addiere Kosten 10 auf alle in Knoten 5 inzidenten Kanten.
1) Jetzt wachsen die Kosten unserer TSP-Tour um 20 auf Kosten 30.
2) Es lässt sich schnell überprüfen, dass die Kosten eines optimalen 1-Baums ebenfalls auf 30
wachsen. Das heißt: jede TSP-Tour in dem neuen Graph muss mindestens Kosten 30 haben.
3) Dann muss aber in dem alten Graph jede TSP-Tour Kosten mindestens 10 gehabt haben.
Warum? Beweis durch Widerspruch: Angenommen, es hätte eine mit Kosten 10 − gegeben,
dann hätte die gleiche Tour im neuen Graphen genau 20 mehr gekostet (denn wir hätten nur den
Aufschlag von genau 10 + 10 für die zwei in Knoten 5 inzidenten Kanten zahlen müssen), und
damit hätten wir in dem neuen Graphen eine Tour mit Kosten 30 − gehabt, im Widerspruch zu
2).
Wir haben also durch den 1-Baum indirekt doch eine untere Schranke von 10 für TSP-Touren
im alten Graphen gezeigt.
Wir übersetzen das in einen allgemeinen Satz. Zu der Operation erhöhe die Kosten aller in 5
”
inzidenten Kanten um 10“ sagen wir, dass Knoten 5 die Knotennummer −10 erhält und schreiben
”
y5 := −10“.
Satz 6.29 Sei c : [n]
→ R≥0 , (y1 , . . . , yn ] ∈ Rn beliebig, Setze für alle e = {u, v} ∈ [n]
die
2
2
modifizierten Kosten auf c̄e := ce − yu − yv .
Seien die Kosten eines minimalen 1-Baums bei Kosten c̄ durch K gegeben. Dann ist K +2 v∈V yv
eine untere Schranke für eine optimale TSP-Tour bei Kosten c.
¾
Beweis: ...
Vorlesung 01.02.08
Unser Ziel ist es nun, zu zeigen, dass man (bei optimaler Wahl der Knotennummer yi ) in der
obigen Proposition tatsächlich die gleiche Schranke wie durch das Subtourpolytop erzielt. Um das
einzusehen, müssen wir zunächst den Wert eines optimalen 1-Baums durch ein LP beschreiben.
Satz 6.30 (Spannende–Bäume–Polytop) Sei G = (V, E) ein (diesmal nicht notwendigerweise
vollständiger) Graph mit |V | = n und |E| = m. Dann ist die konvexe Hülle der charakteristischen
36
Vektoren von spannenden Bäumen in G genau die Menge der Vektoren x ∈ Rm , die die folgenden
Eigenschaften erfüllen:
e∈E(G[X])
0 ≤ xe ≤ 1
∀e ∈ E
(vgl. 8)
xe ≤ |X| − 1
∀∅ = X ⊂ V
(13)
.
(14)
xe = n − 1
e∈E
Insbesondere gilt, dass für einen Kostenvektor c ∈ R≥0 m der Wert eines minimal spannenden
Baums von G gegeben ist durch min{x : Rm : x erfüllt (8), (13), (14)}.
Beweis: Offensichtlich erfüllen Konvexkombinationen von charakteristischen Vektoren spannender
Bäume obige Bedingungen. Der Beweis der umgekehrten Richtung muss in der VL leider entfallen.
¾
n
Korollar 6.31 (minimaler 1-Baum) Sei c ∈ R≥0 ( 2 ) und betrachte vollständigen Graphen ([n], [n]
2 ).
Dann sind die Kosten eines minimalen 1-Baums bzgl. Kosten c gegeben durch
n
min cT x : x ∈ R( 2 ) mit
[n]
∀e ∈
(vgl. 8)
0 ≤ xe ≤ 1
2
xe ≤ |X| − 1
∀∅ = X ⊆ [2, n]
(vgl. 11)
X
e∈( 2 )
xe = n − 2
(15)
[2,n]
e∈( 2 )
x{1,w} = 2
(16)
w∈[2,n]
Beweis: Klar nach Definition eines 1-Baums und 6.30.
¾
Satz 6.32 Maximiert man den Wert des minimalen 1-Baums über alle Knotennummern y, dann
erhält man den gleichen Wert wie bei Minimierung über dem Subtour-Polytop in 6.25.
¾
Beweis: ...
Lagrange-Relaxation
Hinter der obigen Methode steht das allgemeine Prinzip des Lagrange–Relaxation. Betrachte das
ILP
(P ) :
z ∗ := minn {cT x : Ax = b, Bx = d, x ≥ 0, x ∈ Zn }
x∈R
Vergleiche dies mit
(Dy ) :
L(y) := minn {cT x + (d − Bx)T y : Ax = b, x ≥ 0, x ∈ Zn }.
x∈R
Dann gilt für jedes y, dass z ∗ ≥ L(y), denn wenn x die Bedingung aus (P ) erfüllt, dann auch die
Bedingung aus (Dy ) für jedes y und cT x = cT x + (d − Bx)T y = L(y).
Bilde dann die beste untere Schranke
u∗ := max L(y).
y
37
Branch-and-Bound Verfahren
Der Hauptgrund für die Entwicklung von guten unteren Schranken ist, dass man sie für sogenannte
Branch-and-Bound Verfahren braucht. Angenommen wir haben eine (nicht-notwendigerweise optimale) TSP-Tour T ∗ berechnet und haben eine untere Schranke L für die Länge einer optimalen
Tour. Jetzt wollen wir den Abstand zwischen c(T ∗ ) und L verringern.
Definition 6.33 Für A, B ⊆
[n]
2
setzen wir
SA,B := {TSP–Touren T : A ⊆ T, B ∩ T = ∅},
also die Touren, die alle Kanten aus A und keine aus B enthalten. Die SA,B stellen die Knoten in
einem ((eventuell sehr großen) Hilfsbaum dar.
Algorithmus 6.34
Input: TSP–Eingabe (G, c), Tour T ∗ , untere Schranke L
Output: optimale Tour T ∗
Branch–and–Bound(G, c, T ∗, L)
(1)
Sei R := c(T ∗ ) und beginne mit dem einelementigen Hilfsbaum mit aktivem
Knoten S∅,∅ .
(2)
Wähle aktiven Knoten SA,B im Hilfsbaum und deaktiviere ihn.
(3)
Wähle Kante e ∈ A ∪ B. Setze A := A ∪ {e} und B := B ∪ {e}.
(4)
foreach S ∈ {SA ,B , SA,B }
(5)
berechne untere Schranke L für alle Touren in S (6)
if S = {T } and c(T ) < R then T ∗ := T , R := c(T ∗ )
(7)
if |S | > 1 and L < R then nehme S als aktives Kind von SA,B in
den Hilfsbaum auf
(8)
gehe zu 2)
Bemerkung 6.35
n
a) Algorithmus 6.34 hat im schlimmsten Fall Laufzeit O(2( 2 ) ) und findet immer eine optimale
Tour.
b) Die untere Schranke in Schritt 6) kann man beispielsweise durch Berechnung der LP-Relaxierung
(Subtour-Polytop) unter Hinzufügen der Gleichung xe = 1 bzw xe = 0 gefunden werden. c) Wichtig
ist weiterhin eine gute“ Wahl der Starttour T ∗ , des aktiven Knotens in Schritt 2) und der Kante
”
in Schritt 3). Hierfür gibt es verschiedene Rezepte.
d) Das Branch–and–Bound Verfahren lässt sich auch auf viele andere kombinatorische Optimierungsprobleme anwenden. Im Branching Schritt wählt man eine nicht ganzzahlige Variable x∗i und
verzweigt auf die Fälle xi ≤ x∗i und xi ≥ x∗i . Für den Bounding Schritt berechnet man dann
eine neue untere Schranke mit Hilfe der LP–Relaxierung inklusive neuer Ungleichung.
Vorlesung 07.02.08
Ausblick: Schnittebenenverfahren
Angenommen, die unteren Schranken, die man durch Berechnungen von Relaxationen erhalten hat,
sind zu niedrig. Dann braucht man weitere Ungleichungen, die sich aus der Ganzzahligkeit ergeben.
Wir brauchen dann noch weitere Ungleichungen, die das Polytop kleiner machen, ohne ganzzahlige
Punkte (also mögliche TSP-Touren) abzuschneiden.Wir wollen hier aber einen allgemeinen Ansatz
kennenlernen, der nicht nur für das TSP interessant ist. Dazu zunächst wieder ein Beispiel.
Beispiel 6.36 Sei P := {x ∈ Rn : Ax ≤ b} und sei P̃ := {x ∈ Zn : Ax ≤ b} mit
⎛
⎞
⎛
⎞
2
3
27
⎜ 2 −2 ⎟
⎜
7 ⎟
⎜
⎟
⎜
⎟
⎜
⎟
⎜
A := ⎜ −6 −2 ⎟ , b := ⎜ −9 ⎟
⎟.
⎝ −2 −6 ⎠
⎝ −11 ⎠
−6 +8
21
38
Wie man leicht (zB graphisch) verifiziert, gilt für alle x ∈ P , dass x2 ≤ 6. Und der Punkt
(4.5, 6) ∈ P zeigt, dass diese Schranke auch angenommen wird. Gleichzeitig kann man aber auch
leicht feststellen, dass für alle x ∈ P̃ gilt, dass x2 ≤ 5 gilt. Wie lässt sich das jedoch beweisen?
Betrachten wir dazu zunächst den folgenden Trick. Dividiere die letzte Ungleichung durch 2 und
erhalte
−3x1 + 4x2 ≤ 10.5
Daraus ergibt sich aber für alle x ∈ P̃ , dass
−3x1 + 4x2 ≤ 10.
Multipliziere diese Ungleichung nun mit 2, und addiere dazu das 3-fache der ersten Ungleichung.
Wir erhalten 17x2 ≤ 101, also x2 ≤ 5.94, nach Abrunden also x2 ≤ 5, wie gewünscht.
Ax ≤ b}, und seien
Proposition 6.37 Betrachte P := {x ∈ Rn : Ax ≤ b} und P̃ := {x ∈ Zn : m
n
aTi die
Zeilenvektoren
von
A.
Seien
y
,
.
.
.
,
y
∈
R
gegeben,
und
setze
c
:=
1
m
≥0
i=1 yi ai ∈ R und
m
d := i=1 yi bi ∈ R. Dann gilt für alle x ∈ P :
cT x =
yi aTi x ≤
i
yi bi = d,
i
und, falls c ∈ Zn , dann insbesondere für alle x ∈ P̃ , dass cT x ≤ d.
Definition 6.38 Seien die Bezeichnungen wie oben. Wenn c ∈ Zn , dann heißt die Ungleichung
cT x ≤ d
Gomory–Chvátal Schnittebene (cutting–plane). Man sagt, dass die Ungleichung cT x ≤ d durch
y1 , . . . , ym aus Ax ≤ b abgeleitet wurde.
Sei nun wT x ≤ t eine gültige Ungleichung für die Punkte in P̃ . Ein Schnittebenenbeweis für
w x ≤ t aus Ax ≤ b ist eine Folge von M Ungleichungen zusammen mit nichtnegativen Zahlen
T
y1,1 , . . . , y1,m , y2,1 , . . . , y2,m+1 , . . . , yM,1 , . . . , yM,m+M−1 ,
so dass für alle k = 1, . . . , M die Ungleichung aTm+k x ≤ bm+k durch yk,1 , . . . , yk,m+k−1 aus den
vorangegangenen Ungleichungen abgeleitet wurde und am+M = w und bm+M = t.
Satz 6.39 Sei A ∈ Qm×n sowie P := {x ∈ Rn : Ax ≤ b} und P̃ := {x ∈ Zn : Ax ≤ b}. Sei ferner
wT x ≤ t für alle x ∈ P̃ . Dann existiert ein t ≤ t und ein Schnittebenenbeweis für wT x ≤ t aus
Ax ≤ b.
¾
Beweis: (nur skizziert)
39
Herunterladen