Institut für Computergraphik und Algorithmen Abteilung für Algorithmen und Datenstrukturen Sommersemester 2004 Übungen zur Lehrveranstaltung Algorithmen und Datenstrukturen 2 4. Übungsblatt Abgabe persönlich in der 4. Übung am 15.06.2004 Kreuzen Sie bitte in den Kästchen diejenigen Aufgaben an, bei denen Sie sich sicher sind, dass Sie die richtige Lösung präsentieren können. A1 A2 A3 A4 A5 A6 A7 A8 A9 A 10 kann präsentieren Aufgabe 1 Maximale Flüsse – Ford-Fulkerson Finden Sie zu dem nachfolgenden Flussnetzwerk N1 den maximalen Fluss f ∗ , indem Sie den Algorithmus von Ford-Fulkerson verwenden: t 15 3 20 3 5 7 1 9 4 2 12 10 8 s a) Visualisieren Sie dazu die einzelnen Schritte des Algorithmus, d.h. Flüsse und Restgraphen. b) Geben Sie anschließend einen Schnitt in N1 an, der von f ∗ saturiert wird. Aufgabe 2 Maximale Flüsse – Edmond-Karp Eine Variation des Algorithmus von Ford-Fulkerson verwendet augmentierende Pfade mit möglichst wenig Kanten, d.h. zuerst werden die augmentierenden Pfade gesucht und anschließend wird entlang desjenigen Pfades mit minimaler Kantenzahl augmentiert. Diese Variation ist als Edmond-Karp-Algorithmus bekannt. 1 a) Geben Sie den Edmond-Karp-Algorithmus in Pseudocode an. b) Berechnen Sie den maximalen Fluss des Netzwerks N1 aus Aufgabe 1 und visualisieren Sie die einzelnen Schritte in analoger Art und Weise. Aufgabe 3 Maximale Flüsse Welche der folgenden Behauptungen sind wahr und welche sind falsch? Belegen Sie Ihre Antwort entweder durch ein Gegenbeispiel oder einen kurzen Beweis: a) Seien v und w zwei beliebige Knoten in einem Flussnetzwerk N . In jedem maximalen Fluss f ∗ ist entweder der Fluss von v nach w oder der Fluss von w nach v gleich 0. b) Sei N ein Flussnetzwerk mit höchstens einer (gerichteten) Kante zwischen jedem Knotenpaar. Wenn wir jede gerichtete Kante durch eine ungerichtete Kante ersetzen, dann bleibt der maximale Fluss f ∗ unverändert. c) Wenn zu allen Kantenkapazitäten eine beliebige positive Zahl λ addiert wird, dann wächst der maximale Fluss um ein Vielfaches von λ. d) Wenn zu allen Kantenkapazitäten eine beliebige positive Zahl λ addiert wird, dann ändert sich der minimale Schnitt nicht. Aufgabe 4 Maximale Flüsse Konstruieren Sie drei Flussnetzwerke mit ganzzahligen Kapazitäten, die jeweils die folgenden Eigenschaften besitzen: a) viele ganzzahlige maximale Flüsse und viele minimale Schnitte; b) viele ganzzahlige maximale Flüsse und einen einzigen minimalen Schnitt; c) einen einzigen maximalen Fluss und viele minimale Schnitte; Aufgabe 5 Maximale Flüsse – Preflow-Push Es sei ein weiteres Flussnetzwerk N2 mit ganzzahligen Kantenkapazitäten gegeben: Berechnen Sie mit Hilfe des Preflow-Push-Algorithmus den maximalen Fluss von der Quelle s zur Senke t. Zeichnen Sie die einzelnen Schritte des Algorithmus und geben Sie den Wert des maximalen Flusses an. 2 Aufgabe 6 Matchings und Coverings Gegeben sei ein bipartiter ungerichteter Graph G = (V, E) mit einer Knotenpartition V = L ∪ R und L, R ⊆ V disjunkt. Alle Kanten in E liegen zwischen Knoten aus L und R. Ein Matching M ⊆ E ist eine Teilmenge von Kanten aus E, so dass für alle Knoten v ∈ V höchstens eine Kante im Matching M inzident zu v ist, d.h. keine zwei Kanten besitzen einen gemeinsamen Knoten. Ein maximales Matching M ∗ ist ein Matching maximaler Kardinalität: es gilt also |M ∗ | ≥ |M | für jedes andere Matching M . Ein Cover C ⊆ V ist eine Teilmenge von Knoten aus V , so dass jede Kante e ∈ E inzident zu mindestens einem Knoten im Cover C ist. Ein minimales Cover C ∗ ist ein Cover minimaler Kardinalität: es gilt also |C ∗ | ≤ |C| für jedes andere Cover C. Zeichnen Sie zunächst einen Beispielgraphen und geben Sie ein Matching und ein Covering in diesem Graphen an. Zeigen oder widerlegen Sie dann die folgende Behauptung: Für alle Cover C und alle Matchings M gilt: |C| ≥ |M |. Aufgabe 7 Matchings und Coverings Ist G = (V, E) ein bipartiter Graph, so gilt für ein maximales Matching M ∗ und ein minimales Cover C ∗ : |M ∗ | = |C ∗ |. Beweisen Sie diese Behauptung, indem Sie das Problem als maximales Flussproblem formulieren. Aufgabe 8 Geometrische Algorithmen – Scan-Line Prinzip Seien P und Q konvexe Polygone in der Ebene mit n bzw. m Eckpunkten. Geben Sie einen effizienten Algorithmus in Pseudocode an, der den Schnitt P ∩ Q in der Zeit O(n + m) mit Hilfe des Scan-Line Prinzips berechnet. Hinweis: Die Polygone P und Q sind gegeben als zirkuläre Liste ihrer Eckpunkte. Der Schnitt P ∩ Q ist ebenfalls ein konvexes Polygon. Die gesucht Ausgabe ist die zirkuläre Liste der Eckpunkte von P ∩ Q. Aufgabe 9 Geometrische Algorithmen – Sichtbarkeitsproblem Wir betrachten das folgende Sichtbarkeitsproblem: Zwei horizontale Liniensegemente s und s0 in einer gegebenen Menge horizontaler Liniensegmente S sind gegenseitig sichtbar, wenn es eine vertikale Gerade gibt, die s und s0 , aber kein weiteres Liniensegment der Menge S zwischen den beiden Liniensegmenten s und s0 schneidet. Es soll nun nach allen gegenseitig sichtbaren horizontalen Liniensegmentpaaren aus der Menge S gesucht werden. Gehen Sie dabei von folgender vereinfachenden Annahme aus: Sämtliche x-Werte von Anfangs- und Endpunkten aller Liniensegmente sind paarweise verschieden. Geben Sie ein Beispiel des Problems mit 8 verschiedenen Liniensegmenten sowie die Lösung für Ihr Beispiel an. Aufgabe 10 Geometrische Algorithmen – Sichtbarkeitsproblem Schreiben Sie unter Zuhilfenahme des Scan-Line Prinzips einen effizienten Algorithmus in Pseudocode, der das Sichtbarkeitsproblem aus Aufgabe 9 für eine Menge von horizontalen Liniensegmenten löst. Analysieren Sie die Laufzeit Ihres Algorithmus in O-Notation. 3