3 3 Spezielle Bäume 3.1 Spezielle Bäume 3.2 Ausgeglichene binäre Bäume 3.3 AVL-Bäume 3.4 Rot-Schwarz-Bäume 3.5 B-Bäume 3.6 Digitale Bäume 41 3 Spezielle Bäume Teil III Spezielle Bäume Überblick Spezielle Bäume Ausgeglichene binäre Bäume AVL-Bäume Rot-Schwarz-Bäume B-Bäume Digitale Bäume Saake/Schallehn Algorithmen & Datenstrukturen II 3–1 Mehr zu Bäumen ◮ ausgeglichene binäre Bäume ◮ ◮ Rot-Schwarz-Baum AVL-Baum ◮ B-Bäume ◮ Digitale Bäume Saake/Schallehn 42 Algorithmen & Datenstrukturen II 3–2 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Ausgeglichene binäre Bäume ◮ Rot-Schwarz ◮ ◮ ◮ Ansatz: total ausgegelichen aber nicht binär ist möglich nicht binären Baum als binären Suchbaum kodieren AVL ◮ binär und voll ausgeglichen ist nicht möglich ◮ ◮ abgeschwächtes Kriterium für Ausgeglichenheit relativ raffiniertes Ausgleichen beim Einfügen trotzdem notwendig Saake/Schallehn Algorithmen & Datenstrukturen II 3–3 Ausgeglichene Bäume ◮ Wie verhindert man daß Suchbäume entarten?? ◮ jeweils ausgleichen ist zu aufwendig: 5 3 5 3 2 7 4 6 7 2 →insert(1) 4 6 →ausgleichen 1 4 2 1 ◮ 6 3 5 7 ... diese Folge zeigt, daß beim Ausgleichen eventuell jeder Knoten bewegt werden müßte! Saake/Schallehn Algorithmen & Datenstrukturen II 3–4 Lösungsideen ◮ abgeschwächtes Kriterium für ausgeglichene Höhe ◮ ◮ Beispiel: AVL Bäume ausgeglichene Höhe, aber unausgeglichener Verzweigungsgrad ◮ direkte Realisierung als Mehrwegbäume ◮ Kodierung als binäre Bäume ◮ ◮ Saake/Schallehn Beispiel: B-Bäume Beispiel: Rot-Schwarz-Bäume Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 3–5 43 3 Spezielle Bäume AVL-Bäume ◮ ◮ AVL für Adelson-Velskii und Landis (russische Mathematiker) binäre Suchbäume mit AVL-Kriterium: für jeden (inneren) Knoten gilt: Höhe des linken und rechten Teilbaums differieren maximal um 1 ◮ Bemerkung: es reicht nicht dieses nur für die Wurzel zu fordern! ◮ Beide Teilbäume der Wurzel könnten entartet sein. Saake/Schallehn Algorithmen & Datenstrukturen II 3–6 AVL-Eigenschaft am Beispiel 7 5 2 1 2 8 4 7 3 1 8 4 5 3 AVL Saake/Schallehn nicht AVL Algorithmen & Datenstrukturen II 3–7 Höhe von AVL-Bäumen Wieviel Knoten kmin hat ein AVL-Baum der Höhe h mindestens? ◮ rekursive Beziehung: ◮ ◮ ◮ ◮ ◮ kmin (0) = 1 kmin (1) = 2 kmin (n) = kmin (n − 1) + kmin (n − 2) + 1 wächst vergleichbar der Fibonacci-Reihe! exakter Wert (Vorsicht - nicht einfach zu berechnen!): HAVL (n) ≤ 1.44 log(n + 2) − 0.328 Saake/Schallehn 44 Algorithmen & Datenstrukturen II 3–8 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Einfügen in AVL-Bäume Einfügen eines Schlüssels mit üblichen Algorithmus Danach kann die AVL-Eigenschaft verletzt sein: ◮ ◮ ◮ ◮ ◮ Balance = left.height − right.height AVL-Eigenschaft: balance ∈ {−1, 0, +1} nach Einfügen: balance ∈ {−2, −1, 0, +1, +2} reparieren mittels Rotation und Doppelrotation ◮ Saake/Schallehn Algorithmen & Datenstrukturen II 3–9 Fallunterscheidung beim Einfügen Verletzung der AVL-Eigenschaft tritt ein bei 1. Einfügen in linken Teilbaum des linken Kindes 2. Einfügen in rechten Teilbaum des linken Kindes 3. Einfügen in linken Teilbaum des rechten Kindes 4. Einfügen in rechten Teilbaum des rechten Kindes 1 und 4 sowie 2 und 3 sind symmetrische Problemfälle Saake/Schallehn Algorithmen & Datenstrukturen II 3–10 Einfache Rotation +2 0 k2 k1 0 +1 k2 k1 Z X Z Y Y X Rotation mit linkem Kind nach rechts, analoge Operation nach links (spiegelbildlich) Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 3–11 45 3 Spezielle Bäume Doppelrotation 0 +2 k2 k3 -1 0 / +1 k1 0 / -1 k1 k3 * k2 D A A B B C D C Doppelrotation mit linkem Kind nach rechts, analoge Operation nach links (spiegelbildlich) Saake/Schallehn Algorithmen & Datenstrukturen II 3–12 Rotationen am Beispiel insert 3, 2, 1 → einfache Rotation nach rechts (2,3) insert 4, 5 → einfache Rotation nach links (4,3) insert 6 → einfache Rotation (Wurzel) nach links (4,2) insert 7 → einfache Rotation nach links (6,5) insert 16, 15 → Doppelrotation nach links (7,15,16) insert 13 + 12 + 11 + 10 → jeweils einfache Rotationen insert 8, 9 → Doppelrotation nach rechts Saake/Schallehn Algorithmen & Datenstrukturen II 3–13 Beispielrotationen (gesamt) 3 2 3 1 3 R 3 4 2 2 2 1 2 3 1 3 1 5 L 2 1 1 3 4 6 2 4 1 3 4 R 2 2 4 5 3 1 5 R 4 2 1 5 16 4 2 6 3 5 6 3 6 5 7 4 1 4 6 2 6 3 1 7 5 3 5 15 DR 4 6 2 1 3 5 7 16 7 4 6 2 7 1 16 3 15 5 7 16 15 Saake/Schallehn 46 Algorithmen & Datenstrukturen II 3–14 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Beispielrotationen I 3 2 3 1 3 R 3 2 2 4 2 1 2 3 1 3 1 5 L 2 1 2 1 3 4 6 4 2 1 3 4 R 5 4 2 4 3 1 5 5 6 3 6 5 Saake/Schallehn Algorithmen & Datenstrukturen II 3–15 Beispielrotationen II 7 R 4 2 1 5 6 3 16 4 2 1 3 4 2 6 1 7 5 6 3 7 5 16 7 15 DR 4 2 1 6 3 5 4 2 7 1 6 3 16 15 5 7 16 15 Saake/Schallehn Algorithmen & Datenstrukturen II 3–16 Rotationen in Einzelfällen ◮ Verletzung der AVL-Eigenschaft tritt ein bei ◮ ◮ ◮ ◮ Einfügen in linken Teilbaum des linken Kindes → Rotation mit linkem Kind Einfügen in rechten Teilbaum des linken Kindes → Doppelrotation mit linkem Kind Einfügen in linken Teilbaum des rechten Kindes → Doppelrotation mit rechtem Kind Einfügen in rechten Teilbaum des rechten Kindes → Rotation mit rechtem Kind Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 3–17 47 3 Spezielle Bäume 2-3-4-Bäume und Rot-Schwarz-Bäume ◮ Idee: ausgeglichene Bäume mit variablen Verzweigungsgrad ◮ Ausgeglichenheit wird durch Einfügeoperation gewähleistet ◮ Implementierung durch Binärbäume Saake/Schallehn Algorithmen & Datenstrukturen II 3–18 2-3-4-Bäume 1 2 4 5 8 6 7 9 neben binären Knoten (2-Knoten) auch 3-Knoten und 4-Knoten Saake/Schallehn Algorithmen & Datenstrukturen II 3–19 Operationen in 2-3-4-Bäume ◮ ◮ Suche analog zu binären Suchbäumen Einfügen: ◮ ◮ ◮ ◮ ◮ erfolglose Suche liefert Blattknoten b ist b ein 2- oder 3-Knoten: Einfügen ist b ein 4-Knoten: Aufteilen (“split”), mittleres Element nach oben ziehen Splitten kann sich bis zur Wurzel fortpflanzen! (bottom-up) Alternativ: Beim Einfügen werden vorsorglich alle 4-Knoten auf dem Pfad gesplittet (top-down) Saake/Schallehn 48 Algorithmen & Datenstrukturen II 3–20 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Binäre Repräsentation von 2-3-4-Bäumen Rot-Schwarz-Bäume (red-black, kurz RB-Bäume) Saake/Schallehn Algorithmen & Datenstrukturen II 3–21 2-3-4-Bäume als RB-Bäume Rot-Schwarz-Bäume sind binäre Suchbäume mit 1. Jeder Knoten ist entweder rot oder schwarz. 2. Jeder Blattknoten (Null-Knoten) ist per Definition schwarz. 3. Die Kinder jedes roten Knotens sind schwarz. 4. Für jeden Knoten k gilt: Jeder Pfad von k zu einem Blatt enthält die gleiche Anzahl schwarze Knoten. Saake/Schallehn Algorithmen & Datenstrukturen II 3–22 Einfügen in RB-Bäumen ◮ Splitten der 4-Knoten : top-down, nichtrekursiv ◮ zwei Hauptfälle unterscheiden 1. der 4-Knoten hängt an einem 2-Knoten 2. der 4-Knoten hängt an einem 3-Knoten Unterfälle: ◮ ◮ Saake/Schallehn Teilbaum hängt links oder rechts Teilbaum hängt in der Mitte Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 3–23 49 3 Spezielle Bäume Splitten im RB-Baum: Fall 1 p p Umfärben n x n y x y 4-Knoten an 2-Knoten Saake/Schallehn Algorithmen & Datenstrukturen II 3–24 Splitten im RB-Baum: Fall 2a Umfärben g p v p w n w n y x g v y x Rotation p g n x y v w 4-Knoten unter 3-Knoten links oder rechts Saake/Schallehn Algorithmen & Datenstrukturen II 3–25 Splitten im RB-Baum: Fall 2b g w w g Rotation y 50 n g p w x y v x 4-Knoten unter 3-Knoten mittig falsch im Buch ! Saake/Schallehn y Rotation v n v n x y x w p v n p g Umfärben p Algorithmen & Datenstrukturen II 3–26 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Beispiel: Einfügen im RB-Baum I great 7 4 grand 14 parent 2 5 1 6 3 15 9 8 11 10 Saake/Schallehn node 12 Algorithmen & Datenstrukturen II 3–27 Beispiel: Einfügen im RB-Baum II (1) Umfärben & Rotieren node parent 8 grand 14 11 parent 15 11 9 (2) Rotieren & Umfärben 10 12 (3) Einfügen 10 Saake/Schallehn 14 grand 9 8 12 node Algorithmen & Datenstrukturen II 15 13 3–28 B-Bäume Idee: Baumhöhe vollständig ausgeglichen, aber Verzweigungsgrad variiert ◮ ◮ Ausgangspunkt: ausgeglichener, balancierter Suchbaum Ausgeglichen oder balanciert: alle Pfade von der Wurzel zu den Blättern des Baumes gleich lang ◮ mehrere Zugriffsattributwerte auf einer Seite ◮ Mehrweg-Bäume Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 3–29 51 3 Spezielle Bäume Prinzip des B-Baumes ◮ B-Baum von Bayer und McCreight ◮ dynamischer, balancierter Suchbaum ◮ B für balanciert, breit, buschig, Bayer, NICHT: binär Mehrwegebaum wäre völlig ausgeglichen, wenn 1. alle Wege von der Wurzel bis zu den Blättern gleich lang 2. jeder Knoten gleich viele Einträge vollständiges Ausgleichen wäre zu aufwendig, deshalb B-Baum-Kriterium: Jede Seite außer der Wurzelseite enthält zwischen m und 2m Schlüsselwerte Saake/Schallehn Algorithmen & Datenstrukturen II 3–30 Eigenschaften eines B-Baumes ◮ ◮ ◮ ◮ m heißt Ordnung des B-Baums i Schlüsselwerte (m ≤ i ≤ 2m) im inneren Knoten → i + 1 Unterbäume Höhe des B-Baums bei minimaler Füllung: logm (n) n Datensätze ⇒ in logm (n) Seitenzugriffen von der Wurzel zum Blatt Vorsicht: in einigen Büchern wird als Ordnung der maximale Verzweigungsgrad bezeichnet, also hier 2m + 1! Saake/Schallehn Algorithmen & Datenstrukturen II 3–31 Definition B-Baum B-Baum der Ordnung m: 1. Jede Seite enthält höchstens 2m Elemente. 2. Jede Seite, außer der Wurzelseite, enthält mindestens m Elemente. 3. Jede Seite ist entweder eine Blattseite ohne Nachfolger oder hat i + 1 Nachfolger, falls i die Anzahl ihrer Elemente ist. 4. Alle Blattseiten liegen auf der gleichen Stufe. Saake/Schallehn 52 Algorithmen & Datenstrukturen II 3–32 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Einfügen in einen B-Baum: Ein Beispiel ◮ ◮ Buchstaben des Wortes “ALGORITHMUS” der Reihe nach in einen B-Baum der Ordnung 1 einfügen Tafel ! Saake/Schallehn Algorithmen & Datenstrukturen II 3–33 Weiteres Beispiel 1 1 Split 2 5 6 5 1 Split 2 5 1 7 3 2 3 1 5 6 4 2 6 1 4 5 5 7 7 1 6 2 6 4 5 7 7 8 6 4 5 3 7 8 4 6 2 5 3 1 5 1 2 5 2 1 8 Split Saake/Schallehn 2 8 Split 6 4 1 7 2 1 6 2 5 1 7 8 Algorithmen & Datenstrukturen II 3–34 Weiteres Beispiel I 1 1 Split 2 5 6 5 1 Split 2 1 Saake/Schallehn 5 7 1 7 2 5 1 6 2 5 1 6 4 2 6 1 4 5 7 5 2 5 1 8 2 6 1 4 5 Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 2 6 7 7 8 3–35 53 3 Spezielle Bäume Weiteres Beispiel II 3 1 2 3 Split 6 4 5 7 8 1 Split Saake/Schallehn 6 4 5 3 7 8 4 6 2 3 1 2 5 7 8 Algorithmen & Datenstrukturen II 3–36 Suchen in B-Bäumen Startend auf Wurzelseite Eintrag im B-Baum ermitteln, der den gesuchten Schlüsselwert w überdeckt ◮ 25 10 20 2 5 7 8 13 14 15 18 30 40 22 24 Saake/Schallehn 26 27 28 32 35 38 41 42 45 46 Algorithmen & Datenstrukturen II 3–37 Einfügen in B-Bäumen Einfügen eines Wertes w ◮ ◮ ◮ Blattseite suchen passende Seite hat n < 2m Elemente → w einsortieren passende Seite hat n = 2m Elemente → neue Seite erzeugen ◮ ◮ ◮ ◮ ersten m Werte auf Originalseite letzten m Werte auf neue Seite mittleres Element in Vaterknoten nach oben eventuell dieser Prozeß rekursiv bis zur Wurzel ◮ B-Bäume wachsen an der Wurzel! Saake/Schallehn 54 Algorithmen & Datenstrukturen II 3–38 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Löschen in B-Bäumen Problem: bei weniger als m Elementen auf Seite: Unterlauf ◮ ◮ ◮ entsprechende Seite suchen w auf Blattseite gespeichert ⇒ Wert löschen, eventuell Unterlauf behandeln w nicht auf Blattseite gespeichert ⇒ ◮ ◮ ◮ Wert löschen durch lexikographisch nächstkleineres Element von einer Blattseite ersetzen eventuell auf Blattseite Unterlauf behandeln analog Löschen in klassischen Suchbaum! Saake/Schallehn Algorithmen & Datenstrukturen II 3–39 Löschen in B-Bäumen: Unterlauf Unterlaufbehandlung ◮ ◮ Ausgleichen mit einer benachbarten Seite (benachbarte Seite hat n Elemente mit n > m) oder ◮ ◮ ◮ Zusammenlegen zweier Seiten zu einer (Nachbarseite hat n = m Elemente) das passende “mittlere” Element vom Vaterknoten dazu in Vaterknoten eventuell (rekursiv) Unterlauf behandeln → B-Bäume schrumpfen an der Wurzel! Saake/Schallehn Algorithmen & Datenstrukturen II 3–40 Komplexität der Operationen ◮ ◮ ◮ Aufwand beim Einfügen, Suchen und Löschen im B-Baum immer O(logm (n)) Operationen entspricht genau der “Höhe” des Baumes beliebt für sehr große Datenbestände (mit großer Knotengröße): ◮ ◮ ◮ Konkret : Seiten der Größe 4 KB, Zugriffsattributwert 32 Bytes, 8-Byte-Zeiger: zwischen 50 und 100 Indexeinträge pro Seite; Ordnung dieses B-Baumes 50 1.000.000 Datensätze: log50 (1.000.000) = 4 Seitenzugriffe im schlechtesten Fall optimiert Anzahl von der Festplatte in den Hauptspeicher zu transferierenden Blöcke! Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 3–41 55 3 Spezielle Bäume Beispiel für Einfügen und Löschen im B-Baum Einfügen des Elementes 22; Löschen von 22 20 7 10 15 18 26 30 35 40 20 30 7 10 15 18 Saake/Schallehn 22 26 35 40 Algorithmen & Datenstrukturen II 3–42 Praktischer Einsatz der vorgestellten Verfahren ◮ ◮ AVL in Ausbildung und Lehrbüchern Rot-Schwarz-Bäume: Implementierung von Sets und Maps in Java-Bibliothek http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html ◮ B-Bäume “überall im Einsatz” (einfache Einfüge-Algorithmen; Knotengröße an Seitengröße von Hintergrundspeichern optimal anpaßbar) Saake/Schallehn Algorithmen & Datenstrukturen II 3–43 Digitale Bäume ◮ digitale Bäume ◮ ◮ ◮ spezielle (Mehrweg-) Suchbäume feste Verzweigung unabhängig von gespeicherten Schlüsseln nur für Datentypen bei denen eine derartige feste Verzweigung sinnvoll ist ◮ ◮ ‘digital’ von ‘Finger’ (10 Finger → Digitalbaum für numerische Zeichenketten) Saake/Schallehn 56 insbesondere: Zeichenketten über festem Alphabet, Verzweigung nach jeweils erstem Buchstaben Algorithmen & Datenstrukturen II 3–44 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Digital- und Präfixbäume ◮ ◮ ◮ B-Bäume: Probleme bei variabel langen Zeichenketten als Schlüssel Lösung: Digital- oder Präfixbäume Digitalbäume indexieren (fest) die Buchstaben des zugrundeliegenden Alphabets ◮ ◮ ◮ können dafür unausgeglichen werden Beispiele: Tries, Patricia-Bäume Präfixbäume indexieren Präfixe von Zeichenketten Saake/Schallehn Algorithmen & Datenstrukturen II 3–45 Tries von “Information Retrieval”, aber wie try gesprochen ... ◮ E H L Hellhof U Heuer Jagellowsk J Korn K A ... Lansen L O U Saake/Schallehn E Loeser T Lottermann Ludwich Algorithmen & Datenstrukturen II 3–46 TRIE Knoten A B C D E F ..... A B C D E Saake/Schallehn F W X Y ..... Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 Z W X Y Z 3–47 57 3 Spezielle Bäume Probleme mit Tries ◮ Probleme bei Tries: ◮ ◮ ◮ ◮ lange gemeinsame Teilworte nicht vorhandene Buchstaben und Buchstabenkombinationen möglicherweise fast leere Knoten sehr unausgeglichene Bäume Saake/Schallehn Algorithmen & Datenstrukturen II 3–48 Patricia-Bäume ◮ ◮ ◮ ◮ Tries: Probleme beispielsweise bei künstlichen Schlüsseln (Teilekennzahlen), Pfadnamen, URLs (lange gemeinsame Teilworte), Bitfolgen Lösung: Practical Algorithm To Retrieve Information Coded In Alphanumeric (Patricia) Prinzip: Überspringen von Teilworten Problem (siehe Beispiel): Finden des Begriffs Datenbanksprache bei Suchbegriff Triebwerksperre Saake/Schallehn Algorithmen & Datenstrukturen II 3–49 Patricia-Baum und Trie im Vergleich a Data Base 3 e Datenbankmodelle m 5 s u p Datenbanksprache y Datenbanksystem 0 Datum D a t a Data Base e n m b a u 58 Datenbankmodell k s Datum Saake/Schallehn n p y Datenbanksprache Datenbanksystem Algorithmen & Datenstrukturen II 3–50 Uni Magdeburg, WS 2005/06 3 3 Spezielle Bäume Präfix-Bäume a Dat 3 Base e m nbank odelle 5 u p s rache 0 m Saake/Schallehn y stem Algorithmen & Datenstrukturen II 3–51 Bemerkungen zu digitalen Bäumen ◮ ◮ ◮ nur bei Gleichverteilung ungefähr ausgeglichen (welcher Vorname beginnt mit dem Buchstaben ‘Q’?) Einsatz insbesondere für Information Retrieval, Textindizierung (Suchmaschinen), Bitfolgen Alternative: ‘Präfix-B-Bäume’ ◮ ◮ innere Knoten haben zur Verzweigung nur die notwendigen Präfixe als Schlüsseleinträge echte Datensätze nur in den Blättern Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 3–52 59