Helmut Alt Maike Buchin Ludmila Scharf André Schulz WS 2006/07 20. Oktober 2006 1. Übung zur Vorlesung Höhere Algorithmik 1. Aufgabe (4 Punkte) Lösen Sie die folgende Rekursionsgleichung, die die Anzahl der Vergleiche bei Mergesort abschätzt: T (1) = 0 T (n) = T (1) j n k 2 +T l n m 2 +n für n > 1. (2) Hinweis: Betrachten Sie den Rekursionsbaum von Mergesort, wo in jedem Knoten die Größe des zu lösenden Unterproblems gespeichert ist. Betrachten Sie die Höhe des Baums und die Kosten des Mischens auf jeder Ebene. 2. Aufgabe (8 Punkte) 2 Für kleine n ist n2 − n2 < n · log n, daher benötigt Sortieren durch Auswählen in diesen Fällen weniger Vergleiche als Mergesort. Wir betrachten im Folgenden eine Variante von Mergesort, genannt M -Mergesort, die versucht diesen Vorteil auszunutzen und deshalb Folgen der Länge kleiner M ∈ N nicht mehr rekursiv, sondern mittels Sortieren durch Auswählen sortiert. 1. Bestimmen Sie die Anzahl der von M -Mergesort benötigten Vergleiche exakt; zur Vereinfachung können Sie dabei annehmen, daß n und M Zweierpotenzen sind. 2. Für welche Werte von M ist M -Mergesort besser als Mergesort? Welches M ist optimal? Implementieren Sie Mergesort und M -Mergesort in Java. Vergleichen Sie Ihre beiden Implementierungen bezüglich der Anzahl der Vergleiche sowie der Gesamtlaufzeit für verschiedene Werte von M und n. Können Ihre theoretischen Ergebnisse in der Praxis bestätigt werden? Was ist die Konstante (z.B. in Mikrosekunden) vor dem n log n-Term bei der wirklichen Laufzeit? Implementierungsanforderungen: Es sollen zwei ausführbare Programme erstellt werden: Mergesort und MMergesort, die jeweils den entsprechenden Algorithmus auf die Eingabe anwenden und die sortierte Folge in eine Ausgabedatei schreiben. Die Eingabe soll aus einer Datei eingelesen werden. Der Dateiname wird als Kommandozeilenparameter an das Programm gegeben. Die Datei enthält in jeder Zeile eine Zahl, dabei beschränken wir uns auf die ganzen Zahlen. Die Ausgabe erfolgt im gleichen Format in die Datei mit gleichem Namen erweitert um das Suffix “.sorted”. 3. Aufgabe (8 Punkte) Betrachten Sie folgenden Algorithmus zur Berechnung der n-ten Fibonacci-Zahl Fn : Algorithmus Fib(n) if (n=0 || n=1) then return 1 else return Fib(n-1)+Fib(n-2) 1. Bestimmen Sie die Platzkomplexität des Algorithmus unter dem EKM. √ 2. Zeigen Sie, dass die Laufzeit des Algorithmus unter dem EKM Ω(( 1+2 5 )n ) ist. 3. Entwickeln Sie einen Algorithmus der Laufzeit O(n) zur Berechnung von Fn . 4. Entwickeln Sie einen Algorithmus der Laufzeit O(log n) zur Berechnung von Fn . an an−1 1 1 Hinweis: Beachten Sie, dass =M wobei M = an−1 an−2 1 0 Abgabe: 30.10.2006, vor der Vorlesung