DAP2 Präsenzübung 8
Transcription
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