Informatik III Universität Augsburg Wintersemester 2016/17 Prof. Dr. W. Vogler Moritz Laudahn, M.Sc. Aufgabenblatt 12 Aufgabe 1 (Nachtrag zum Weihnachtsfest) Algo und Loga Rithmic beschließen, ihrem Kind zu Weihnachten eine besondere Freude machen. Zu diesem Zweck stapeln sie n Geschenke zu einem Haufen, so dass jedes Geschenk einer Schicht (mit Ausnahme der untersten) auf zwei Geschenken der Schicht darunter liegt und jedes Geschenk mit Ausnahme eines einzelnen Geschenks an der Spitze genau ein Geschenk unmittelbar über sich hat. Sei k = log(n + 1) die Anzahl der Schichten. Das Kind darf sich k Geschenke nehmen, aber es darf sich ein Geschenk nur dann nehmen, wenn kein anderes Geschenk mehr darauf liegt. Um die Wahl nicht komplett zufällig zu gestalten, haben die Eltern auf jedes Geschenk einen Schätzwert (∈ N, ohne Wiederholungen) geschrieben, der aussagt wie sehr sich das Kind über das Geschenk freuen wird. Dabei sind die Geschenke so angeordnet, dass jedes Geschenk zwei wertvollere verdeckt. Unser Ziel ist es nun, k Geschenke so zu wählen, dass die Freude maximal ist. a) Beweisen Sie, dass eine Wahl von Geschenken mit maximaler Freude von jeder Schicht genau ein Geschenk enthalten muss. (8 Punkte) b) Beschreiben Sie einen Algorithmus, der eine optimale Wahl bestimmt. Sie dürfen dazu Verfahren verwenden und/oder anpassen, die aus der Vorlesung bzw. den Übungen bekannt sind. Beschreiben Sie auch knapp, wieviel Speicherplatz Sie benötigen und wie Sie ihn verwenden. Welche Laufzeit hat Ihr Verfahren? Falls Ihr Algorithmus in mehreren Phasen arbeitet, so nutzen die Gegebenheiten auch für einzelne Phasen möglichst effizient. (12 Punkte) Aufgabe 2 a) Beschreiben Sie ein Verfahren, das für einen Graphen G und eine Sequenz seiner Ecken v1 , . . . , vn in O(n + m) Zeit prüft, ob die Sequenz einen Hamiltonischen Kreis bildet. Welchen Unterschied macht die Speicherung des Graphen in Adjazenzlisten oder einer Adjazenzmatrix für Ihr Verfahren? (8 Punkte) b) Führen Sie Teil i) des Beweises von Satz 8.4 genauer als im Skript, indem Sie ein passendes, effizientes Programm in Pseudocode angeben. Machen Sie zunächst klar, wie Sie eine Belegung codieren. Beschreiben Sie bei Bedarf benutzte Methoden für Literale, z.B.: int index(Literal l). (8 Punkte) 1 Aufgabe 3 Die Firma Ranzsoft verkauft eine tatsächlich funktionierende Kürzeste-Wege-Blackbox, die Dijkstras Algorithmus anwendet. Man kann sie per USB an seinen Computer anschließen, ihr einen gewichteten ungerichteten Graphen ohne negative Kantengewichte sowie eine Startecke s zusenden und erhält nach O(m + n log n) Berechnungszeit den Baum aller kürzesten Wege mit s als Wurzel. Da die Firmenleitung wünscht, dass die Kunden für jede Berechnung der Firma Geld zahlen, funktioniert die Blackbox nur einmal und sabotiert sich dann selbst. Gegeben ein ungerichteter Graph G ohne negative Kantengewichte. Gesucht ist ein kürzester Weg von einer Ecke s zu einer Ecke z, der über eine Ecke x führt. (Für x = vi+1 eines solchen s,x,z-Weges v1 v2 . . . vn sei hierbei die im Skript auf Seite 52 genannte Nebenbedingung vi 6= vi+2 außer Kraft gesetzt.) Beschreiben Sie ein Verfahren, das effizient einen derartigen kürzesten Weg findet und dabei ein einziges Mal Dijkstras Algorithmus als Methode verwendet. Beweisen Sie die Korrektheit Ihres Verfahrens und begründen Sie seine Effizienz. (12 Punkte) Aufgabe 4 Beweisen Sie die Korrektheit von Kruskals Algorithmus (Skript s. 80f). Zeigen Sie dafür, wie bei Prim, durch Induktion über k, dass ∃ M ST M : Tk ⊆ M . (10 Punkte) Informationen: • Abgabe: Bis spätestens Donnerstag, den 26.01.2017 um 12:00 im entsprechend beschrifteten Briefkasten. 2
© Copyright 2024 ExpyDoc