Datenstrukturen und Algorithmen SS17 Übungsblatt 9 (Abgabe 05.07.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 05.07.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 (Azyklische Graphen): Sei G = (V, E) ein azyklischer, gerichteter, (kanten-)gewichteter Graph. Entwerfen Sie einen Algorithmus, der den längsten Pfad (bezüglich der Gewichte) in G in Zeit O(|V | + |E|) berechnet. Globalübungsaufgabe2 (Bellman-Ford Algorithmus): Betrachten Sie den folgenden Graphen: 3 A B C 2 2 2 2 -1 3 5 1 3 E D 2 Führen Sie den Bellman-Ford-Algorithmus auf diesem Graphen mit dem Startknoten A aus. Die Knoten werden dabei in alphabetischer Reihenfolge betrachtet. Sie dürfen den Algorithmus vorzeitig abbrechen, wenn sich keine weiteren Änderungen mehr ergeben. Außerdem dürfen Sie Zellen, deren Werte von Zeile zu Zeile gleich bleiben, leer lassen. Füllen Sie dazu die nachfolgende Tabelle aus: Aktueller Knoten / Entfernung A – 0 1 B C D E ∞ ∞ ∞ ∞ Datenstrukturen und Algorithmen SS17 Übungsblatt 9 (Abgabe 05.07.2017) Geben Sie außerdem an, ob der Algorithmus einen Zyklus mit negativem Gesamtgewicht gefunden hat. Globalübungsaufgabe3 (Bellman-Ford Algorithmus): Einem Studenten gefällt die Laufzeit des Bellman-Ford-Algorithmus nicht und er schlägt das folgende alternative Verfahren vor, um Zyklen mit negativem Gesamtgewicht zu erkennen: Wir benutzen Sharirs Algorithmus, um alle starken Zusammenhangskomponenten zu finden. Dies kostet O(|V | + |E|). Da |E| ∈ O(|V |2 ) sind die Kosten damit in O(|V | + |V |2 ) = O(|V |2 ). Für jede starke Zusammenhangskomponente berechnen wir dann die Summe der Gewichte ihrer Kanten. Dies kostet insgesamt O(|E|) und ist also wiederum in O(|V |2 ). Ist eine dieser Summen negativ, geben wir TRUE aus, sonst FALSE. Wo liegt der Fehler, den der Student begangen hat? Globalübungsaufgabe4 (Dijkstra Algorithmus): Betrachten Sie den folgenden Graphen: 3 F G 2 2 1 1 1 4 3 A D E 8 9 3 6 4 7 2 5 1 3 B C Führen Sie den Dijkstra Algorithmus auf diesem Graphen mit dem Startknoten A aus. Falls mehrere Knoten für die nächste Iteration zur Wahl stehen, werden die Knoten dabei in alphabetischer Reihenfolge betrachtet. Füllen Sie dazu die nachfolgende Tabelle aus: Knoten A B C D E F G 2 Datenstrukturen und Algorithmen SS17 Übungsblatt 9 (Abgabe 05.07.2017) Globalübungsaufgabe5 (d2 - Metrik): Das folgende Netzwerk besteht aus n = 12 Knoten. Das Gewicht der Kante zwischen einem Knoten u = (xu , yu ) und einem Knoten v = (xv , yv ) beträgt (xu −xv )2 +(yu −yv )2 ; zum Beispiel gilt w(b, f ) = w(f, b) = 32 +12 = 10. 5 xd 4 j xh x g xi x xk e x 3 c 2 x f a 0 x` x 1 x xb 0 1 2 3 4 5 6 7 a) Bestimmen Sie einen MST mit Hilfe des Algorithmus von Prim. Verwenden Sie e als Startknoten. Sollten zwei Kanten gleich lang sein, füge sie die Kante hinzu, dessen Endknoten, der vorher noch nicht Teil des Baumes war, früher im Alphabet kommt. Sollte ein Knoten über zwei Kanten erreicht werden, die gleich lang sind, wähle die Kante, wo der Knoten, der bereits Teil des Baumes ist, früher im Alphabet kommt. b) Nun löschen wir die Knoten g, h, i, j aus dem Netzwerk. Verwenden Sie den Algorithmus von Dijkstra, um die kürzesten Wege von a zu den Knoten b, c, d, e, f, k, ` zu bestimmen. Hausaufgabe6 (Bellman-Ford Algorithmus): (4 Punkte) Betrachten Sie den folgenden Graphen: 1 A B 2 2 3 -3 1 3 C D 1 Führen Sie den Bellman-Ford-Algorithmus auf diesem Graphen mit dem Startknoten A aus. Die Knoten werden dabei in alphabetischer Reihenfolge betrachtet. Sie dürfen den Algorithmus vorzeitig abbrechen, wenn sich keine weiteren Änderungen mehr ergeben. Außerdem dürfen Sie Zellen, deren Werte von Zeile zu Zeile gleich bleiben, leer lassen. Füllen Sie dazu die nachfolgende Tabelle aus: 3 Datenstrukturen und Algorithmen SS17 Übungsblatt 9 (Abgabe 05.07.2017) Aktueller Knoten / Entfernung A – 0 B C D ∞ ∞ ∞ Geben Sie außerdem an, ob der Algorithmus einen Zyklus mit negativem Gesamtgewicht gefunden hat. Hausaufgabe7 (Dijkstra Algorithmus): (3 Punkte) Betrachten Sie den folgenden Graphen: G F 2 3 3 7 2 6 1 4 A C E 2 6 3 4 2 6 3 3 7 5 B D Führen Sie den Dijkstra Algorithmus auf diesem Graphen mit dem Startknoten A aus. Falls mehrere Knoten für die nächste Iteration zur Wahl stehen, werden die Knoten dabei in alphabetischer Reihenfolge betrachtet. Füllen Sie dazu die nachfolgende Tabelle aus: 4 Datenstrukturen und Algorithmen SS17 Übungsblatt 9 (Abgabe 05.07.2017) Knoten A B C D E F G Hausaufgabe8 (Pfade und Bäume): (3 Punkte) Sei G ein Graph, der die Knoten s und t enthält, die auf mindestens einem Weg miteinander verbunden sind. B1 sei der Baum, der entsteht, wenn man mit Hilfe des Dijkstra Algorithmus den kürzesten s−t Weg bestimmt (SSSP). B2 sei ein minimaler Spannbaum, der z.B mit Hilfe der Algorithmen von Prim oder Kruskal aus der Vorlesung bestimmt wurden. Geben Sie ein Beispiel für einen Graphen G an, in dem der Kürzeste-Wege-Baum B1 nicht mit dem minimal aufspannenden Baum B2 übereinstimmt. (B1 und B2 sollen eindeutig sein!) Hausaufgabe9 (beliebige Gewichte MST): (3+1 Punkte) a) Überlegen Sie sich, warum bei minimalen Spannbäumen die Beschränkung auf positive Kantenkosten nicht restriktiv ist. Machen Sie sich dafür klar, dass Sie einen Algorithmus zur Lösung des MST-Problems auch nutzen können, um das MST-Problem in Graphen mit beliebigen Kantenkosten zu lösen. Welche Anpassungen müssten Sie vorab vornehmen? Hinweis: Die resultierende Lösung dieser geänderten Aufgabenstellung (neue Gewichte) muss nun nicht mehr zwingend ein Baum sein. b) Wenden Sie Ihre Überlegungen auf den Graphen G an. Es reicht hier aus, alle ausgewählten Kanten A anzugeben. a −1 −5 8 b −2 −4 6 15 d c e 12 7 f Abbildung 1: Graph G Hausaufgabe10 (multiplikativer MST): (3 Punkte) Gegeben ist ein Graph (G = (V, E, w) mit positiven ganzzahligen Kantengewichten w : E → ein Baum, der das Produkt der Gewichte der ausgewählten Kanten minimiert. 5 Z+ >0 . Gesucht ist Datenstrukturen und Algorithmen SS17 Übungsblatt 9 (Abgabe 05.07.2017) Entwerfen Sie einen Algorithmus für dieses Problem. Analysieren Sie dessen Laufzeit. 6