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?