Naturwissenschaftlich-Technische Fakultät Compilerbau und Softwareanalyse Kurt Sieber Philipp Reh Algorithmen Sommersemester 2012 Übungsblatt 7 Aufgabe 1 Wie kann die Ausgabe des Floyd-Warshall-Algorithmus verwendet werden, um festzustellen, ob ein Zyklus mit negativem Gewicht vorhanden ist? Aufgabe 2 Wie lassen sich bei der Tiefensuche Rückwärtskanten, Vorwärtskanten und Querkanten mit Hilfe der Farben und der Zeitstempel erkennen? Aufgabe 3 Zeigen Sie, dass ein gerichteter Graph genau dann einen Zyklus enthält, wenn man bei der Tiefensuche eine Rückwärtskante entdeckt. Aufgabe 4 Sei G = (V, E) ein gerichteter Graph. Eine topologische Sortierung von G ist eine lineare Anordnung v1 , . . . , vn aller Knoten von G so, dass (vj , vi ) ∈ / E für alle i ≤ j. Zeigen Sie a. Eine topologische Sortierung von G existiert genau dann, wenn G zykelfrei ist. b. Eine (mögliche) topologische Sortierung von G erhält man, indem man die Knoten von G absteigend nach den Endzeitpunkten f [v] aus der Tiefensuche ordnet. Erweitern Sie den Algorithmus Dfs(G) so, dass schon während der Tiefensuche eine topologische Sortierung von G erstellt wird. Aufgabe 5 Für gerichtete azyklische Graphen (directed acyclic graphs, kurz: DAGs) mit Gewichtsfunktion w lassen sich kürzeste Pfade effizienter bestimmen als mit Dijkstra oder Bellman-Ford. a. Geben Sie einen Algorithmus an, der das Single Source Shortest Path Problem für solche Graphen in Zeit Θ(|V | + |E|) löst. b. Beweisen Sie die Korrektheit Ihres Algorithmus und zeigen Sie, dass er tatsächlich die gewünschte Laufzeit hat.