Algorithmen - Lehrstuhl für Compilerbau und Softwareanalyse

Werbung
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.
Herunterladen