Blatt 6

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