SoSe 2015 C. Sohler J. Flake, A. Krivo²ija B. Rudak, V.Volz DAP2 Heimübung 9 Ausgabedatum: 29.05.15 Abgabedatum: Fr. 05.06. (Mo. 08.06. für Gruppen 26-31) 12 Uhr Aufgabe 9.1 (5 Punkte): (AVL-Bäume) a) Gegeben sei folgender AVL-Baum T . 2 1 10 3 11 Pegen Sie die folgenden Elemente in der angegebenen Reihenfolge in die Datenstruktur ein: 9, 4, 8, 5, 7, 6 Geben Sie den Baum T nach jeder Operation an. Geben Sie auÿerdem an, an welchem Knoten und in welche Richtung rotiert wird. Lösung: • Wir fügen 9 ein. Rechtsrotation in 10, Linksrotation in 2. 3 2 • Wir fügen 4 ein. 1 10 9 1 11 3 2 10 1 9 11 4 • Wir fügen 8 ein. Linksrotation in 4, Rechtsrotation 9. 3 2 10 1 4 • Wir fügen 5 ein. Rechtsrotation in 10. 8 9 3 2 8 1 • 4 Wir fügen 7 ein. Linksrotation in 4. 10 5 9 11 3 2 1 11 8 5 10 4 7 9 11 • Wir fügen 6 ein. Rechtsrotation in 8, Linksrotation in 3. 2 5 3 8 2 4 7 10 6 9 11 1 b) Gegeben sei folgender AVL-Baum T . 0 7 4 9 2 5 8 1 3 6 10 11 Löschen Sie die folgenden Elemente in der angegebenen Reihenfolge in die Datenstruktur ein: 6, 5, 7, 9 Geben Sie den Baum T nach jeder Operation an. Geben Sie auÿerdem an, an welchem Knoten und in welche Richtung rotiert wird und durch welches Element das Gelöschte ersetzt wurde. 0 Lösung: • Wir löschen 6. 7 4 9 2 5 8 1 3 10 11 3 • Wir löschen 5. Rechtsrotation in 4. 7 2 9 1 • 4 8 3 Wir löschen 7. Ersetzen durch 4. 11 4 2 9 1 • 10 3 8 10 Wir löschen 9. Ersetzen durch 8. Linksrotation in 8. 4 2 1 11 10 3 8 11 (Datenstrukturen) Entwerfen Sie eine Datenstruktur, die alle folgenden Operationen in O(1) unterstützt. In dieser Aufgabe sind alle Elemente aus dem Wertebereich {1, . . . , k}, und k ist eine Konstante. Aufgabe 9.2 (5 Punkte): : Fügt ein Element x in die Datenstruktur ein. • LöscheNeuestes: Löscht unter allen Elementen in der Datenstruktur das, was zuletzt eingefügt wurde. • LöscheÄltestes: Löscht unter allen Elementen in der Datenstruktur das, was am frühesten eingefügt wurde. • Zähle(x): Gibt zurück, wie oft x aktuell in der Datenstruktur ist. 4 • Einfügen(x) Beispiel: Nach der Sequenz Einfügen(8), Einfügen(8), Einfügen(3), Einfügen(8), Einfügen(5), LöscheÄltestes, Zähle(8) soll die Datenstruktur bei der letzten Operation 2 zurückliefern, da die 8 noch zweimal in der Datenstruktur ist. Für die volle Punktzahl wird erwartet, dass alle Operationen eine Worst-Case Laufzeit von O(1) haben. Beschreiben Sie in wenigen kurzen Sätzen, wie Ihre Datenstruktur aufgebaut ist und wie die angegeben Operationen realisiert werden. Hierbei ist kein Pseudocode gefordert. Machen Sie deutlich, dass die Datenstruktur korrekt arbeitet und alle Operationen Worst-Case-Laufzeit O(1) haben. Lösung: Die gesuchte Datenstruktur ist von eine doppel verkettete Liste A mit Zeigern Head und Tail auf dem ersten bzw. letzten Element; sowie ein Array B[1..k] gebaut. Da k eine Konstante ist, ist das möglich zu denieren. Im Feld B[x] des Arrays B wird die Anzahl der Auftretens von x in A gespeichert. Jedes Element von A hat ein Schlüssel (Wert), und zwei Zeigern prev und next. Am Anfang ist die Liste A leer (head=tail=null) und B[i] = 0 für alle 1 ≤ i ≤ k . Jetzt beschreiben wir, wie die verlangten Operationen in der Laufzeit O(1) ausgeführt werden: • Einfügen(x): Ein Element x wird in die Liste in O(1) eingefügt, so dass der Zeiger tail jetzt auf x zeigt (O(1)), und B[x] wird um 1 erhöht (O(1)). • LöscheNeuestes: Wir löschen das letzten Element tail mit dem Schlüssel x =Wert(tail) (O(1)). Der Zeiger tail wird nach tail→prev aktualisiert (O(1)) und B[x] wird um 1 verringert (O(1)). • LöscheÄltestes: Wie für LöscheNeuestes, löschen wir das ersten Element head mit dem Schlüssel x = Wert(head) (O(1)). Der Zeiger head wird nach head→next aktualisiert (O(1)) und B[x] wird um 1 verringert (O(1)). • Zähle(x): Da B[x] die Anzahl von x in A enthält, geben wir B[x] zurück (O(1)). Es ist klar, dass alle angegebene Operationen eine Worst-Case Laufzeit von O(1) haben. 5
© Copyright 2024