DAP2 Präsenzübung 8

SoSe 2015
C. Sohler
J. Flake, A. Krivo²ija
B. Rudak, V.Volz
DAP2 Präsenzübung 8
Besprechung: 03.06.2015 05.06.2015
Präsenzaufgabe 8.1:
(Heaps)
Wir betrachten Halden (Heaps), die schon uns aus DAP1 bekannt sind. Ein Heap A wird in
einem Array gespeichert, mit zwei Attributen length(A) und heapsize(A) (siehe Foliensatz 16
aus SS2014). Für jeden Knoten des Heaps gilt die Heapeigenschaft, dass A[parent(x)] ≥ A[x].
Wir wissen dass die Wurzel A[1] ist, sowie P arent(x) = bx/2c, lef t(x) = 2x und right(x) =
2x + 1.
Der Vollständigkeit halber ist im Folgenden der Pseudocode des bekannten Algorithmus Heapsort,
der ein Array der Länge n in O(n log n) Zeit sortiert, gegeben.
1
2
3
4
5
Heapsort(A):
Build-Heap(A)
for i ← length(A) DownTo 1 do
A[1] ↔ A[i]
heapsize(A) ← heapsize(A) − 1
Heapify(A,1)
Die Hilfsfunktionen Heapify und Build-Heap sind:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
Heapify(A, i):
` ← lef t(i)
r ← right(i)
if ` ≤ heapsize[A]
largest ← `
And A[`] > A[i] then
else
if
if
largest ← i
r ≤ heapsize[A] And A[r] > A[largest]
largest ← r
largest 6= i then
A[i] ↔ A[largest]
Heapify(A,largest)
BuildHeap(A):
heapsize ← length(A)
for ← blength(A)/2c DownTo 1
Heapify(A,i)
a)
then
do
(i) Erfüllt ein Array, das in absteigend sortierter Reihenfolge vorliegt, die Heapeigenschaft?
1
(ii) Erfüllt das Array A = h28, 23, 27, 13, 23, 22, 27, 9, 11, 10i die Heapeigenschaft?
b) Sortieren Sie das Array
A = h26, 23, 31, 28, 16, 33, 14, 2, 29, 21i
mit Hilfe von Heapsort. Veranschaulichen Sie jeden der einzelnen Iterationsschritte entweder durch die Repräsentation des Heaps als Binärbaum oder als Array. Machen Sie
jeweils die verarbeiteten Elemente der gewählten Repräsentation optisch kenntlich.
Präsenzaufgabe 8.2:
(Suchbäume und Heaps)
Wir wollen eine Menge an Tupeln (jeder Schlüssel s ∈ A × B besteht aus einem Element aus
der Menge A und einem Element aus B ) in einer speziellen Datenstruktur D abspeichern. D
soll dabei folgende Eigenschaften erfüllen:
• Bezüglich der Elemente von A soll D ein MinHeap sein.
• Bezüglich der Elemente von B soll D ein binären Suchbaum sein.
Anschaulich kann man sich die Struktur von D mit folgendem Beispiel verdeutlichen. Gegeben
seien die Schlüssel
M = {(11, `), (13, o), (57, c), (97, q), (83, h), (41, t), (31, e)}.
Dann erfüllt folgende Datenstruktur die für D geforderte Eigenschaft:
(11, `)
(31, e)
(57, c)
(13, o)
(83, h)
(41, t)
(97, q)
Beweisen Sie, dass D immer existiert und immer eindeutig bestimmt ist.
2