1 Übersicht Binäre Suchbäume Binäre

Werbung
Übersicht
Binäre Suchbäume
• Einführung
• Operationen auf binären Suchbäumen
Datenstrukturen & Algorithmen
Matthias Zwicker
Universität Bern
Frühling 2009
2
Binäre Suchbäume
Binäre Suchbäume
• Unterstützen mehr Operationen auf
dynamischen Mengen
• Viele Varianten von Suchbäumen
– Binäre Suchbäume, rot-schwarz Bäume, AVL
Bäume, B-Bäume, etc.
– Wörterbuchoperationen (suchen, einfügen,
löschen)
– Prioritätswarteschlangen
o tätswa tesc la ge (Minimum,
(M
u , Maximum)
Ma
u )
– Sortierte Auflistung (Vorgänger, Nachfolger)
• Heute: grundlegende Operationen auf
binären Suchbäumen
–
–
–
–
• Aufwand proportional zur Höhe des
Baumes
– Höhe zwischen Θ(n) und Θ(lg n)
Traversierung
Abfragen
Einfügen
Löschen
3
4
Binäre Suchbäume
Binäre Suchbaum-Eigenschaft
• Verkettete Struktur wie vor 2 Wochen
• Falls Knoten y im linken Teilbaum von
Knoten x, dann key[y]<=key[x]
class BinaryNode {
BinaryNode left, right, p;
int key;
}
• Falls Knoten y im rechten Teilbaum von
Knoten x, dann key[y]>=key[x]
5
6
1
Traversierung
Inorder Traversierung
• Inorder Traversierung besucht Knoten in
aufsteigender Reihenfolge
• Korrektheit: folgt mittels Rekursion aus
Suchbaum-Eigenschaft
• Zeitaufwand: Linear, jeder Knoten wird
genau einmal besucht und ausgegeben
7
Alternative Reihenfolgen
8
Suchen
• Inorder-Traversierung: traversiere linken
Teilbaum, gib Knoten aus, traversiere
rechten Teilbaum
• Preoreder-Traversierung: gibt Knoten aus,
traversiere linken Teilbaum,
Teilbaum traversiere
rechten Teilbaum
• Postorder-Traversierung: traversiere linken
Teilbaum, traversiere rechten Teilbaum,
gib Knoten aus
9
10
Suchen
Minimum
• Überprüfte Knoten bilden Pfad von Wurzel
nach unten
• Aus Suchbaum-Eigenschaft folgt
– Kleinster Knoten ist Knoten am weitesten links
– Grösster Knoten ist Knoten am weitesten
rechts
• Laufzeit höchstens O(h)
• Iterative Variante, ähnlich wie
Traversierung einer Liste
11
12
2
Vorgänger und Nachfolger
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 kleinstem
kl i t
Schlüssel
S hlü l d
der grösser
ö
iistt
als x
• Kann gefunden werden ohne Schlüsselvergleiche!
13
14
Zusammenfassung
Einfügen und Löschen
• Operationen Suchen, Minimum, Maximum,
Vorgänger und Nachfolger können auf
Binärbaum der Höhe h in O(h) ausgeführt
werden
• Einfügen und Löschen ändern die Struktur
des Suchbaumes
• Müssen sicherstellen, das Suchbaum
Eigenschaft wieder hergestellt wird
• Grund: Alle Operationen folgen entweder
einem strikt aufwärts oder abwärts
laufenden Pfad im Baum
• Einfügen einfacher als Löschen
15
Einfügen
16
Einfügen
17
3
Einfügen
Löschen
• Laufzeit O(h), wie Suchen
3 Fälle: Lösche Knoten z
1. Fall: Knoten z hat keine Kinder
• Einfügen und Inorder-Traversierung können
als Sortieralgorithmus verwendet werden
– 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)
– Lösche y via Fall 1 oder 2
– Ersetze Schlüssel und Satellitendaten von z mit
denjenigen von y
19
Löschen
20
Löschen
21
22
Zusammenfassung
Nächstes Mal
• Alle Operationen laufen mit Aufwand Θ(h)
• Rot-schwarz Bäume
• Problem
– Im Worst Case degeneriert Baum zu einer Liste
– Höhe ist von Ordnung Θ(h) = Θ(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
23
24
4
Herunterladen