Datenstrukturen und Algorithmen SS17 Übungsblatt 8 (Abgabe 28.6.2017) Prof.aa Dr. Ir. G. Woeginger T. Hartmann, D. Korzeniewski, B. Tauer Allgemeine Hinweise: • Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden. Namen und Matrikelnummern der Studierenden sind auf jedes Blatt der Abgabe zu schreiben. Heften bzw. tackern Sie die Blätter! • Die Nummer der Übungsgruppe muss links oben auf das erste Blatt der Abgabe geschrieben werden. Notieren Sie die Gruppennummer gut sichtbar, damit wir besser sortieren können. • Die Lösungen müssen bis Mittwoch, den 28.6.2017 um 16:00 Uhr in den Übungskasten vom i1 (Erdgeschoss, Treppenhaus E1 im Informatik-Zentrum) eingeworfen werden. Alternativ können Sie die Lösungen auch vor der Abgabefrist direkt bei Ihrer Tutorin/Ihrem Tutor abgeben. Globalübungsaufgabe1 (Adjazenzmatrix): Gegeben sei ein ungerichteter Graph G mit |V | = n. Die zugehörige Adjazenzmatrix hat einen Speicherbedarf von n2 vielen Einträgen. Gibt es eine Möglichkeit, diesen Graphen auch in nur n(n−1) Einträgen abzuspeichen 2 und trotzdem in O(1) Schritten zu entscheiden, ob zwei Knoten i und j adjazent sind? Globalübungsaufgabe2 (Kosaraju-Sharir): Wenden Sie Sharir’s Algorithmus aus der Vorlesung an, um die starken Zusammenhangskomponenten des folgenden Graphen zu finden. Geben Sie das Array color und den Stack S nach jeder Schleifeniteration der ersten und zweiten Phase (also nach Zeile 17 und nach Zeile 22 im Code auf den Folien) an, falls DFS1 bzw. DFS2 ausgeführt wurde. Geben Sie zudem das Array scc nach jeder Schleifeniteration der zweiten Phase (also nach Zeile 22) an, falls DFS2 ausgeführt wurde. Nehmen Sie hierbei an, dass scc initial mit Nullen gefüllt ist und die Knoten im Graphen und in allen Adjazenzlisten aufsteigend nach ihren Schlüsselwerten sortiert sind, also der Knoten mit Schlüssel 1 vom Algorithmus als erstes berücksichtig wird usw. 1 2 3 4 5 6 7 8 9 10 Globalübungsaufgabe3 (kritischer Pfad): Bestimmen Sie eine topologische Sortierung unter Verwendung des in der Vorlesung vorgestellten Algorithmus für den folgenden Graphen. Die Knoten in diesem Graphen sind mit jeweils einem Schlüssel und einer Dauer beschriftet. Im gesamten Algorithmus werden Knoten in aufsteigender alphabetischer Reihenfolge ihrer Schlüssel berücksichtigt. Geben Sie als Ergebnis die Liste der Knotenschlüssel zusammen mit ihrem jeweiligen frühesten Endzeitpunkt (eft) in aufsteigender Reihenfolge der Topologiewerte an. Markieren Sie außerdem 1 Datenstrukturen und Algorithmen SS17 Übungsblatt 8 (Abgabe 28.6.2017) einen kritischen Pfad, indem Sie die zugehörigen Knotenschlüssel unterstreichen, und geben Sie den gesamten frühesten Endzeitpunkt (eft) an. A, 1 B, 1 D, 2 E, 2 C, 3 F, 3 Globalübungsaufgabe4 (Kondensationsgraph): a) Zeigen Sie, dass für jeden gerichteten Graphen G gilt, dass der transponierte Graph des Kondensationsgraphen von G gleich dem Kondensationsgraphen des transponierten Graphen von G ist: (G ↓)T = (GT ) ↓ b) Entwerfen Sie einen Algorithmus, der für einen gegebenen gerichteten Graphen G = (V, E) in Laufzeit O(|V | + |E|) den Graph G ↓ berechnet. Stellen Sie insbesondere sicher, dass es in G ↓ höchstens eine Kante von einem Knoten v zu einem anderen Knoten w gibt (d.h. es darf keine doppelten Kanten geben). 2 Datenstrukturen und Algorithmen SS17 Übungsblatt 8 (Abgabe 28.6.2017) Hausaufgabe5 (Terminologie Graphen + Topologische Sortierung): (2+1+2 Punkte) a) Zeichnen Sie den folgenden Graphen: G = {{s, v1 , v2 , v3 , v4 , t}, {(s, v1 ), (s, v3 ), (v1 , v2 ), (v1 , v4 ), (v3 , v4 ), (v2 , t), (v4 , t), (v3 , v2 )}} b) Ist G kreis-frei? c) Interpretieren sie nun die Pfeile als Vorgängerbezeihungen. Ist G topologisch sortierbar? Falls ja, geben sie eine explizite bijektive Abbildung Φ : V → {0, 1, 2, 3, 4, 5} an. Ist diese eindeutig? Hausaufgabe6 (kritischer Pfad): (7 Punkte) Bestimmen Sie eine topologische Sortierung unter Verwendung des in der Vorlesung vorgestellten Algorithmus für den folgenden Graphen. Die Knoten in diesem Graphen sind mit jeweils einem Schlüssel und einer Dauer beschriftet. Im gesamten Algorithmus werden Knoten in aufsteigender alphabetischer Reihenfolge ihrer Schlüssel berücksichtigt. Geben Sie als Ergebnis die Liste der Knotenschlüssel zusammen mit ihrem jeweiligen frühesten Endzeitpunkt (eft) in aufsteigender Reihenfolge der Topologiewerte an. Markieren Sie außerdem einen kritischen Pfad, indem Sie die zugehörigen Knotenschlüssel unterstreichen, und geben Sie den gesamten frühesten Endzeitpunkt (eft) an. A, 2 B, 1 C, 2 D, 1 E, 2 F, 3 G, 3 H, 2 I, 3 J, 1 K, 1 L, 2 Hausaufgabe7 (CC- Sharir): (2 Punkte) Wenden Sie Sharir’s Algorithmus aus der Vorlesung an, um die starken Zusammenhangskomponenten des folgenden Graphen zu finden. Geben Sie das Array color und den Stack S nach jeder Schleifeniteration der ersten und zweiten Phase (also nach Zeile 17 und nach Zeile 22 im Code auf den Folien) an, falls DFS1 bzw. DFS2 ausgeführt wurde. Geben Sie zudem das Array scc nach jeder Schleifeniteration der zweiten Phase (also nach Zeile 22) an, falls DFS2 ausgeführt wurde. Nehmen Sie hierbei an, dass scc initial mit Nullen gefüllt ist und die Knoten im Graphen und in allen Adjazenzlisten aufsteigend nach ihren Schlüsselwerten sortiert sind, also der Knoten mit Schlüssel 1 vom Algorithmus als erstes berücksichtig wird usw. 3 Datenstrukturen und Algorithmen SS17 Übungsblatt 8 (Abgabe 28.6.2017) 1 2 3 4 5 6 7 8 9 10 11 12 13 Hausaufgabe8 (Eulersch): (2+1+2 Punkte) a) Betrachten Sie die Graphen G1 , G2 , G3 und G4 aus Abbildung 1. Welche der Graphen Gi ist eulersch (d.h. erfüllt das Theorem von Euler aus der Vorlesung)? q y r w w p r z x y x Graph G1 q w z Graph G2 y q r y r x z z x Graph G3 w Graph G4 Abbildung 1: Auswahl an Graphen für Aufgabenteil (a) b) Geben sie, falls möglich, jeweils eine Eulerkreis an. c) Ein (ungerichteter zusammenhängender) Graph enthält genau dann einen Eulerweg (Eulerpfad), wenn zwei oder keiner seiner Knoten ungeraden Knotengrad besitzen. Geben Sie, falls möglich, jeweils einen Eulerweg an. 4