Globalübungsaufgabe1 (Azyklische Graphen

Werbung
Datenstrukturen und Algorithmen SS17
Übungsblatt 9 (Abgabe 05.07.2017)
Prof.aa
Dr. Ir. G. Woeginger
T. Hartmann, D. Korzeniewski, B. Tauer
Allgemeine Hinweise:
• Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung
(Tutorium) bearbeitet werden. Namen und Matrikelnummern der Studierenden sind auf jedes Blatt
der Abgabe zu schreiben. Heften bzw. tackern Sie die Blätter!
• Die Nummer der Übungsgruppe muss links oben auf das erste Blatt der Abgabe geschrieben
werden. Notieren Sie die Gruppennummer gut sichtbar, damit wir besser sortieren können.
• Die Lösungen müssen bis Mittwoch, den 05.07.2017 um 16:00 Uhr in den Übungskasten vom i1
(Erdgeschoss, Treppenhaus E1 im Informatik-Zentrum) eingeworfen werden. Alternativ können Sie die
Lösungen auch vor der Abgabefrist direkt bei Ihrer Tutorin/Ihrem Tutor abgeben.
Globalübungsaufgabe1 (Azyklische Graphen):
Sei G = (V, E) ein azyklischer, gerichteter, (kanten-)gewichteter Graph.
Entwerfen Sie einen Algorithmus, der den längsten Pfad (bezüglich der Gewichte) in G in Zeit O(|V | + |E|)
berechnet.
Globalübungsaufgabe2 (Bellman-Ford Algorithmus):
Betrachten Sie den folgenden Graphen:
3
A
B
C
2
2
2
2
-1
3
5
1
3
E
D
2
Führen Sie den Bellman-Ford-Algorithmus auf diesem Graphen mit dem Startknoten A aus. Die Knoten werden dabei in alphabetischer Reihenfolge betrachtet. Sie dürfen den Algorithmus vorzeitig abbrechen, wenn sich
keine weiteren Änderungen mehr ergeben. Außerdem dürfen Sie Zellen, deren Werte von Zeile zu Zeile gleich
bleiben, leer lassen. Füllen Sie dazu die nachfolgende Tabelle aus:
Aktueller Knoten / Entfernung A
–
0
1
B
C
D
E
∞
∞
∞ ∞
Datenstrukturen und Algorithmen SS17
Übungsblatt 9 (Abgabe 05.07.2017)
Geben Sie außerdem an, ob der Algorithmus einen Zyklus mit negativem Gesamtgewicht gefunden hat.
Globalübungsaufgabe3 (Bellman-Ford Algorithmus):
Einem Studenten gefällt die Laufzeit des Bellman-Ford-Algorithmus nicht und er schlägt das folgende alternative Verfahren vor, um Zyklen mit negativem Gesamtgewicht zu erkennen:
Wir benutzen Sharirs Algorithmus, um alle starken Zusammenhangskomponenten zu finden. Dies kostet
O(|V | + |E|). Da |E| ∈ O(|V |2 ) sind die Kosten damit in O(|V | + |V |2 ) = O(|V |2 ). Für jede starke Zusammenhangskomponente berechnen wir dann die Summe der Gewichte ihrer Kanten. Dies kostet insgesamt
O(|E|) und ist also wiederum in O(|V |2 ). Ist eine dieser Summen negativ, geben wir TRUE aus, sonst FALSE.
Wo liegt der Fehler, den der Student begangen hat?
Globalübungsaufgabe4 (Dijkstra Algorithmus):
Betrachten Sie den folgenden Graphen:
3
F
G
2
2
1
1
1
4
3
A
D
E
8
9
3
6
4
7
2
5
1
3
B
C
Führen Sie den Dijkstra Algorithmus auf diesem Graphen mit dem Startknoten A aus. Falls mehrere Knoten
für die nächste Iteration zur Wahl stehen, werden die Knoten dabei in alphabetischer Reihenfolge betrachtet.
Füllen Sie dazu die nachfolgende Tabelle aus:
Knoten A
B
C
D
E
F
G
2
Datenstrukturen und Algorithmen SS17
Übungsblatt 9 (Abgabe 05.07.2017)
Globalübungsaufgabe5 (d2 - Metrik):
Das folgende Netzwerk besteht aus n = 12 Knoten. Das Gewicht der Kante zwischen einem Knoten u = (xu , yu )
und einem Knoten v = (xv , yv ) beträgt (xu −xv )2 +(yu −yv )2 ; zum Beispiel gilt w(b, f ) = w(f, b) = 32 +12 = 10.
5
xd
4
j
xh
x
g
xi
x
xk
e
x
3
c
2
x
f
a
0
x`
x
1
x
xb
0
1
2
3
4
5
6
7
a) Bestimmen Sie einen MST mit Hilfe des Algorithmus von Prim. Verwenden Sie e als Startknoten. Sollten
zwei Kanten gleich lang sein, füge sie die Kante hinzu, dessen Endknoten, der vorher noch nicht Teil des
Baumes war, früher im Alphabet kommt. Sollte ein Knoten über zwei Kanten erreicht werden, die gleich
lang sind, wähle die Kante, wo der Knoten, der bereits Teil des Baumes ist, früher im Alphabet kommt.
b) Nun löschen wir die Knoten g, h, i, j aus dem Netzwerk. Verwenden Sie den Algorithmus von Dijkstra,
um die kürzesten Wege von a zu den Knoten b, c, d, e, f, k, ` zu bestimmen.
Hausaufgabe6 (Bellman-Ford Algorithmus):
(4 Punkte)
Betrachten Sie den folgenden Graphen:
1
A
B
2
2
3
-3
1
3
C
D
1
Führen Sie den Bellman-Ford-Algorithmus auf diesem Graphen mit dem Startknoten A aus. Die Knoten werden dabei in alphabetischer Reihenfolge betrachtet. Sie dürfen den Algorithmus vorzeitig abbrechen, wenn sich
keine weiteren Änderungen mehr ergeben. Außerdem dürfen Sie Zellen, deren Werte von Zeile zu Zeile gleich
bleiben, leer lassen. Füllen Sie dazu die nachfolgende Tabelle aus:
3
Datenstrukturen und Algorithmen SS17
Übungsblatt 9 (Abgabe 05.07.2017)
Aktueller Knoten / Entfernung A
–
0
B
C
D
∞
∞ ∞
Geben Sie außerdem an, ob der Algorithmus einen Zyklus mit negativem Gesamtgewicht gefunden hat.
Hausaufgabe7 (Dijkstra Algorithmus):
(3 Punkte)
Betrachten Sie den folgenden Graphen:
G
F
2
3
3
7
2
6
1
4
A
C
E
2
6
3
4
2
6
3
3
7
5
B
D
Führen Sie den Dijkstra Algorithmus auf diesem Graphen mit dem Startknoten A aus. Falls mehrere Knoten
für die nächste Iteration zur Wahl stehen, werden die Knoten dabei in alphabetischer Reihenfolge betrachtet.
Füllen Sie dazu die nachfolgende Tabelle aus:
4
Datenstrukturen und Algorithmen SS17
Übungsblatt 9 (Abgabe 05.07.2017)
Knoten A
B
C
D
E
F
G
Hausaufgabe8 (Pfade und Bäume):
(3 Punkte)
Sei G ein Graph, der die Knoten s und t enthält, die auf mindestens einem Weg miteinander verbunden sind.
B1 sei der Baum, der entsteht, wenn man mit Hilfe des Dijkstra Algorithmus den kürzesten s−t Weg bestimmt
(SSSP). B2 sei ein minimaler Spannbaum, der z.B mit Hilfe der Algorithmen von Prim oder Kruskal aus der
Vorlesung bestimmt wurden.
Geben Sie ein Beispiel für einen Graphen G an, in dem der Kürzeste-Wege-Baum B1 nicht mit dem minimal
aufspannenden Baum B2 übereinstimmt. (B1 und B2 sollen eindeutig sein!)
Hausaufgabe9 (beliebige Gewichte MST):
(3+1 Punkte)
a) Überlegen Sie sich, warum bei minimalen Spannbäumen die Beschränkung auf positive Kantenkosten
nicht restriktiv ist. Machen Sie sich dafür klar, dass Sie einen Algorithmus zur Lösung des MST-Problems
auch nutzen können, um das MST-Problem in Graphen mit beliebigen Kantenkosten zu lösen. Welche
Anpassungen müssten Sie vorab vornehmen?
Hinweis: Die resultierende Lösung dieser geänderten Aufgabenstellung (neue Gewichte) muss nun nicht
mehr zwingend ein Baum sein.
b) Wenden Sie Ihre Überlegungen auf den Graphen G an. Es reicht hier aus, alle ausgewählten Kanten A
anzugeben.
a
−1
−5
8
b
−2
−4
6
15
d
c
e
12
7
f
Abbildung 1: Graph G
Hausaufgabe10 (multiplikativer MST):
(3 Punkte)
Gegeben ist ein Graph (G = (V, E, w) mit positiven ganzzahligen Kantengewichten w : E →
ein Baum, der das Produkt der Gewichte der ausgewählten Kanten minimiert.
5
Z+
>0 .
Gesucht ist
Datenstrukturen und Algorithmen SS17
Übungsblatt 9 (Abgabe 05.07.2017)
Entwerfen Sie einen Algorithmus für dieses Problem. Analysieren Sie dessen Laufzeit.
6
Herunterladen