Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 14. Mai 2014 Peter Widmayer Tobias Pröger Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14 Lösung 11.1 Max-Flow von Hand. Der maximale Flusswert beträgt 31. In der folgenden Abbildung ist ein maximaler Fluss dargestellt. Neben jeder Kante e sind die Kapazität c e und der Flusswert x e in der Reihenfolge x e, c e angegeben. Der minimale Schnitt ist gestrichelt eingezeichnet, und die zugehörigen Kanten sind fett dargestellt. Die folgende Abbildung zeigt den Restgraphen für den oben dargestellten Fluss. An den Kanten ist die jeweilige Restkapazität (c e x e oder x e ) notiert. Lösung 11.2 Meisterschaftsproblem. Angenommen, FCL gewinnt beide verbleibenden Spiele gegen FCZ und GCZ mit ausreichend vielen Toren. Dann hat FCL 37 Punkte. Zum Gewinn der Meisterschaft darf FCSG keine weiteren Punkte erhalten, YB maximal einen, FCB maximal zwei und FCW maximal sechs. Zentral für die Konstruktion des Netzes ist die Beobachtung, dass in jedem der verbleibenden Spiele genau zwei Punkte aufgeteilt werden: Der Gewinner erhält beide, oder jeder Teilnehmer bekommt genau einen im Fall von Unentschieden. Wir erzeugen also für jedes der Spiele FCSG-FCB, YB-
FCW, FCW-FCSG und FCB-YB einen Knoten im Netz mit einer eingehenden Kante von einer Quelle s und je zwei ausgehenden Kanten zu den Teilnehmern des entsprechenden Spiels. Diese haben jeweils eine Kapazität von 2. Von jedem Teilnehmer erzeugen wir eine Kante zu einer Senke t und wählen als Kapazität die maximal erlaubte Punktzahl, sodass FCL noch Meister wird. Dies führt zu folgendem Netz. Damit FCL noch Meister wird, muss im obigen Netz ein Fluss mit Wert 8 existieren, denn in jedem der vier Spiele werden auf jeden Fall je zwei Punkte auf die entsprechenden Teilnehmer verteilt. Das Max-Flow-Min-Cut-Theorem besagt, dass der Wert eines maximalen Flusses durch den Wert eines minimalen Schnitts nach oben beschränkt ist. Im obigen Netz existiert nun der folgende Schnitt vom Wert 7: Aus diesem Grund kann kein Fluss mit Wert 8 existieren, und daher kann FCL auch dann nicht Meister werden, wenn beide verbleibenden Spiele haushoch gewonnen werden. Lösung 11.3 Evakuierungsprobleme. a) Sei G = (V G, E G ) das ungerichtete Gitter, das als Eingabe gegeben ist. Die Knotenmenge V des Netzes N enthält neben allen Knoten aus G zusätzlich noch eine Quelle s und eine Senke t. Die Kantenmenge von N enthält nun die folgenden Kanten: Für jeden Startknoten s i enthält N die Kante (s, s i ). Für jede (ungerichtete) Kante {v, w} E G des Gitters enthält N die zwei gerichteten Kanten (v, w) und (w, v). Für jeden Randpunkt r j enthält N die Kante (r j, t). Wir konstruieren also ein Netz N = (V, E, c) mit V := V G {s} {t} (1) E := {(s, s i ) i {1,..., m}} {(v, w), (w, v) {v, w} E G } (2) {(r j, t) r j ist Randpunkt von G} 2
c((s, s i )) := 1 i {1,..., m} (3) c((v, w)) := 1 {v, w} E G (4) c((r j, t)) := 2 Randpunkte r j (5) Man beachte, dass ein Randpunkt doppelt benutzt werden kann. Einerseits kann er der letzte Knoten eines Fluchtwegs sein, der im Inneren des Gitters startet. Andererseits kann es aber auch einen Fluchtweg geben, der nur aus genau diesem Randpunkt besteht. Aus diesem Grund muss als Kapazität der Kanten (r j, t) genau 2 gewählt werden (und nicht 1). Es gibt nun in G genau dann m kantendisjunkte Fluchtwege, falls es im obigen Netz N einen Fluss mit Wert mindestens m gibt. b) Wir analysieren zunächst die Grösse des Netzes in Abhängigkeit von n. Das Gitter G hat V G = n 2 viele Knoten, also ist V = 2 + V G Θ(n 2 ). Ausserdem hat G genau E G = 2n(n 1) 2n 2 viele Kanten und 2n+2(n 2) = 4n 4 viele Randpunkte. Da jede Kante von G in N doppelt vorkommt, ist E = m+2 E G +4n 4 n 2 +4n 2 +4n Θ(n 2 ). Der Wert eines Flusses ist sowohl durch m (die Anzahl der Startknoten) als auch durch 8n 8 nach oben beschränkt, da es nur 4n 4 Randpunkte gibt und wie oben gesehen maximal zwei Fluchtwege in einem gemeinsamen Randpunkt enden können (theoretisch wären mehr Fluchtwege möglich, aber jeder weitere besucht mindestens einen weiteren Randknoten und muss daher nicht berücksichtigt werden). Es gibt nun verschiedene Flussalgorithmen zur Lösung. Beispielsweise berechnet der Algorithmus von Ford und Fulkerson einen maximalen Fluss mit O( E φ ) Operationen, wenn φ der maximale Flusswert ist. Damit ist seine Laufzeit pseudopolynomiell, und im Allgemeinen existieren effizientere Methoden zur Flussmaximierung. Da aber hier E Θ(n 2 ) als auch φ = min{m, 8n 8} Θ(min{m, n}) gelten, beträgt die Laufzeit des Algorithmus von Ford und Fulkerson nur O(n 2 min{m, n}), und die Wahl dieses Verfahrens ist in diesem speziellen Fall optimal. c) Sei v V G ein Knoten des Gitters und Γ(v) = {w V G {v, w} E G } die Menge aller Nachbarknoten von v in G. Wir erzeugen nun im Netz N für v V G genau zwei Knoten v in und v out, die durch die gerichtete Kante (v in, v out ) verbunden werden. Abgesehen von dieser Kante enthält v in nur eingehende und v out nur ausgehende Kanten. Für jeden Nachbar w Γ(v) erzeugen wir jeweils die Kanten (v out, w in ) und (w out, v in ). 3
Für alle Startknoten s i erzeugen wir ausgehend von der Quelle s eine Kante (s, s in i ). Ausserdem erzeugen wir für jeden Randpunkt r j eine Kante (rj out, t) zur Senke t. Allen Kanten wird Kapazität 1 zugewiesen. Im Vergleich zu a) wird die Anzahl der Knoten nahezu verdoppelt (nur die Quelle und die Senke werden nicht doppelt angelegt). Pro Knoten v V G wird dabei nur eine weitere Kante angelegt, nämlich die innere Kante (v in, v out ). Damit sind wie vorher V Θ(n 2 ) und E Θ(n 2 ), und die Laufzeit verändert sich nicht. Lösung 11.4 Matchings. a) Seien M ein Matching maximaler Kardinalität und M ein beliebiges inklusionsmaximales Matching. Nach Definition hat M maximale Kardinalität, also folgt direkt M M. Zum Beweis von M 2 M nehmen wir o.b.d.a. an, es sei M = {e 1,..., e k } mit Kanten e i = {v i, w i } für alle i, 1 i k. In jedem inklusionsmaximalen Matching M muss für jedes i, 1 i k, eine Kante e M existieren, die zu v i, zu w i oder zu beiden inzident ist (gäbe es keine solche Kante, dann könnte e i = {v i, w i } zu M hinzugefügt werden und M wäre nicht inklusionsmaximal). Da jede Kante zu genau zwei Knoten inzident ist, muss M folglich mindestens k/2 Kanten besitzen, also ist M k/2 = M /2 M 2 M. b) Im folgenden Graphen ist M = {{a, e}, {b, f}, {c, g}, {d, h} ein Matching mit maximaler Kardinalität, während M = {{a, f}, {c, h}} ein inklusionsmaximales Matching ist. c) Diese Aufgabe kann mit dem folgenden sehr einfachen Greedy-Algorithmus gelöst werden: MaximalMatching(G) Eingabe: Ungerichteter Graph G = (V, E) Ausgabe: Inklusionsmaximales Matching M E 1 M 2 while G hat noch mindestens eine Kante do 3 Wähle eine beliebige Kante e aus G. 4 M M {e} 5 Entferne alle Kanten aus G, die mindestens einen Knoten mit e gemeinsam haben. 6 return M Obwohl die Korrektheit offensichtlich ist, beweisen wir sie der Vollständigkeit halber. Wir zeigen zunächst, dass M zu jedem Zeitpunkt des Algorithmus ein Matching ist. Wäre dem nicht so, dann gäbe es in M zwei Kanten e und e mit einem gemeinsamen Knoten. Angenommen, e wäre vom Algorithmus zuerst gewählt worden. Dann wäre aber e in Schritt 5 aus G entfernt worden. Das gleiche Argument kann angewendet werden, wenn e als erstes gewählt würde. Es verbleibt zu zeigen, dass M nach der Terminierung des Algorithmus inklusionsmaximal ist. Angenommen, M wäre nicht inklusionsmaximal. Dann gäbe es eine Kante e M, sodass M {e } ein Matching wäre. Da e vom Algorithmus nicht gewählt wurde, wurde sie zuvor in Schritt 5 entfernt. Dies geschieht aber nur, wenn 4
e einen gemeinsamen Knoten mit einer Kante e M hätte. Folglich wäre M {e } kein Matching. Man überlegt sich leicht, dass der Algorithmus eine Laufzeit von O( E ) besitzt, wenn der Graph als Adjazenzliste gespeichert ist und alle Kanten zusätzlich in einer doppelt verketteten Liste L gespeichert werden. Jede Kante e = {v, w} aus L wird desweiteren mit den entsprechenden Einträgen in den Adjazenzlisten von v bzw. w ebenfalls doppelt verkettet. Dann sind die Schritte 1, 3 und 4 sowie der Test in Zeile 2, ob der Graph noch eine Kante besitzt, in Zeit O(1) durchführbar. Desweiteren wird jede Kante nur genau einmal betrachtet und direkt danach entfernt; da die Entfernung in Zeit O(1) möglich ist, erhalten wir eine Gesamtlaufzeit von O( E ). Hinweis: Ist lediglich eine Adjazenzlistendarstellung von G gegeben, dann kann L aus G in Zeit O( V + E ) aufgebaut werden, indem alle Adjazenzlisten aus G durchlaufen und die entsprechenden Kanten in L eingefügt werden. d) Der Satz von Hall besagt, dass es kein perfektes Matching in einem bipartiten Graphen gibt, falls eine Menge M von Knoten einer Partition existiert mit Γ(M) < M, wobei Γ(M) die Nachbarn der Knoten in M in der anderen Partition bezeichnet. In unserem Beispiel existiert eine solche Menge, zum Beispiel M = {a, c, e} mit Γ(M) = {h, i}. Eine andere Möglichkeit ist die Wahl von M = {f, g, j} mit Γ(M) = {b, d}. Jede dieser Mengen beweist mit dem Satz von Hall, dass der Graph kein perfektes Matching besitzt. 5