Ubungsblatt 9

Werbung
Algorithmen und Programmierung
Fachgebiet Telematik/Rechnernetze
WS 12/13
Prof. Dr.-Ing. Günter Schäfer
Übungsblatt 9
Aufgabe 1
5 Punkte
Zeigen Sie anhand der Zahlenfolge 20, 14, 17, 7, 15, 29, 16 die Sortierung mit
Insertion-Sort Selection-Sort
Bubble-Sort
Quick-Sort
Merge-Sort
Veranschaulichen Sie die Verfahren durch Angabe aller notwendigen Schritte!
Aufgabe 2
6 Punkte
Gegeben sind die zwei Sequenzen X = {x1 , . . . , xn } und A = {a1 , . . . , an } als Arrays,
wobei die Sequenz X beliebige natürliche Zahlen in unsortierter Reihenfolge und
A unterschiedliche natürliche Zahlen von 1 bis n enthält (a1 , . . . , an ist also eine
Permutation von 1,2,. . . ,n). Entwickeln Sie einen Sortieralgorithmus, der nur auf die
zwei gegebenen Arrays zugreift und kein weiteres Array anlegt, der im Schnitt in
O(n log n) die Sequenz X in der durch A angegebenen Reihenfolge sortiert: Für jedes
i soll xi an der durch ai festgelegten Stelle des sortierten Arrays stehen. Die Sequenzen
X = 32, 5, 2, 12 und A = 4, 1, 3, 2 als Beispiel angenommen, soll der Algorithmus
folglich das Array X = 5, 12, 2, 32 erzeugen. Geben Sie den Algorithmus als JavaProgramm mit Kommentaren an.
Aufgabe 3
3 Punkte
Die Fibonacci-Folge ist eine unendliche Folgen von Zahlen, bei der sich die jeweils
folgende Zahl durch Addition ihrer beiden vorherigen Zahlen ergibt. Es gilt f (0) = 0
und f (1) = 1.
a) Geben Sie einen applikativen Algorithmus f (n) an, der die n-te Fibonacci-Zahl
(n ≥ 0) nach der angegebenen Definition berechnet.
b) Für Fibonacci-Zahlen gilt weiterhin: f (2n) = f (n + 1)f (n) + f (n)f (n − 1) und
f (2n + 1) = f (n)2 + f (n + 1)2 . Entwickeln Sie einen applikativen Algorithmus
zur Berechnung der Fibonacci-Zahlen, der statt der vorherigen Definition auf
diese Gleichungen zurückgreift.
Aufgabe 4
4 Punkte
Folgender Algorithmus berechnet die ganzzahlige Division mit Rest.
DIV: var a, b, d, r : int;
input a, b;
r := a;
d := 0;
while r ≥ b do
r := r - b;
d := d + 1
od
output d, r.
Geben Sie geeignete Vor- und Nachbedingungen {VOR} und {NACH}, sowie eine Schleifeninvariante {P} an und weisen Sie so die Korrektheit des Algorithmus nach.
Aufgabe 5
4 Punkte
Entwerfen Sie einen divide-and-conquer“ Algorithmus zur Bestimmung des größten
”
und kleinsten Elements eines Sets von Zahlen. Der Algorithmus sollte für n = 2k mit
höchstens 3n/2 Vergleichen auskommen. Können Sie angeben, warum dieser Algorithmus weniger als die trivialen 2n − 3 Vergleiche braucht?
Herunterladen