Musterlösung

Werbung
Institut für Mathematische Optimierung
TU Braunschweig
Konvexe und Kombinatorische Optimierung
Prof. Marc Pfetsch
Andreas Tillmann
SS 2009
01.07.2009
Übungsblatt 13
Aufgabe 1:
(6 Punkte)
Sei D = (V, A) ein gerichteter Graph mit |V | = n Knoten. Gesucht ist eine Nummerierung
f : V → {1, . . . , n} der Knoten, mit der die folgende Bedingung erfüllt wird:
(u, v) ∈ A
⇒
f (u) < f (v).
(1)
Solch eine Nummerierung heißt topologische Anordnung / Sortierung. Eine Bedingung für die
Existenz einer topologischen Sortierung ist, dass der Graph keine (gerichteten) Kreise enthält
(Begründung?).
a) Geben Sie einen Algorithmus mit linearer Laufzeit an, der für einen gerichteten Graphen
entweder eine topologische Sortierung bestimmt, oder die Existenz eines gerichteten Kreises feststellt. Beweisen Sie die Korrektheit und die Laufzeit Ihres Algorithmus.
b) Zeigen Sie, wie man mit Hilfe einer topologischen Sortierung auf kreisfreien gerichteten
Graphen die kürzesten Wege von einem beliebig gewählten Knoten zu allen anderen in
linearer Laufzeit bestimmen kann.
Lösung:
a) Notwendige Bedingung für die Existenz einer topologischen Sortierung ist die Kreisfreiheit des gerichteten Graphen: Falls ein Kreis mit Bögen (v1 , v2 ), . . . , (vk , v1 ) und gleichzeitig eine topologische Anordnung f existierten, so ergäbe f (v1 ) < f (v2 ) < · · · < f (vk ) <
f (v1 ) einen Widerspruch. Zudem existiert ein einem kreisfreien gerichteten Graphen mindestens ein Knoten mit Innengrad Null: Angenommen, kein Knoten hätte Innengrad Null,
d. h. alle Knoten dienen für mindestens einen Bogen als Endknoten. Dies impliziert sofort, dass es für mindestens einen Knoten immer einen gerichteten Weg von sich selbst
(eventuell über mehrere andere Knoten) wieder zu sich selbst gibt, der Graph also einen
Kreis hat. Diese Bedingung nutzen wir nun für einen Linearzeit-Algorithmus zur Bestimmung einer topologischen Sortierung:
Algorithmus-Idee:
Gegeben sei der gerichtete Graph D = (V, A) mit (o. B. d. A.) V = {1, . . . , n}.
a) Initialisiere i := 1, f (v) := 0 ∀v ∈ V , Ṽ := V , Ã := A, D̃ := D.
b) Solange Ṽ 6= ∅, überprüfe, ob |δ − (u)| = 0 für einen Knoten u ∈ Ṽ
nein: Der Untergraph D̃ – und somit auch D – enthält einen Kreis
⇒ Es ex. keine topologische Sortierung, STOP.
ja: Wähle ein u ∈ Ṽ mit Innengrad Null. Setze f (u) := i, G̃ := G̃(V \ {u}) (d. h.
entferne Knoten u und alle Bögen, die von u ausgehen), i := i + 1.
Bricht dieser Algorithmus nicht vorzeitig ab, so ist durch f offensichtlich eine topologische Sortierung gegeben, da die Gültigkeit von (1) immer aufrecht erhalten bleibt. Die
Korrektheit ist also trivial.
Zur Laufzeit:
Die Initialisierung sowie die Berechnung der Knotengrade im Ausgangsgraphen D (durch
einmaliges Durchlaufen aller Bögen) kann offensichtlich in linearer Zeit geschehen (O(m)).
In jedem Schritt wird (sofern kein Abbruch erfolgt) ein Knoten entfernt, d. h. die Schleife
in Schritt 2. des Algorithmus wird O(n) mal durchlaufen. Die Modifizierung des Graphen
ist trivial; ein Update der Knotengrade kann gleichzeitig mit der Entfernung der von u
ausgehenden Bögen erfolgen – dies erfordert gerade |δ + (u)| Operationen; für die Folge u1 , . . . , un der im Algorithmus entfernten Knoten gilt offensichtlich |δ + (u1 )| + · · · +
|δ + (un )| = m. Somit ergibt sich eine Laufzeit von O(m + n).
Anderer Algorithmus:
Gegeben sei der gerichtete Graph D = (V, A) mit (o. B. d. A.) V = {1, . . . , n}.
a) Setze i := |V | = n.
b) Führe eine Tiefensuche auf D durch, die wie folgt leicht modifiziert wurde:
• STOP, sobald ein Kreis festgestellt wird (d. h. sobald ein Knoten mit bereits
festgesetzter u-Markierung nochmals durch den Tiefensuchlauf erreicht wird).
• Sobald für einen Knoten v ∈ V die Markierung u(v) > 0 festgesetzt wird, setze
f (v) := i, i := i − 1.
Zur Laufzeit und Korrektheit:
Die Laufzeit entspricht offensichtlich derjenigen der Tiefensuche, also O(m + n), da die
Modifikationen entweder einen möglichen vorzeitigen Abbruch bewirken oder ansonsten
in konstanter Zeit durchführbar sind. Zu zeigen ist noch, dass durch das mitberechnete
f tatsächlich eine topologische Sortierung gegeben ist: Ist der Graph nicht kreisfrei, wird
dies festgestellt und vorzeitig abgebrochen, da ohnehin keine topologische Sortierung
existieren kann. Habe also der Algorithmus regulär terminiert. Die Zuordnung der Werte
f (v) erfolgt absteigend nach „Position” der jeweiligen Knoten v im Graphen bzw. im
entsprechenden Zweig, den das DFS-Verfahren ergründet. Die Gültigkeit von (1) folgt
somit unmittelbar mit Aufgabe 4 von Blatt 9, wo die Beziehungen der Markierungen `
und u des DFS-Algorithmus charakterisiert wurden.
b) Sei eine topologische Sortierung f für den Graphen D = (V, A) gegeben. Für einen
Knoten s mit f (s) = i liefert einfaches Durchlaufen aller Knoten v ∈ V mit f (v) > i (bzw.
Durchlaufen aller von s ausgehenden gerichteten Wege) nun die kürzesten Wege von s zu
diesen Knoten; ist f (v) < i, so existiert kein gerichteter s-v-Weg im azyklischen Graphen
D. Dies wird leicht ersichtlich, wenn man den Graphen der topologischen Sortierung
entsprechend etwas anders aufzeichnet (fj bezeichne den Knoten v ∈ V mit f (v) = j):
f1
f2
f3
...
fi
...
fn−1
fn
(s)
Anhand der Skizze sieht man also unmittelbar, dass man für kein v ∈ V mit f (v) < i =
f (s) einen Weg von s nach v finden wird; die anderen Bögen (und somit Wege) verlaufen
nun alle „von links nach rechts”. Es müssen also schlimmstensfalls n Knoten (und m
Kanten auf den betrachteten Wegen) betrachtet werden (nämlich genau dann, wenn
f (s) = 1, sonst immer weniger), also resultiert eine Laufzeit von O(n + m). Zusammen
mit der Laufzeit O(n + m) zur Bestimmung einer topologischen Anordnung erhält man
also eine Gesamtlaufzeit von O(n + m) + O(n + m) = O(n + m) zur Ermittlung der
kürzesten Wege von einem Knoten zu allen anderen in einem azyklischen gerichteten
Graphen.
Aufgabe 2:
(5 Punkte)
˙
Gegeben sei der folgende ungerichtete bipartite Graph G = (V, E) = (S ∪T, E).
s2
6
s1
8
s3
1
1
6
5
t1
t3
3
t2
Bestimmen Sie in G ein gewichtsminimales perfektes Matching (falls eines existiert) mit der
Ungarischen Methode.
Lösung:
Wir führen den Algorithmus hier ohne die Mitberechnung zulässiger Knotenpotenziale durch.
Dies wäre aber natürlich auch möglich.
1. Iteration: M = ∅, SM = {s1 , s2 , s3 }, TM = {t1 , t2 , t3 }. Hilfsgraph DM :
s2
s1
6
8
1
s3
1
6
5
t1
t3
3
t2
Gesucht ist ein kürzester Weg von SM nach TM . Da hier alle Kanten- bzw. Bogengewichte nichtnegativ sind, liefern die Bögen mit kleinstem Gewicht jeweils einen solchen
KWSM →TM . Wähle etwa (s1 , t1 ).
2. Iteration: M = { {s1 , t1 } }, SM = {s2 , s3 }, TM = {t2 , t3 }. Im folgenden Hilfsgraph DM
fügen wir einen Superknoten s und Bögen (s, v) für alle v ∈ SM mit Gewicht Null ein
(um nicht explizit die kürzesten Wege zwischen allen Knoten in SM und TM berechnen
zu müssen, sondern nur den kürzesten Weg von s in die Menge TM finden brauchen).
s2
6
s1
s
0
8
0
s3
1
−1
6
5
t1
t3
3
t2
Da negative Bogengewichte existieren, verwenden wir Bellman-Ford:
d1 = d1 (s), d1 (s1 ), d1 (s2 ), d1 (s3 ), d1 (t1 ), d1 (t2 ), d1 (t3 )
= [0, 0, 0, ∞, ∞, ∞, ∞],
π 1 = [0, s, s, −1, −1, −1, −1]
d2 = [0, 0, 0, ∞, 1, 8, 6],
π 2 = [0, s, s, −1, s3 , s2 , s3 ]
d3 = [0, 0, 0, 0, 1, 8, 6],
π 3 = [0, s, s, t1 , s3 , s2 , s3 ]
d4 = d5 = d6 = [0, 0, 0, 0, 1, 3, 5],
π 4 = π 5 = π 6 = [0, s, s, t1 , s1 , s1 ]
Somit haben wir den KWSM →TM {(s3 , t1 ), (t1 , s1 ), (s1 , t2 )} gefunden. Der zugrunde liegende ungerichtete Weg ist ein M -augmentierender Weg in G.
3. Iteration: M = ({ {s1 , t1 } } ∪ { {s3 , t1 }, {s1 , t1 }, {s1 , t2 } })\{s1 , t1 } = { {s1 , t2 }, {s3 , t1 } },
SM = {s2 }, TM = {t3 }. Hilfsgraph DM :
s2
s1
6
8
s3
−1
1
6
5
t1
t3
−3
t2
Hier suchen wir also einen KWs2 →t3 und finden (analog zu eben mit dem Algorithmus
nach Bellman-Ford): {(s2 , t2 ), (t2 , s1 ), (s1 , t3 )}.
4. Iteration: M = ({ {s1 , t2 }, {s3 , t1 } } ∪ { {s2 , t2 }, {s1 , t2 }, {s1 , t3 } }) \ {s1 , t2 } =
{ {s1 , t3 }, {s2 , t2 }, {s3 , t1 } }, SM = ∅, TM = ∅ ⇒ STOP.
Somit haben wir für G das gewichtsminimale perfekte Matching M ∗ = { {s1 , t3 }, {s2 , t2 }, {s3 , t1 } }
mit Gewicht c(M ∗ ) = 14 gefunden.
s2
s1
8
1
5
t1
t2
s3
t3
Aufgabe 3:
Beweisen Sie den folgenden Heiratssatz1 von Hall (1935):
(5 Punkte)
˙ E) ein ungerichteter bipartiter Graph mit Kantengewichten c({i, j}) = 1 für
Sei G = (S ∪T,
alle {i, j} ∈ E. Sei des Weiteren N (W ) := {j ∈ T |{i, j} ∈ E, i ∈ W } für W ⊆ S. Dann
existiert ein Matching M mit c(M ) = |S| genau dann, wenn |N (W )| ≥ |W | für alle W ⊆ S.
Lösung:
˙ E) gegeben. Da Einheitskantengewichte vorlieSei der ungerichtete bipartite Graph G = (S ∪T,
gen, ist zu zeigen, dass es genau dann ein Matching M mit |M | = |S| gibt, wenn |N (W )| ≥ |W |
für alle Teilmengen W von S gilt.
„⇒” : Das folgende Beispiel zeigt, dass im Falle |N (W )| < |W | für ein W ⊆ S kein Matching M mit c(M ) = |M | = |S| existieren kann (durchgezogen gezeichnete Kanten sind
Matchingkanten):
S
a
b
c
d
e
f
g
h
i
j
T
Im Beispielgraph besitzt die Knotenteilmenge {c, d, e} von S nur zwei Nachbarn g und i
in T , ein Matching mit |S| = 5 Kanten ist unmöglich. (Dies wäre also ein Gegenbeispiel
zur Annahme, dass ein solches Matching existieren kann, wenn |N (W )| ≥ |W | nicht für
alle W ⊆ S gilt.) Also ist die Bedingung |N (W )| ≥ |W | ∀W ⊆ S notwendig für die
Existenz eines maximalen Matchings.
„⇐” : Sei |N (W )| ≥ |W | für jede beliebige Teilmenge W ⊆ S. Zu jedem gegebenen Matching
M ⊆ E mit c(M ) = |M | < |S| zeigen wir nun, dass |M | nicht maximal ist. Sei dazu
s0 ∈ S ein Knoten, der durch M nicht gematcht wird. Da |N ({s0 })| ≥ |{s0 }| = 1,
existiert mindestens ein Nachbar t1 in T .
• Falls t1 durch M nicht gematcht wird, nehme die Kante {s0 , t1 } in M auf.
• Falls t1 gematcht ist, gilt {s1 , t1 } ∈ M für ein s1 6= s0 . Da |N ({s0 , s1 })| ≥ |{s0 , s1 }| =
2 folgt, dass es einen Knoten t2 6= t1 gibt, welcher zu s0 oder s1 benachbart ist.
• Falls t2 nicht durch M gematcht, erweitere M wie eben beschrieben.
• Ansonsten existiert eine Kante {s2 , t2 } ∈ M und s2 ∈
/ {s0 , s1 }.
• ...
Wir fahren auf diese Weise fort und erreichen schließlich einen nicht von M gematchten
Knoten tr ∈ T , r ≤ |M | < |S|. Der Knoten tr hat eine Kante zu sr−1 . Nun kann das
Matching wie folgt umarrangiert und um eine Kante vergrößert werden (d. h. der Weg
von s0 zu tr ist M -augmentierend):
1
Der Name „Heiratssatz” rührt daher, dass es nach diesem Satz möglich ist, jede Frau zu verheiraten, falls es
für jede Gruppe von Frauen mindestens ebensoviele Männer gibt, die sich für wenigstens eine der Frauen in
der Gruppe interessieren (Männer analog).
s0
t1
s0
t1
s1
t2
s1
t2
s2
t3
s2
t3
..
.
..
.
..
.
..
.
sr−2
tr−1
sr−1
tr
Also war M nicht maximal.
augm.
..
.
..
.
sr−2
tr−1
sr−1
tr
Herunterladen