Sommersemester 2016 Modulprüfung Algorithmik“ ” 31.08.2016 11:00 - 12:30 Name: Matrikelnummer: Studiengang, Abschluss: Zugelassene Hilfsmittel: Keine. Bearbeitungszeit: 90 Minuten Hinweise: • Bearbeiten Sie von den folgenden Aufgaben so viele wie möglich. Dabei können Sie insgesamt 60 Punkte erreichen. Bei 30 oder mehr Punkten gilt die Prüfung als bestanden. • Beschriften Sie alle abzugebenden Blätter mit Ihrem Namen und Ihrer Matrikelnummer. Bei fest zusammengehefteten Blättern genügt es, das oberste Blatt zu beschriften. • Überprüfen Sie die Aufgabenblätter auf Vollständigkeit (ein Deckblatt, gefolgt von sieben bedruckten Seiten mit Aufgaben, gefolgt von einem leeren Blatt). Nur vom Korrektor auszufüllen: Aufgabe 1 Punkte Note: Bemerkungen: 2 3 4 5 6 Summe Aufgabe 1 (2+5+3 = 10 Punkte) a) Geben eine geschlossene Formel für die Lösung der folgenden Rekursionsgleichung an. T (0) = 0 und T (n) = T (n − 1) + 2n − 1 für n ≥ 1 T (n) = b) Lösen Sie die folgenden Rekursionsgleichungen unter Verwendung des Mastertheorems. √ f (n) = 4f (n/2) + 4n n + n2 ∈ Θ g(n) = 16g(n/8) + 7n − log n ∈Θ c) Tragen Sie die Landau-Symbole o, ω oder Θ so in die Kästchen ein, dass wahre Aussagen entstehen. 4n ∈ (2n ) n log(n!) ∈ √ ( n5 ) tow(n) ∈ (An (2)) Hierbei sei tow : N → N definiert durch tow(0) = 1 und tow(n) = 2tow(n−1) für alle n ≥ 1. Die Ackermannfunktion An sei wie in der Vorlesung definiert durch A0 (r) = r + 1 und Ak+1 (r) = Ak (Ak (· · · Ak (r))) {z } | r mal für alle k, r ∈ N. Aufgabe 2 (3+4+3 = 10 Punkte) Betrachten Sie den folgenden Algorithmus, der auf Eingabe zweier gleichlanger Wörter über einem binären Alphabet bestimmt, ob diese an jeder Position übereinstimmen. Die Eingabelänge einer Eingabe (a1 a2 · · · an , b1 b2 · · · bn ) sei n. Die Laufzeit des Algorihmus sei die Anzahl der Eintritte in die Funktion wordcmp. Algorithmus 1 Test auf Gleichheit von Wörtern Eingabe: Zwei Wörter a1 a2 · · · an und b1 b2 · · · bn mit ai , bi ∈ {0, 1} für alle i ∈ {1, . . . , n} 1: function wordcmp(a1 a2 · · · an , b1 b2 · · · bn ) 2: if n = 0 then 3: return true 4: else if a1 6= b1 then 5: return false 6: end if 7: return wordcmp(a2 a3 · · · an , b2 b3 · · · bn ) 8: end function a) Bestimmen Sie die Worst-Case-Laufzeit des Algorithmus in Abhängigkeit von n (exakt, nicht in Landau-Notation). Geben Sie den vollständigen Rechenweg an. b) Zeigen Für alle q ∈ R mit 0 ≤ q < 1 gilt PSie: n men i=0 iq i ist nach oben beschränkt). P∞ i=0 iq i < ∞ (d.h. die Folge der Partialsum- c) Bestimmen Sie die mittlere Laufzeit des Algorithmus in Θ-Notation. Die Buchstaben der Eingaben seien hierbei zufällig gleichverteilt über {0, 1} und paarweise unabhängig. Geben Sie den vollständigen Rechenweg an. Aufgabe 3 (10 Punkte) Gegeben sei der folgende kantengewichtete Graph mit Startknoten A: B 6 A E 8 4 7 9 D 5 G 6 1 9 3 C 6 F Führt man auf dieser Instanz den Algorithmus von Prim aus, so wird zunächst die Kante mit Gewicht 3 in den Spannbaum aufgenommen. Diese ist die eindeutige Kante mit minimalem Gewicht, die einen neuen Knoten mit dem aktuellen Spannbaum verbindet. Auch in allen nachfolgenden Runden gibt es in keinem Schritt zwei verschiedene Kanten mit (demselben) minimalen Gewicht, die jeweils einen neuen Knoten mit dem aktuellen Spannbaum verbinden. Zeigen Sie jetzt allgemein (für einen beliebigen Graphen und einen beliebigen Startknoten): Ist bei Prims Algorithmus die Wahl einer Kante, die einen neuen Knoten mit dem aktuellen Spannbaum verbindet und dabei minimales Gewicht hat, in jedem Schritt eindeutig, so gibt es in der Eingabe genau einen minimalen Spannbaum. Aufgabe 4 (5+5 = 10 Punkte) Betrachten Sie einen Fibonacci-Heap in der folgenden Ausgangssituation: 1 2 5 3 6 4 7 8 9 10 Die Knoten entsprechen den Elementen im Heap und Knotenbeschriftungen den zugehörigen Schlüsselwerten. Eine Kante (v, w) bedeutet “v ist ein Kind von w”. Knoten ohne ausgehende Kanten sind Wurzeln. Knoten mit Marken werden durch einen doppelten Kreis repräsentiert. a) Führen Sie die Operation decrease key(7, 0) ausgehend von der oben dargestellten Situation aus. Der Schlüsselwert des mit 7 beschrifteten Knotens soll dabei auf den Wert 0 reduziert werden. Zeichnen Sie die entstehende Struktur nach der Anwendung der Operation unter Verwendung der oben beschriebenen Konventionen für die Darstellung. b) Führen Sie die Operation delete min ausgehend von der oben dargestellten Situation (nicht ausgehend vom Zwischenergebnis aus der vorigen Teilaufgabe) aus. Zeichnen Sie die entstehende Struktur nach der Anwendung der Operation unter Verwendung der oben beschriebenen Konventionen für die Darstellung. Aufgabe 5 (10 Punkte) In dieser Aufgabe soll das folgende Optimierungsproblem betrachtet werden: Die Eingabe besteht aus einer Menge von offenen Intervallen I = { (`i , ri ) | 1 ≤ i ≤ n } mit `i < ri für alle i ∈ {1, . . . , n} und aus Gewichten g1 , . . . , gn ∈ N. Eine Menge S ⊆ {1, . . . n} heißt konfliktfrei, falls für alle i, j ∈ S mit i 6= Pj entweder ri ≤ `j oder rj ≤ `i gilt. Das Gewicht g(S) einer solchen Menge S ⊆ {1, . . . n} ist i∈S gi . Gesucht ist das maximale Gewicht G aller konfliktfreien Mengen, d.h. der Wert G = max{ g(S) | S ⊆ {1, . . . , n}, S ist konfliktfrei }. Entwerfen Sie mithilfe der Technik des dynamischen Programmierens einen Polynomialzeitalgorithmus, der G berechnet. Volle Punktzahl erhalten Sie nur, wenn die Laufzeit Ihres Algorithmus in O(n log n) liegt. Hinweis: Es könnte hilfreich sein, die Intervalle zunächst nach den rechten Grenzen ri zu sortieren. Sie dürfen hierzu einen aus der Vorlesung bekannten Algorithmus verwenden; es ist nicht notwendig, diesen nochmals explizit in Form von Pseudocode aufzuschreiben. Aufgabe 6 (10 Punkte) Sind die folgenden Aussagen wahr oder falsch? Jede korrekte Antwort gibt einen Punkt. Für unbearbeitete, falsche oder nicht klar gekennzeichnete Zeilen gibt es keinen Punkt. Seien S, T, U feste Mengen mit S ⊆ U und |T | = |S|2 . Sei H eine universelle Familie von Hashfunktionen von U nach T . Dann ist mehr als die Hälfte der Hashfunktionen aus H injektiv auf S. Sei T ein beliebiger Baum mit einem ausgezeichneten Wurzelknoten. Sei B die Menge der von T und für i ∈ B sei ti die Tiefe von P Blätter −ti Blatt i. Dann ist i∈B 2 ≤ 1. Es existiert ein Linearzeit-Algorithmus, der auf Eingabe eines Feldes mit n Elementen und einer Zahl k ∈ {1, . . . , n} die k kleinsten Elemente des Feldes ausgibt. wahr falsch wahr falsch wahr falsch Es existiert ein vergleichsbasierter Sortieralgorithmus mit einer sublinearen Best-Case-Laufzeit und einer quadratischen Worst-Case-Laufzeit. wahr falsch Die mittleren Laufzeiten von HeapSort und QuickSort liegen in Θ(n log n). wahr falsch Die Laufzeit des Dijkstra-Algorithmus liegt bei Verwendung eines Min-Heaps in O(n2 log n), wobei n die Anzahl der Knoten ist. wahr falsch Der Warshall-Algorithmus berechnet die transitive Hülle eines Graphen. wahr falsch Es ist kein subkubischer Algorithmus zur Multiplikation von booleschen Matrizen bekannt. wahr falsch Für alle n ∈ N existiert eine Sequenz von Union-Find-Operationen (auf einer Union-Find-Datenstruktur mit Pfadverkürzung), die einen Baum der Höhe n mit n + 1 Knoten erzeugt. wahr falsch Durch Iteration des Algorithmus von Karger und Stein können alle minimalen Schnitte eines Graphen bestimmt werden; die Worst-Case-Laufzeit dieser Iteration liegt in O(n2 log3 n). wahr falsch