binäre Suchbäume

Werbung
binäre Suchbäume
Wir haben bisher behandelt:
Informatik I
• Suchen in Listen (linear und verkettet)
• Suchen mittels Hashfunktionen
6. Kapitel
jeweils unter der Annahme, dass die Daten dynamisch verändert werden,
durch
Rainer Schrader
• Löschoperationen
• Einfügeoperationen
Zentrum für Angewandte Informatik Köln
4. Juni 2008
Wir haben die Frage zurückgestellt, wie diese Operationen auf Bäumen
durchzuführen sind.
Zur Erinnerung:
1 / 42
2 / 42
binäre Suchbäume
binäre Suchbäume
Durch Einfügen und Löschen von Stichworten kann der Suchbaum wie folgt
aussehen:
Stichwortsuche
• Gegeben: ein Lexikon mit n Stichworten.
• Frage: ist ein gegebener Begriff im Lexikon enthalten?
g
a
b
d
Zwei möglich Ansätze:
i
c
d
• verkettete Listen: ; O(n) im worst-case
b
f
h
j
• binärer Baum als Suchbaum organisiert:
j
a
c
e
• Wörter im linken Unterbaum sind alphabetisch größer als das
Wort in der Wurzel
Wir werden versuchen, diese Situation zu verhindern, und balancierte Bäume
verwenden.
• Wörter im rechten Unterbaum sind alphabetisch kleiner als das
Wort in der Wurzel
Wir werden in diesem Kapitel die Laufzeiten der Operationen Füge_ein,
Folgerung
Wir können in O(Höhe(T )) entscheiden, ob das gesuchte Wort im Lexikon
vorkommt.
Entferne, Suche und Zugriff auf Suchbäumen untersuchen.
3 / 42
4 / 42
binäre Suchbäume
binäre Suchbäume
Sprechweisen
Gliederung
Sei T ein Baum mit Wurzel r und Unterbäumen T1 , . . . , Tk .
Ferner sei ri die Wurzel des Baumes Ti .
• grundlegende Definitionen
• ri ist i-ter Sohn von r , r ist Vater der r1 , . . . rk ,
• rj ist Bruder von ri ,
• u ist Nachfolger von ri , falls u im Unterbaum Ti liegt,
• ein Knoten ohne Nachfolger heißt Blatt,
• Operationen auf binären Suchbäumen
• erwartete Suchzeiten in binären Suchbäumen
• Knoten von T , die nicht Blatt sind, heißen innere Knoten,
5 / 42
6 / 42
binäre Suchbäume
binäre Suchbäume
Bezeichnungen
Sprechweisen
T1
5
Sei T ein Baum mit Wurzel r und Unterbäumen T1 , . . . , Tk .
Wurzel
T2
Niveau
2
0
Ferner sei ri die Wurzel des Baumes Ti .
3
7
• eine Folge von Knoten v0 , v1 , . . . , vk heißt Weg, falls vi +1 Nachfolger
linker Unterbaum 5
von
von vi ist für alle 0 ≤ i ≤ k − 1,
2
• der Weg v0 , v1 , . . . , vk hat die Länge k ,
• Tiefe(v , T ) = Länge des Weges von Knoten v zur Wurzel r ,
• Höhe(v , T ) = Länge des längsten Weges von v zu einem Blatt,
• Höhe(T ) = Höhe (Wurzel, T ).
5
8
Kanten
Tiefe(7)=2
7
5
3 ist Vater von 2
3 ist Vater von 5
2 ist linker Sohn von 3
5 ist rechter Sohn von 3
2
8
3
Blatt
5
7 / 42
1
3
Knoten
4
8 / 42
binäre Suchbäume
binäre Suchbäume
symmetrisches Durchmustern von Binärbäumen
Binäre Bäume
(1) Durchmustere in symmetrischer Ordnung Tlinks (falls er existiert)
Ein Baum, in dem jeder Knoten höchstens 2 Söhne hat, heißt binär.
(2) Durchmustere die Wurzel
Darstellung binärer Bäume
(3) Durchmustere in symmetrischer Ordnung Trechts (falls er existiert)
• durch 2 Felder Leftsoni und Rightsoni
• dazu ggf. Informationen über: Inhalt der Knoten, Väter, # Nachfolger in
Die Knoten im linken Teilbaum von r tragen kleinere Nummern als r , die im
rechten größere.
zusätzlichen Feldern
1
2
3
4
5
6
1
2
3
4
5
6
R
4
6
-
Folgerung
L
2
3
5
-
Wir können (auch nach dem Löschen von Knoten) in O(Höhe(T ))
entscheiden, ob ein Knoten mit der Nummer p vorkommt.
9 / 42
10 / 42
binäre Suchbäume
binaäre Suchbäume
Datenstruktur zur Unterstützung der folgenden Operationen auf dynamischen
Mengen:
Wir unterscheiden:
• suche
• bestimme das Minimum
• Suchbäume:
• alle Knoten enthalten Schlüssel,
• bestimme das Maximum
• bestimme den Vorgänger einer symmetrischen Durchmusterung
• Blattsuchbäume:
• die Schlüssel sind in den Blättern gespeichert,
• bestimme den Nachfolger einer symmetrischen Durchmusterung
• füge ein
• die inneren Knoten enthalten Wegweiser für die Suche
• lösche
• wir behandeln in diesem Kapitel ausschließlich Suchbäume
Wir haben binäre Bäume schon benutzt (Heapsort, untere Schranke für
Sortieren).
11 / 42
12 / 42
binäre Suchbäume
binäre Suchbäume
Binäre Suchbaumeigenschaft
Gliederung
Für jeden Knoten p des Baums gilt:
• grundlegende Definitionen
• die Schlüssel im linken Teilbaum von p sind kleiner als der Schlüssel
• Operationen auf binären Suchbäumen
von p
• erwartete Suchzeiten in binären Suchbäumen
• die Schlüssel im rechten Teilbaum von p sind größer als der Schlüssel
von p
13 / 42
14 / 42
binäre Suchbäume
suche(v, k) in Suchbäumen
// suche im Baum mit Wurzel
v
nach Schlüssel
binäre Suchbäume
bestimme Minimum (v) in Suchbäumen
// im Baum mit Wurzel v bestimme den minimalen Schlüssel
k
while leftson(v) 6= ∅ do
v = leftson(v)
end while
return v
if v.key = k return p
if k < v.key then do
if leftson(v)6= ∅
then suche(leftson(v), k)
else return „nicht gefunden”
end if
else
if rightson(v)6= ∅
then suche(rightson(v), k)
else return „nicht gefunden”
end if
end if
Korrektheit: folgt aus der Suchbaumeigenschaft, denn in jedem Schritt gilt:
• alle Schlüssel im rechten Teilbaum sind größer als der in der Wurzel
• alle Schlüssel im linken Teilbaum sind kleiner als der in der Wurzel
• d.h., wenn v einen linken Teilbaum besitzt, so befindet sich das
Minimum darin
Laufzeit:O(Höhe(T (v )))
Laufzeit: O(Höhe(T (v )))
Entsprechend lässt sich das Maximum bestimmen.
15 / 42
16 / 42
binäre Suchbäume
binäre Suchbäume
Sei v ein Knoten und u der Knoten mit dem nächstgrößeren Schlüsselwert .
• hat v einen rechten Sohn, so ist u der minimale Schlüssel im rechten
Teilbaum von v
• hat v keinen rechten Sohn, so ist u der erste Vorfahr von v , dessen
linker Sohn x auch Vorfahr von v ist, denn:
• in einigen Anwendungen muss zu einem Knoten v der Knoten u mit
dem nächstgrößeren (nächstkleineren) Schlüsselwert bestimmt werden
• v hat maximalen Schlüsselwert im Teilbaum Tx ,
• danach wird in symmetrischer Durchmusterung u erreicht.
• Beobachtung: die symmetrische Durchmusterung durchläuft
offensichtlich die Knoten nach aufsteigenden Schlüsselwerten
u
• damit ist u der nächste Knoten in der symmetrischen Durchmusterung
x
v
17 / 42
18 / 42
binäre Suchbäume
binäre Suchbäume
füge_ein(T , k )
bestimme Nachfolger(p) in Suchbäumen
fügt einen neuen Knoten mit Schlüssel k in den Suchbaum ein.
if rightson(p)6= ∅
then return minimum(rightson(p))
else
q = father(p)
while father(p)6= ∅ and p = rightson(q) do
p = q
q = father(p)
end while
if father(p)6= ∅ return q
else return „kein Nachfolger”
• suche nach k
• ist k schon in T enthalten, stop
• andernfalls endet die Suche in einem Knoten v mit Schlüssel j , und
• j > k und v hat keinen linken Sohn, oder
• j < k und v hat keinen rechten Sohn
• erzeuge den entsprechenden Sohn von v
• speichere k in v
Laufzeit: O(Höhe(T ))
Laufzeit: O(Höhe(T (p)))
Entsprechend lässt sich der Vorgänger in der symmetrischen
Durchmusterung bestimmen.
19 / 42
20 / 42
binäre Suchbäume
binäre Suchbäume
Illustration zu Entfernung des Knotens v :
Beispiel: Einfügen des Schlüssels k = 16
15
v
5
15
6
2
3
18
3
7
4
17
13
16
20
12
10
20
u
16
13
18
23
6
successor(15) = 17
successor(13) = 15
9
7
insert(16)
21 / 42
22 / 42
binäre Suchbäume
binäre Suchbäume
15
15
v
v
5
16
3
5
20
12
10
u
13
18
3
20
12
23
10
Fall 1: v hat keine Kinder (im Beispiel Knoten 13)
6
16
u
13
18
23
Fall 2: v hat ein Kind (im Beispiel Knoten 16)
6
; einfach entfernen.
; zwei Zeiger ändern („herausschneiden“): Vater
von v zeigt auf Sohn von v
7
7
23 / 42
24 / 42
binäre Suchbäume
binäre Suchbäume
15
v
Laufzeit für Entfernen:
5
O(Höhe(T ))
16
Aufbau eines binären Suchbaums
3
10
• erzeuge einen leeren Baum
• füge die Schlüssel in gegebener Reihenfolge in den Baum ein
20
12
13
18
• im Extremfall kann der Baum zu einer linearen Liste ausarten, wenn
23
z.B. die Einträge nach aufsteigenden Schlüsseln eingefügt werden
u
Fall 3: v hat zwei Kinder (im Beispiel Knoten 5)
6
7
• sei u der Knoten mit dem nächstgrößeren Schlüssel
• u hat keinen linken Sohn, da sonst der
nächstkleinere Schlüssel von u im linken Teilbaum
• u erfüllt Fall 1 oder 2
• wenn wir v durch u ersetzen, bleibt die
Suchbaumeigenschaft erhalten
• ; entferne u und ersetze v durch u
• in diesem Fall dauern die Operationen lineare Zeit, da h(T ) = Θ(n).
• (vollständige binäre Bäume T haben die Höhe h(T ) = Θ(log n))
• wir versuchen zu analysieren, wie lange die Operationen im
Erwartungswert dauern
25 / 42
26 / 42
binäre Suchbäume
binäre Suchbäume
• als Maß für die Güte eines Suchbaums betrachten wir die mittleren
Suchzeiten
Gliederung
• Suchzeit für Knoten p = Anzahl der Knoten auf dem Pfad von p zur
• grundlegende Definitionen
Wurzel = Tiefe(p) + 1
• Operationen auf binären Suchbäumen
Mittelung über:
• erwartete Suchzeiten in binären Suchbäumen
• alle Permutation der n Schlüssel, oder
• alle Suchbäume mit n Knoten
Wir beschränken uns auf den ersten Fall.
27 / 42
28 / 42
binäre Suchbäume
binäre Suchbäume
Annahmen:
Konventionen:
• alle Schlüssel sind paarweise verschieden, oBdA {1, 2, . . . , n}
• wir schreiben v ∈ T für „v ist ein Knoten im Baum T“
• ein zufälliger binärer Suchbaum entsteht durch Einfügen der Schlüssel
• |T | ist die Anzahl der Knoten im Baum T
hintereinander gemäß einer zufälligen Permutation
• falls |T | > 0, so sei Tl linker und Tr rechter Teilbaum von T
• jede Permutation π bestimmt eindeutig einen binären Suchbaum Tπ ,
• die Umkehrung gilt jedoch nicht:
T
π1 = h2, 1, 3i
2
π2 = h2, 3, 1i
1
Tπ1 = Tπ2
3
Tl
Tr
30 / 42
29 / 42
binäre Suchbäume
binäre Suchbäume
Lemma (Rekursive Definition von ϕ(T ))
Suchpfadlänge eines Baumes T :

