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.