Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume • Einführung und Begriffe • Binäre Suchbäume 2 Binäre Suchbäume • Datenstruktur für dynamische Mengen – Unterstützen viele Operationen effizient • Wörterbuchoperationen – Suchen, einfügen, löschen – Aufwand proportional zur Höhe des Baumes – Höhe zwischen Θ(n) und Θ(lg n) • Zusätzlich – Prioritätswarteschlangen (Minimum, Maximum effizient abfragen) – Sortierte Auflistung in O(n) – Vorgänger, Vorgänger Nachfolger effizient abfragen 3 Binäre Suchbäume • Viele Varianten von Suchbäumen – Binäre Suchbäume, rot-schwarz Bäume, AVL Bäume, B-Bäume, etc. • Heute: grundlegende Operationen auf binären Suchbäumen – – – – Traversierung (Aufzählung der Elemente) Abfragen (suchen) Einfügen Löschen 4 Begriffe • Bäume sind spezielle Typen von Graphen – Siehe auch Anhänge B.4 B 4 und B B.5 5 im Buch – Mehr über Graphen später • Intuitiv Int iti – Graphen bestehen aus Knoten und Kanten zwischen Paaren von Knoten – Graphen modellieren Beziehungen zwischen Daten • Beispiele – Knoten: speichern Schlüsselwerte, Kanten: „Kante von Knoten a nach b existiert, wenn key[a]<key[b]“ – Knoten: g geografische g Orte,, Kanten: Distanz,, falls Zugstrecke existiert 5 Graphen • Definition – Paar (V,E) von Knoten- und Kantenmenge g enthält Paare von Knoten – Kantenmenge • Gerichteten Graphen – Knotenpaare geordnet p ( , ) und ((b,a) (a,b) , ) werden – Knotenpaare unterschieden • Ungerichteten Graphen – Knotenpaare ungeordnet 6 Begriffe • Pfad: Sequenz von Knoten die über Kanten entsprechender Richtung verbunden sind • Erreichbar: Knoten ist von einem anderen erreichbar, wenn es einen Pfad gibt, der beide Knoten verbindet • Zusammenhängend g (ungerichteter ( g Graph): p ) jedes Knotenpaar ist durch einen Pfad verbunden • Zyklus: Pfad, der als ersten und letzten Knoten denselben Knoten enthält 9 Begriffe • Freier Baum: zusammenhängender, azyklischer ungerichteter Graph azyklischer, • Wald: azyklischer, y , ungerichteter g Graph, p , nicht unbeding zusammenhängend 10 Begriffe • (Gerichteter) Baum: Baum mit ausgezeichnetem Knoten, Wurzel • Innerer Knoten, Blatt • Vater, Vater Kind • Vorfahre, Nachfahre • Teilbaum • Tiefe eines Knotens: Abstand zur Wurzel • Höhe eines Knotens: längster Pfad zu einem Blatt Bl • Höhe des Baumes: längster g Pfad von Wurzel zu einem Blatt 12 Begriffe • Binärer Baum: rekursive Definition – Leerer Baum, oder – Baum bestehend aus • Wurzel • Linker Teilbaum,, der binärer Baum ist • Rechter Teilbaum, der binärer Baum ist 14 Begriffe • Vollständiger binärer Baum – Alle Blätter haben gleiche Tiefe – Alle internen Knoten haben zwei nicht-leere Teilbäume • Vollständiger binärer Baum mit Höhe h hat – n = 2h Blätter – Höhe ist h = log2 n – 2h-11 interne Knoten 16 Binäre Bäume: Implementation • Verkettete Struktur • Blätter haben left = right = nil class BinaryNode { BinaryNode left, right, p; int key; } 18 Übersicht Binäre Suchbäume • Einführung und Begriffe • Binäre Suchbäume 19 Binäre Suchbaum-Eigenschaft • Falls Knoten y im linken Teilbaum von Knoten x, x dann key[y]<=key[x] • Falls Knoten y im rechten Teilbaum von Knoten x, dann key[y]>=key[x] 20 Inorder Traversierung • Besucht Knoten in aufsteigender Reihenfolge 21 Inorder Traversierung • Korrektheit: folgt mittels Rekursion aus Suchbaum-Eigenschaft • Zeitaufwand: Linear,, jjeder Knoten wird genau einmal besucht und ausgegeben 22 Alternative Reihenfolgen • Inorder-Traversierung: traversiere linken Teilbaum,, g gib Knoten aus,, traversiere rechten Teilbaum • Preoreder Preoreder-Traversierung: Traversierung: gibt Knoten aus, aus traversiere linken Teilbaum, traversiere rechten Teilbaum • Postorder-Traversierung: traversiere linken Teilbaum, traversiere rechten Teilbaum, gib Knoten aus • Nur Inorder-Traversierung gibt Schlüssel sortiert aus 23 Suchen 24 Suchen • Überprüfte Knoten bilden Pfad von Wurzel nach unten • Laufzeit höchstens O(h), ( ), h ist Höhe • Iterative Variante, ähnlich wie Traversierung einer Liste 25 Minimum • Aus Suchbaum-Eigenschaft folgt – Kleinster Knoten ist Knoten am weitesten links – Grösster Knoten ist Knoten am weitesten rechts 26 Vorgänger und Nachfolger • Vorgänger von Element x – Element mit grösstem Schlüssel der kleiner ist als x • Nachfolger von Element x – El Elementt mit it kl kleinstem i t SSchlüssel hlü l d der grösser ö iistt als x • Kann gefunden werden ohne Schlüsselg vergleiche! 27 Nachfolger 28 Zusammenfassung • Operationen Suchen, Minimum, Maximum, Vorgänger und Nachfolger können auf Binärbaum der Höhe h in O(h) ausgeführt werden d • Grund: Alle Operationen folgen entweder einem strikt aufwärts oder abwärts la fenden Pfad im Ba laufenden Baum m 29 Einfügen und Löschen • Einfügen und Löschen ändern die Struktur des Suchbaumes • Müssen sicherstellen,, das Suchbaum Eigenschaft wieder hergestellt wird • Einfügen einfacher als Löschen 30 Einfügen 31 Einfügen • Laufzeit O(h), wie Suchen • Einfügen und Inorder-Traversierung können g verwendet werden als Sortieralgorithmus 33 Löschen 3 Fälle: Lösche Knoten z 1 Fall: Knoten z hat keine Kinder 1. – Lösche Knoten z indem Vater von z auf nil zeigt anstatt auf z 2. Fall: Knoten z hat ein Kind – Vater V t von K Knoten t z zeigt i t auff Ki Kind d von z anstatt t tt auff z 3. Fall: Knoten z hat zwei Kinder – Achtung: Der Nachfolger y von z hat entweder keines oder nur ein rechtes Kind (Nachfolger von z bedeutet der linkste Knoten im Rechten Teilbaum von z) 1. Lösche y via Fall 1 oder 2 2. Ersetze Schlüssel und Satellitendaten von z mit denjenigen von y 34 Löschen 35 Zusammenfassung • Alle Operationen laufen mit Aufwand Θ(h) • Problem P bl – Im Worst Case degeneriert g Baum zu einer Liste – Höhe ist von Ordnung h = O(n) • Lösung – Garantiere kleine Höhe – Balancierte Bäume, so dass immer h = Θ(lg n) • Ansatz – Restrukturiere Baum falls nötig nach Einfügen und Löschen 37 Nächstes Mal • Kapitel 13: Rot-schwarz Bäume 38