Technische Universität Berlin Institut für Mathematik ADM I – Graphen und Netzwerkalgorithmen Sommersemester 2007 Prof. Dr. Stefan Felsner Felix König Elisabeth Günther Torsten Ueckerdt 6. Übungsblatt Abgabe: Freitag, 1.6.2007, vor der Übung Dieses Blatt ist das letzte der ersten Semesterhälfte. Aufgabe 21 5 Punkte Stellt euch vor, ihr möchtet kürzeste Wege zwischen Start- und Zielknoten s und t in gerichteten Graphen G finden, die Straßennetze darstellen. Insbesondere sind alle Knoten eines Graphen mit Koordinaten der Form (x, y) versehen, und die Länge einer Kanten c(v, w) zwischen Knoten v und w korrespondiert mit ihrer euklidischen Entfernung d(v, w). Ein Kommilitone schlägt folgenden Algorithmus vor: • Berechne modifizierte Kantengewichte c′ wie folgt: c′ (v, w) := c(v, w) − d(w, t) + d(v, t) • Benutze den Dijkstra-Algorithmus, um kürzeste Wege bezüglich c′ zu berechnen. a) Berechnet der Algorithmus kürzeste Wege bezüglich c′ ? Berechnet der Algorithmus kürzeste Wege bezüglich c? Beweist eure Aussagen. Was könnte ein Vorteil dieses Algorithmus gegenüber eines normalen Dijkstra-Algorithmus sein? b) Betrachte folgende allgemeinere Version des Algorithmus: Sei α : V (G) → R eine Knotenbewertung. Berechne nun modifizierte Kantengewichte c′ wie folgt: c′ (v, w) := c(v, w) − α(w) + α(v) Nun benutze entweder den Bellman-Ford- oder den Dijkstra-Algorithmus, um kürzeste Wege bezüglich c′ zu berechnen. Sind kürzeste Wege bezüglich c′ auch kürzeste Wege bezüglich c? Sind zusätzliche Forderungen an α notwendig, damit der Bellman-Ford- bzw. der DijkstraAlgorithmus benutzt werden kann? Wenn ja, welche? Beweist Eure Aussagen. Aufgabe 22 5 Punkte Sei G azyklisch. Betrachtet den verbesserten Bellman-Ford-Algorithmus ShortestPathII aus der Vorlesung. Wie kann man ihn modifizieren, so dass seine Laufzeit linear wird? Beweist eure Aussage. Aufgabe 23 0 + 5 Punkte Ein gerichteter Graph G heißt transitiv, falls für jedes Paar u, v von Knoten in V (G) gilt: ∃ u-v-Weg in G ⇒ (u, v) ∈ E(G). Gebt einen Algorithmus an, der überprüft ob ein gerichteter Graph G transitiv ist. Beweist seine Korrektheit und Laufzeit. Die volle Punktzahl erhält man nur, falls die Laufzeit des angegebenen Algorithmus für Graphen mit m ∈ o(n2 ) in o(n3 ) liegt. Aufgabe 24 0 + 5 Punkte Einige eurer Freunde studieren Astronomie. In vielen sternenklaren Nächten fahren sie zum Universitätsobservatorium, um astronomische Ereignisse am Nachthimmel zu beobachten. Leider liegen zwischen diesen Sternschauspielen am Nachthimmel naturgemäß sehr weite Distanzen, und das riesige Universitätsteleskop lässt sich nur recht langsam bewegen, so dass sie selten alle Ereignisse einer Nacht beobachten können. Nehmen wir an, dass die Zeitpunkte ti der n Ereignisse einer Nacht minutengenau spezifiziert sind und ihr Ort am Nachthimmel als eindimensionale Gradzahl di bezüglich irgendeines Bezugspunkts, i = 1, 2, . . . , n. Das Teleskop lässt sich mit exakt einem Grad pro Minute bewegen und kann am Abend auf den Ort des ersten Ereignisses, welches beobachtet werden soll, eingestellt werden. Gebt einen polynomiellen Algorithmus an, der eine maximale Menge von nacheinander beobachtbaren Ereignissen ermittelt und beweist seine Laufzeit und Korrektheit. Funktioniert euer Algorithmus auch noch, wenn man den Ereignissen Gewichte entsprechend ihrer Wichtigkeit zuordnet und die Summe der Gewichte der beobachteten Ereignisse in einer Nacht maximieren möchte? Programmieraufgabe 4 (Abnahme während einer der RBs am 1.6.2007): Für diese Programmieraufgabe bekommen die Knoten unserer Graphen Koordinaten und die Kantengewichte entsprechen dem euklidischen Abstand ihrer Endknoten. Implementiert den Dijkstra-Algorithmus und den Algorithmus aus Aufgabe 21. Stellt die Laufzeiten der beiden Algorithmen für insgesamt wenigstens zwanzig s-t-Paare in den Graphen rand50, rand100, rand150, rand200 und ger1 grafisch gegenüber und kommentiert eure Ergebnisse. Eine für die Implementation des Dijkstra notwendige PriorityQueue mit einer Methode decreaseKey steht auf der HP neben diesem Blatt zum Download bereit. Für Einzelheiten, siehe ihre JavaDoc und die UE vom 25.5.. Das um Knotenkoordinaten erweiterte Format für unsere Graphen sieht für unseren Beispielgraphen wie folgt aus: 5 0 (0, 0): 1, 1.5; 3, 2.46 1 (1.5, 0): 2, 1.25 2 (2.25, 1): 0, 2.46 3 (2.25, -1): 1, 1.25; 2, 2; 4, 1.25 4 (3, 0): 2, 1.25 2 0 2.46 1.25 1.5 1 1.25 2.46 1.25 2 4 1.25 3