fakult¨at f¨ur informatik

Werbung
TECHNISCHE UNIVERSITÄT MÜNCHEN
FAKULTÄT FÜR INFORMATIK
Lehrstuhl für Sprachen und Beschreibungsstrukturen
Grundlagen: Algorithmen und Datenstrukturen
Prof. Dr. Helmut Seidl, S. Pott, V. Prinz
SS 2009
Übungsblatt 10
30.06.2009
Abgabe: 07.07.2009 (vor der Vorlesung)
Aufgabe 10.1 (P) Finanzkrise
Die enge Verzahnung der Kreditinstitute untereinander durch Interbankkredite (also Geldgeschäfte innerhalb der Kreditwirtschaft) kann dazu führen, dass sich die Krise einer einzelnen
Bank auf alle Kreditinstitute und schließlich auf die gesamte Volkswirtschaft auswirkt. Zur
Risikoanalyse untersuchen wir die Verzahnung der 11 größten deutschen Kreditinstitute.
Aus Gründen der Objektivität bezeichnen wir diese mit den Zahlen 1 bis 11. Die folgenden
Paare (b,k) geben an, welche Bank b welcher anderen Bank k ein Darlehen gewährt hat.
(1, 3), (1, 4), (2, 5), (2, 6), (2, 11), (3, 7), (3, 8), (4, 3),
(5, 4), (5, 9), (5, 10), (6, 11), (7, 1), (8, 7), (9, 5), (10, 9), (11, 5)
Berechnen Sie, welche Banken gegenseitig von einander abhängig sind, indem Sie die starken
Zusammenhangskomponenten bestimmen. Dazu betrachten wir den Graphen mit den 11
Banken als Knoten, dessen Kanten durch die obigen Paare gegeben sind. Führen Sie also am
Beispiel dieses Graphen die Bestimmung der starken Zusammenhangskomponenten mit Hilfe
einer Tiefensuche (DFS) durch und stellen Sie das Vorgehen in geeigneter Weise graphisch
dar.
Aufgabe 10.2 (P) kürzeste Wege
Gegeben sei folgender gerichteter Graph G = (V, E) mit Kostenfunktion:
2
?>=<
89:;
89:;
?>=<
s ^=o
b o
==
==
==
==1
2
6
==
==
== z
3
89:;
?>=<
89:;
/ ?>=<
e
d ^=
==
==
== 1
==
4
5
==
==
= 1
89:;
?>=<
89:;
/ ?>=<
g
h
89:;
?>=<
c
1
5
2
2
G@ABC
/ FED
f
O
6
2
2
1
?>=<
/89:;
i
Bestimmen Sie die kürzesten Wege ausgehend vom Knoten s, geben Sie dazu die Distanzen
µ(s, v) für alle Knoten v ∈ V an.
Markieren Sie die kürzesten Pfade im Graph oder geben Sie die entsprechende parentTabelle an.
Aufgabe 10.3 (P) Dijkstra bei negativen Gewichten
Gegeben:
2
• ungerichteter Graph G = (V, E),
• Kantenkosten c : E → R (möglicherweise auch negative Kosten)
Betrachten Sie eine neue Kantenkosten-Funktion
E → R+
0
c :
e 7→ c(e) − min
wobei min = min{c(e) | e ∈ E} das minimale Kantengewicht ist.
a) Geben Sie ein Gegenbeispiel dafür an, dass der Algorithmus von Dijkstra für G mit
Kantenkosten c0 nicht immer den kürzesten Weg in G mit Kantenkosten c0 berechnet.
b) für Interessierte: Kann man den Algorithmus von Dijkstra anpassen, indem man in
dem Vergleich (d[v] > d[u] + c0 (e)) die Anzahl der Kanten des Weges berücksichtigt?
Aufgabe 10.4 [5 Punkte] (H) starke Zusammenhangskomponenten
Aufbauend auf den in Aufgabe 9.3. bereitgestellten Klassen IGraph.java, GraphObserver.java,
Node.java und Edge.java soll eine Klasse zur Bestimmung starker Zusammenhangskomponenten erstellt werden. Wie in Aufgabe 9.4 soll sie von der abstrakten Klasse Graphobserver.java erben. Testen Sie Ihre Implementierung anhand des Beispiels aus Aufgabe 10.1.
Schreiben Sie hierzu eine Methode, die gefundene Zusammenhangskomponenten in folgendem Format ausgibt:
Starke Zusammenhangskomponenten: [[u11 , u12 , . . . , u1n1 ], [u21 , . . . , u2n2 ], . . .]
Aufgabe 10.5 [5 Punkte] (H) Dijkstra
Führen Sie auf folgendem Graphen den Algorithmus von Dijkstra aus, ausgehend von Knoten a.
2
89:;
?>=<
89:;
?>=<
/ ?>=<
/ 89:;
a> 3
b
: c
>>
O Y
>>
>>
>>4
1
>> 2
>>
>>
2
89:;
?>=<
89:;
/ ?>=<
e
d>
>>
>>
>>
>>2
4
1
>>
>>
>> 89:;
?>=<
89:;
?>=<
g o
h o
1
3
2
1
2
1
G@ABC
/ FED
@ fO
1
3
89:;
?>=<
i
Geben Sie die Reihenfolge an, in der die Knoten besucht werden.
Herunterladen