Algorithmen und Datenstrukturen Universität Konstanz Fachbereich Informatik & Informationswissenschaft WS 2013/2014 Prof. Dr. Ulrik Brandes / Martin Mader / Mark Ortmann / Dr. Barbara Pampel 11. Übungsblatt Ausgabe: 30. Januar 2014 Abgabe: 6. Februar 2014, 9:00 Uhr Die Bearbeitung in Zweiergruppen ist ausdrücklich erwünscht. Aufgabe 1: Topologische Sortierung 10 Punkte Eine topologische Sortierung in einem gerichteten azyklischen Graphen (DAG, directed acyclic graph) G = (V, E) mit |V | = n ist eine Nummerierung der Knoten, also eine bijektive Abbildung f : V → {1, . . . , n}, so dass für alle Kanten (v, w) ∈ E gilt: f (v) < f (w). Anders ausgedrückt zeigen alle Kanten nach rechts, wenn die Knoten auf einer Linie in Reihenfolge der topologischen Sortierung angeordnet werden. (a) Ein zerstreuter Professor kann sich nie merken, in welcher Reihenfolge er sich anziehen soll. Er hat zehn Kleidungsstücke: Unterhose, Socken, Uhr, Gürtel, Jackett, Hemd, Unterhemd, Krawatte, Schuhe, Hose. Stellen Sie einen DAG auf; dieser hat die Kleidungsstücke als Knoten, und gerichtete Kanten zwischen zwei Kleidungsstücken, wenn man das eine vor dem anderen anziehen sollte, z. B. Unterhemd → Hemd. (b) Helfen Sie dem Professor beim Anziehen, indem Sie eine topologische Sortierung dieses Graphen angeben. (c) Eine Möglichkeit, einen DAG topologisch zu sortieren, ist es, wiederholt einen Knoten mit Eingangsgrad 0 (eine sogenannte Quelle) zu ermitteln, diesen auszugeben, und ihn anschließend inklusive aller seiner ausgehenden Kanten aus dem Graphen zu löschen. Erläutern Sie, was sich für die Laufzeit dieses Verfahrens ergibt, wenn der DAG als i. Adjazenzmatrix ii. Adjazenzlisten (pro Knoten je eine lineare Liste bezüglich eingehender und ausgehender Kanten) repräsentiert ist. [Bitte wenden] (d) Verbessern Sie das Verfahren aus Teilaufgabe (c) so, dass die Laufzeit in O(|V | + |E|) ist. Welche Repräsentation muss gewählt werden? Geben Sie Pseudocode an und begründen Sie Korrektheit und Laufzeit. (e) Eine topologische Sortierung eines DAGs kann auch über eine modifizierte Tiefensuche in O(|V | + |E|) bestimmt werden. Geben Sie die Modifikationen an und begründen Sie die Korrektheit. Aufgabe 2: Kürzeste Wege, Radius und Durchmesser 5 Punkte Sei G = (V, E) ein zusammenhängender, schlichter Graph mit uniformer Kantenbewertung. (a) Zeigen Sie, dass die Dreiecksungleichung für kürzeste Wege gilt, also dG (u, w) ≤ dG (u, v) + dG (v, w) für beliebige u, v, w ∈ V . (b) Der Durchmesser eines Graphen ist definiert als diam(G) = max dG (u, v) , u,v∈V und der Radius ist definiert als rad(G) = min max dG (u, v) . u∈V v∈V Zeigen Sie, dass rad(G) ≤ diam(G) ≤ 2 · rad(G) . (c) Geben Sie je eine Familie von Graphen an, für die gilt: i. diam(G) = rad(G) ii. diam(G) = 2 · rad(G) Aufgabe 3: Dijkstra 5 Punkte Bestimmen Sie für folgenden Graphen den Baum der kürzesten Wege ausgehend vom Startknoten S mit Hilfe des Algorithmus von Dijkstra, und bestimmen Sie die Distanzen aller Knoten von S. Dokumentieren Sie hierbei Ihre Schritte und geben Sie für jeden Schleifendurchlauf der while-Schleife an: [Bitte wenden] • welcher Knoten aus Q entnommen wird • wie sich ggf. Distanzschätzungen und parent-Zeiger verändern. S C 10 5 17 9 13 6 F B A 4 8 1 E 2 4 D