07 Binäre Suchbäume

Werbung
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
Herunterladen