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