Graphentheorie Prof. Dr. Peter Becker Fachbereich Informatik Wintersemester 2014/15 12. Januar 2015 Aufgabenblatt 6H Aufgabe 1 (Blockung) Gegeben sei eine Folge F von n natürlichen Zahlen, z.B. F = 5, 7, 3, 9, 2, 3, 6, 8, 4, 1, 8, 6, 5, sowie eine Blockgröße B, z.B. B = 10. Wir wollen nun versuchen, F in Blöcke zu zerlegen, so dass die Summe der Folgenglieder in einem Block möglichst wenig von B abweicht. Für unsere Beispielfolge wäre 5|7, 3|9, 2|3, 6|8, 4|1, 8|6, 5 eine Zerlegung. Wir bewerten solch eine Zerlegung, indem wir für jeden Block die Abweichung von der Blockgröße berechnen und diese Abweichungen summieren. Für die oben angegebene Zerlegung ergibt sich 5 | 7, 3 | 9, 2 | 3, 6 | 8, 4 | 1, 8 | 6, 5 |{z} |{z} |{z} |{z} |{z} |{z} |{z} 5 0 1 1 2 1 1 und damit wäre die Bewertung dieser Zerlegung 5 + 0 + 1 + 1 + 2 + 1 + 1 = 11. Gesucht ist eine Zerlegung mit möglichst kleiner Bewertung. Lösen Sie dieses Problem für die Folge F = 6, 6, 4, 6, 7, 1, 4, 9, 1, 5, 9, 2, 5, 6, 2 und B = 10. Geben Sie in Delivery.java eine optimale Zerlegung mit Hilfe der Variablen blockung als Feld der Blöcke an, wobei jeder Block wieder ein Feld ist. Beispiel: Für obige Beispielzerlegung schreiben Sie public static int[][] blockung = { {5}, {7, 3}, {9, 2}, {3, 6}, {8, 4}, {1, 8}, {6, 5} }; (8 Punkte) Aufgabe 2 (Bottleneck-Minimierung) Gegeben sei der folgende Graph: 4 2 5 1 0 3 1 8 7 5 9 11 7 9 4 7 8 9 9 1 6 5 10 5 7 6 8 8 9 Gesucht ist ein Weg vom Knoten 0 zum Knoten 11, so dass die längste Kante dieses Weges möglichst kurz ist. Überlegen Sie sich, wie Sie den Algorithmus von Dijkstra anpassen müssen, um dieses Problem zu lösen und berechnen Sie einen Weg, dessen längste Kante minimale Länge hat (unter allen Wegen von 0 nach 11). Geben Sie den besten Weg mittels der Variablen public static int [] besterWeg = { ... }; als Knotenfolge an. Beispiel: Für den Graphen und die Knoten a und d wäre der Weg (a, b, d) besser als der Weg (a, c, d), denn max{4, 5} = 5 < 6 = max{1, 6}. (8 Punkte) Aufgabe 3 (Minimalgerüst) Gegeben sei der folgende Graph: 3 2 7 5 0 3 8 2 7 5 2 11 5 5 4 3 8 3 9 1 3 5 10 9 4 6 3 1 9 Berechnen Sie zu diesem Graphen ein Minimalgerüst. Geben Sie das Minimalgerüst in Delivery.java als Feld von Kanten mittels der Variablen mst an. Beispiel: Für müssten Sie public static int[][] mst = { {0,2}, {1,2}, {1,3} }; angeben. Abgabe der Lösungen bis 23. Januar 2015, 24 Uhr (8 Punkte)