Übungsblatt 5

Werbung
Rev. 1, 05.05.2016
TU Ilmenau, Fakultät für Informatik und Automatisierung
FG Komplexitätstheorie und Effiziente Algorithmen
Univ.-Prof. Dr. M. Dietzfelbinger, Dr. C. Mattern, M.Sc. Stefan Walzer
http://www.tu-ilmenau.de/iti/lehre/lehre-ss-2016/aud/
Algorithmen und Datenstrukturen SS 2016 – Übung 5
Besprechung: 19. Kalenderwoche (9. Mai - 13. Mai 2016)
Aufgabe 1 (Prä-Order / Postorder-Konvertierung)1
Gibt man die Schlüssel aus einem binären Suchbaum T = (Tl , x, Tr ) in Präorder- bzw. Postorder-Reihenfolge
aus, entstehen folgende Ausgaben:
Präorder:
Postorder:
x
Schlüssel aus Tl in Präorder
Schlüssel aus Tl in Postorder
Schlüssel aus Tr in Präorder
Schlüssel aus Tr in Postorder
x
Letzte Woche haben Sie einen rekursiven Algorithmus implementiert, der eine Präorder-Reihenfolge in
eine Postorder-Reihenfolge umwandelt. Diese Woche machen wir das nochmal, aber schlauer.
(a) Implementieren Sie eine rekursive Prozedur pre2post-rec mit folgenden Eigenschaften:
Eingabe: Array A[1..n] von Schlüsseln, Array B von Schlüsseln, Index i, Schlüssel s.
Ausgabe: m := min({k | i ≤ k ≤ n, A[k] ≥ s} ∪ {n + 1})
Wirkung: Das Teilarray A[i, ..., m − 1] wird als Präorder-Reihenfolge eines binären Suchbaums
interpretriert, und in Postorder-Reihenfolge konvertiert hinten an das Array B angefügt.
Die von außen Nutzbare Methode pre2post(A) soll dann einfach wie folgt implementiert sein:
pre2post(A[1..n])
1
2
3
B ← empty()
pre2post-rec(A, B, 1, ∞)
return B
Die Ausführung des Rumpfes von pre2post (ohne rekursive Aufrufe) soll konstante Kosten haben.
(b) Was ist die Laufzeit von Ihrem Algorithmus? Begründen Sie ihre Antwort.
Aufgabe 2 (Rot-Schwarz-Bäume)
Ein (linksgeneigter) Rot-Schwarz-Baum ist ein binärer Suchbaum, in dem jede Kante mit der Farbe rot
oder schwarz eingefärbt ist, wobei folgende Regeln eingehalten werden:
(i) Kanten zu (leeren!) Blättern sind schwarz.
1 Hurrah!
Jetzt in Linearzeit!
2
Algorithmen und Datenstrukturen SS 2016 – Übung 5
(ii) Auf keinem Weg im Baum folgen zwei rote Kanten aufeinander.
(iii) Wenn ein Knoten nur eine rote Ausgangskante hat, so führt diese zum linken Kind.
(iv) Auf jedem Weg von der Wurzel zu einem Blatt liegen gleich viele schwarze Kanten.
Die Schwarz-Tiefe b(v) eines Knotens v in einem Rot-Schwarz-Baum T ist die Anzahl der schwarzen
Kanten auf dem Weg von v zu einem Blatt; die Schwarz-Tiefe b(T ) des Baumes T ist die Schwarz-Tiefe
der Wurzel von T . Zeigen Sie:
(a) Ein Rot-Schwarz-Baum T mit Schwarz-Tiefe b(T ) hat mindestens 2b(T ) − 1 innere Knoten.
(b) Die Tiefe d(T ) eines Rot-Schwarz-Baums T mit n inneren Knoten ist O(log n).
Aufgabe 3 (Tiefe von 2-3-Bäumen)
Zeigen Sie, dass folgende Aussagen für einen 2-3-Baum T der Tiefe h (Level 0, 1, . . . , h) gelten:
(a) T besitzt mindestens 2h+1 − 1 Knoten und mindestens 2h+1 − 1 Schlüssel.
(b) T besitzt höchstens
3h+1 −1
2
Knoten und höchstens 3h+1 − 1 Schlüssel.
(c) Welche Aussagen über die Tiefe h im Zusammenhang mit der Knotenanzahl n können Sie ableiten?
Aufgabe 4 (AVL-Bäume mit Größenzähler)
Ein AVL-Baum habe in jedem Knoten v einen zusätzlichen Zähler size, der die Anzahl der Knoten in
dem bei v gewurzelten Unterbaum angibt.
• Implementieren sie die Operation AVL countLess(T, x), die für einen gegebenen Schlüssel x die
Anzahl der im Baum T enthaltenen Schlüssel berechnet, die kleiner als x sind. Welche Laufzeit
hat ihre Implementierung?
• Erklären Sie, wie sie die Operationen insert und delete Anpassen müssen, wenn die Zähler aktuell
gehalten werden soll. (Gehen Sie zunächst davon aus, dass keine Rotationen nötig sind um die
Balance aufrecht zu erhalten.)
• Implementieren Sie nun die Operation rotateR und rotateLR neu, sodass alle Zähler aktuell gehalten werden.
Herunterladen