TU Ilmenau, Fakultät IA Institut TI, FG Komplexitätstheorie und Effiziente Algorithmen Univ.-Prof. Dr. Martin Dietzfelbinger Dipl.-Ing. Christopher Mattern http://www.tu-ilmenau.de/iti/lehre/lehre-ss-2013/aud/ Algorithmen und Datenstrukturen“ ” Übungsblatt 9, SS 2013 Besprechung: 24. Kalenderwoche Aufgabe 1 (AVL-Bäume, identisch zu Aufgabe 2 von Blatt 8, bitte durch Aufgabe 5 ersetzen!) Gegeben ist die Folge 1 12 2 5 4 8 6 11 3 13 10 7 9 14 15 16 von 16 Schlüsseln. (a) Fügen Sie die Schlüssel nacheinander in einen (anfangs leeren) AVL-Baum ein und zeichnen Sie den Baum vor und nach jeder Rotation! (b) Finden Sie eine Einfügereihenfolge der Schlüssel, die den gleichen Baum wie in (a) ohne Rotationen erzeugt! (c) Löschen Sie die Schlüssel 1, 12, 16, 7 und 6 und zeichnen Sie den Baum vor und nach jeder Rotation! 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: 1. Kanten zu (leeren!) Blättern sind schwarz. 2. Auf keinem Weg im Baum folgen zwei rote Kanten aufeinander. 3. Wenn ein Knoten nur eine rote Ausgangskante hat, so führt diese zum linken Kind. 4. 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 (Codierungsbäume) Ein Präfixcode zur Darstellung von Zeichen aus einem endlichen Alphabet Σ, |Σ| > 1, sei als binärer Codierungsbaum T gegeben. Jedes Blatt von T ist umkehrbar eindeutig mit einem Zeichen x aus Σ markiert. Alle Kanten zu einem linken Kind sind mit 0 markiert und alle Kanten zu einem rechten Kind sind mit 1 markiert. • Das Codewort code(x) zum Zeichen x erhält man, indem man die Kantenmarkierungen des Weges von der Wurzel zum Blatt mit Zeichen x hintereinander reiht. • Die Länge len(x) des Codewortes von x entspricht der Länge des Weges von der Wurzel zum Blatt mit Zeichen x, also der Tiefe dieses Blattes. 2 Algorithmen und Datenstrukturen“ ” Übungsblatt 9, SS 2013 Beispiel: Σ = {A, B, C}, code(B) = 10, len(B) = 2 T : 0 1 A 0 B 1 C (a) Geben Sie einen Algorithmus in Pseudocode an, der auf Eingabe T und Σ für jedes Zeichen x ∈ Σ das Codewort code(x) und die Länge des Codewortes len(x) berechnet und jeweils in den Arrays C[1..|Σ|] und L[1..|Σ|] speichert! (b) Geben Sie einen Algorithmus in Pseudocode zum Dekodieren an! Die kodierte Zeichenkette ist in einem Array A[1..n] gegeben (jede Zelle speichert ein Bit). (c) Welche Laufzeiten in Θ-Notation haben die Algorithmen aus den Aufgaben (a) und (b)? Aufgabe 4 (Einfügen in 2-3-Bäume) Fügen Sie die folgende Sequenz von Schlüsseln in einen anfangs leeren 2-3-Baum T ein und zeichnen Sie T vor und nach jeder Reparaturoperation! 1 12 2 5 4 8 6 11 3 13 10 7 9 14 15 16 Aufgabe 5 (Tiefe von 2-3-Bäumen, später hinzugefügt!) 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?