ϕ(T ) =
X
ϕ(T ) =
(TiefeT (v ) + 1)
falls |T | = 0
falls |T | > 0
0,
|T | + ϕ(Tl ) + ϕ(Tr ),
v ∈T
Beweis:
Beispiel:
ϕ(T ) =
X
(TiefeT (v ) + 1)
v ∈T
Tiefe+1
=1+
1
X
(TiefeT (v ) + 1) +
v ∈Tl
2
2
=1+
φ(Τ)=14
X
3
3
3
(TiefeTl (v ) + 2) +
X
=
31 / 42
X
(TiefeTr (v ) + 2)
v ∈Tr
(TiefeTl (v ) + 1) +
v ∈Tl
per Def.
(TiefeT (v ) + 1)
v ∈Tr
v ∈Tl
= |T | +
X
X
(TiefeTr (v ) + 1)
v ∈Tr
|T | + ϕ(Tl ) + ϕ(Tr )
32 / 42
binäre Suchbäume
binäre Suchbäume
• sei die durchschnittliche Suchpfadlänge gegeben durch
ϕ̄(T ) =
• in unserem Beispiel für n = 3:
ϕ(T )
|T |
π1 = h2, 1, 3i
• ϕ̄(T ) ist die Anzahl der Knoten, die bei einer zufälligen, erfolgreichen
π2 = h2, 3, 1i
Suche in T besucht werden
• sei Sn die Menge aller Permutation auf {1, 2, . . . , n}
1
Tπ1 = Tπ2
3
• die Permutationen h2, 1, 3i und h2, 3, 1i liefern eine Pfadlänge von 5
• für π ∈ Sn sei Tπ der Binärbaum, der entsteht, wenn in der
• alle anderen führen zu linearen Listen mit Pfadlänge 6
Reihenfolge von π eingefügt wird
• dies liefert eine mittlere Pfadlänge von Eϕ̄ (3) =
• wir mitteln jetzt die Suchzeiten über alle Bäume:
Eϕ (n) =
2
34
18
• dies ist fast die mittlere Pfadlänge einer linearen Liste (= 2)
1 X
ϕ(Tπ )
n!
π∈Sn
Eϕ̄ (n) =
• wir werden zeigen, dass dieses Beispiel täuscht
1 X
1
ϕ̄(Tπ ) = Eϕ (n)
n!
n
π∈Sn
34 / 42
33 / 42
binäre Suchbäume
binäre Suchbäume
Satz
• sei π<k die Einschränkung von π = hπ(1), π(2), . . . , π(n)i auf
Eϕ̄ (n) = 2 ln n + O(1).
1, 2, . . . , k − 1
Beweis:
• wir berechnen zunächst Eϕ (n)
• sei π = hπ(1), π(2), . . . , π(n)i ∈ Sn zufällig gewählt
• dann ist π(1) Wurzelschlüssel von Tπ
• für jedes k ∈ {1, 2, . . . , n} ist π(1) = k mit Wahrscheinlichkeit
Beispiel:
• sei π = h4, 3, 1, 5, 2, 6i
• dann ist π<4 = h3, 1, 2i
1
n
• entsprechend sei π>k die Einschränkung von π auf k + 1, k + 2, . . . , n
• π<k und π>k sind Permutation auf den entsprechenden Teilmengen
• ist π ∈ Sn zufällig, so sind π<k ∈ Sk −1 und π>k ∈ Sn−k ebenfalls
k
Schlüssel
Schlüssel
1, 2, . . . , k − 1
k + 1, k + 2, . . . , n
Tπ,l
zufällig
Tπ,r
35 / 42
36 / 42
binäre Suchbäume
binäre Suchbäume
Eϕ (n) =
n
1X
(Eϕ (k − 1) + Eϕ (n − k ) + n)
n
k =1
=n+
• mit Hilfe dieser Beobachtung
• und etwas formalem Aufwand (den wir hier nicht treiben)
• ergeben sich daraus Rekursionsformeln für Eϕ (n):
n
1X
(Eϕ (k − 1) + Eϕ (n − k ))
n
k =1
=n+
2
n
n−1
X
Eϕ (k )
k =0
Somit:
Eϕ (n) =
8
<
:
1
n
0, für n = 0,
1, für n = 1,
Pn
k =1 (Eϕ (k − 1) + Eϕ (n − k ) + n), für n > 1.
(n + 1) · Eϕ (n + 1) = (n + 1)2 + 2 ·
n
X
Eϕ (k )
k =0
n · Eϕ (n) = n 2 + 2 ·
n−1
X
Eϕ (k )
k =0
Subtraktion liefert:
Eϕ (n + 1) =
2n + 1
n+2
+
Eϕ (n)
n+1
n+1
37 / 42
38 / 42
binäre Suchbäume
binäre Suchbäume
2n + 1
n+2
+
Eϕ (n)
n+1
n+1
.
Pn 1
Per Induktion zeigt man: Eϕ (n) = 2(n + 1) i =1 i − 3n, denn
Eϕ (n + 1) =
2n + 1
n+2
+
Eϕ (n)
n+1
n+1
n
i
X
n + 2h
1
2n + 1
+
2(n + 1)
− 3n
=
n+1
n+1
i
Eϕ (n) = 2(n + 1)
Eϕ (n + 1) =
n
X
1
− 3n
i
i =1
(per Induktion)
Die Abschätzung der Summe liefert:
i =1
n
=
Eϕ (n) ≤ 2n ln n + 2 ln n − 2n
X1
3n(n + 2)
2n + 1
+ 2(n + 2)
−
n+1
i
n+1
und
i =1
= 2(n + 2)
n
X
i =1
Eϕ̄ (n) ≤ 1.4 log n +
1
2n + 1 − 3n 2 − 6n
+
i
n+1
2 ln n
−2
n
n
X
1
1
= 2(n + 2)
+ 2(n + 2) ·
− 3(n + 1)
i
n+1
i =1
n+1
X
1
= 2(n + 2)
− 3(n + 1)
i
i =1
39 / 42
40 / 42
binäre Suchbäume
binäre Suchbäume
Unter allen Suchbäumen auf n Knoten hat der vollständige Baum minimale
mittlere Suchpfadlänge. Sie beträgt:
log(n + 1)
n
= log(n + 1) + O(1)
Mϕ (n) = log(n + 1) +
• diese Analyse gilt jedoch nur, wenn der Baum nicht durch Einfüge- und
Lösch-Operationen verändert wird
• unsere Lösch-Strategie führt dazu, dass größere Schlüssel nach oben
= log(n) + O(1)
wandern
Zum Vergleich:
• der Baum wird dadurch mehr und mehr linkslastig
√
• eine Analyse ergibt eine mittlere Suchpfadlänge von Θ( n)
Eϕ̄ (n) = 2 ln n + O(1)
=
• wir wollen im folgenden versuchen, den Baum „balanciert” zu halten
2
log2 n + O(1)
log2 e
= 1.38629 . . . · log2 n + O(1)
D.h. für große n ist die durchschnittliche Suchpfadlänge nur ca. 40% länger
als im Idealfall.
41 / 42
42 / 42
Herunterladen