Christian Sohler Paderborn, den 8. Juni 2007
u.v.a. Abgabe 18. Juni 2007
Ubungen zur Vorlesung ¨
Datenstrukturen und Algorithmen SS 2007
Blatt 7
AUFGABE 23:
Wir betrachten max-Heaps.
a) Bauen Sie aus dem Array A = [7,10,8,5,25,2,3,23,17] einen max-Heap auf.
b) Zeigen Sie, dass in jedem Unterbaum eines max-Heaps das gr¨oßte Element an der Wurzel des Unterbaums steht.
AUFGABE 24:
Beweisen oder widerlegen Sie die folgenden Behauptungen.
a) FallsA aufsteigend sortiert ist, so besitzt A die min-Heap-Eigenschaft.
b) Besitzt A die min-Heap-Eigenschaft, dann ist A auch aufsteigend sortiert.
AUFGABE 25:
Wir betrachten eine Verallgemeinerung der Probleme Minimumsuche und Zweit-kleinstes- Element, und zwar das k-kleinste-Elemente-Problem.
Eingabe: Eine Folge vonn Zahlen (x1, x2, . . . , xn) und ein k∈N mit k ≤n.
Ausgabe: Eine aufsteigend sortierte Folge (y1, y2, . . . , yk) der k kleinsten Elemente aus der Eingabe-Folge (x1, x2, . . . , xn).
Geben Sie einen Algorithmus im Pseudocode an, der das Problem k-kleinste-Elemente in Laufzeit O(nlogk) l¨ost. Analysieren Sie Ihren Algorithmus.
Hinweise: Verwenden Sie Heaps. Es gen¨ugt nicht, wenn ihr Algorithmus im worst-caseO(n·k) oder O(nlogn) ben¨otigt.
AUFGABE 26:
Betrachten Sie den folgenden Algorithmus zum Aufbau eines max-Heaps aus einem beliebigen Array A.
Build-Max-Heap’(A):
1: heap-size[A]←1
2: for i←2 to length[A] do
3: Max-Heap-Insert(A, A[i])
Max-Heap-Insert(A, key):
1: heap-size[A]← heap-size[A] + 1
2: A[heap-size[A]]←key
3: i←heap-size[A]
4: while i >1 and A[P arent(i)]< A[i] do
5: A[i]↔A[P arent(i)]
6: i←P arent(i)
a) Illustrieren Sie die Operationen vonBuild-Max-Heap’(A) am Beispiel des Arrays A = [7,10,8,5,25,2,3,23,17].
b) Vergleichen Sie nunBuild-Max-Heap’(A) mit dem AlgorithmusBuild-Max-Heap(A) aus der Vorlesung. Erstellen beide Methoden den gleichen Heap, wenn sie mit dem gleichen Array A gestartet werden? Beweisen Sie die Gleichheit oder geben Sie ein Gegenbeispiel an!
c) Zeigen Sie, dass Build-Max-Heap’(A) in Laufzeit O(n·logn) einen max-Heap auf- baut. Beweisen Sie dazu die Korrektheit des Algorithmus und leiten Sie seine Laufzeit her.