1. ¨Ubung zur Vorlesung Höhere Algorithmik

Werbung
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
Herunterladen