5. Balancierte Bäume - Universität Tübingen

Werbung
5. Balancierte Bäume
5
Einfügen, Streichen
Bsp.: {2, 3, 5, 7, 11, 13, 17}
2
7
3
13
11
17
Knoten hat Verweis auf linkes und rechtes Kind (lchild, rchild)
Oft auch Verweis auf Elternknoten.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
1
Knotenorientierte Speicherung:
1. Ein Element pro Knoten
2. Alle Elemente im linken Teilbaum von v
< Element an v
< alle Elemente im rechten Teilbaum von v, für alle v
Blattorientierte Speicherung:
1. Ein Element pro Blatt
2. Alle Elemente im linken Teilbaum von v
≤ Schlüssel an v < alle Elemente rechts
4
2
6
10
2
3 5
7
Vorlesung Algorithmen (RN/MK/AZ)
11
WSI für Informatik, Universität Tübingen
2
Benutzen knotenorientierte Speicherung
Suche (x):
u
Wurzel; found
false
while (u < > 0) and not found
do if info(u) = x then found
else if x < info(u) then u
else u
rchild(u)
true
lchild(u)
Einfüge (x): Zuerst Suche (x). Sei u der zuletzt besuchte
Knoten. u hat höchstens ein Kind (oder x ∈ S ).
Falls x < Info(u), erzeuge neuen Knoten mit
Beschriftung x als linkes Kind von u, andernfalls
als rechtes Kind.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
3
Streiche (x): Zuerst Suche (x). Ist x ∈ S , endet Suche in
Knoten u mit info(u) = x.
Fall 1: u ist Blatt. Streiche u
u
Fall 2: u hat nur ein Kind w. Streiche u und setze w an die
Stelle von u als Kind von u`s Elternknoten.
v
w
u
w
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
4
Fall 3: u hat 2 Kinder.
Suche Knoten v mit größter Beschriftung im linken
Teilbaum von u. (Einmal nach links, dann nach rechts,
bis es nicht mehr geht). v hat höchstens ein Kind (evtl. lchild).
Ersetze u durch v, und streiche v an alter Stelle mit Fall 1
oder Fall 2.
u
8
7
2
9
1
2
5
10
3
7
4
6
Vorlesung Algorithmen (RN/MK/AZ)
v
9
1
5
3
10
6
4
WSI für Informatik, Universität Tübingen
5
Komplexität: O(h + 1), wobei h Höhe des Suchbaums
kann sehr schlecht sein:
Idee: 1. Hoffen, dass das selten vorkommt.
2. Baue Baum von Zeit zu Zeit neu auf (ausgewogen)
3. Balancierte Bäume!
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
6
5.1 Balancierte Bäume: AVL-Bäume
Def.: Sei u Knoten in binärem Baum. Balance:
Bal(u) = Höhe des rechten Teilbaums von u
Höhe des linken Teilbaums von u
-1
-1
Def.: Ein binärer Baum heißt AVL-Baum, falls
Bal(u ) ≤ 1 für alle Knoten u.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
7
Def.: Fibonacci-Bäume T0, T1, T2 sind definiert durch
T0 = leerer Baum
T1 =
Tn =
für n ≥ 2
Tn-1
Tn-2
Fibonacci-Zahlen F0, F1, ... :
F0 = 0, F1 = 1, Fn= Fn-1 + Fn-2
Behauptung: Th enthält genau Fh Blätter für h ≥ 0.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
8
Behauptung: AVL-Baum der Höhe h enthält ≥ Fh Blätter.
Beweis: Durch Induktion über h.
h = 0: OK
h = 1: OK
h ≥ 2 : Man erhält blattärmsten AVL-Baum der Höhe h, indem
man blattärmsten AVL-Baum der Höhe h – 1 mit dem
blattärmsten der Höhe h – 2 kombiniert.
Th-1
Th-2
Nach Induktionsannahme hat der Baum
≥ Fh −1 + Fh − 2 = Fh Blätter.
αh − βh
Behauptung: Für h ≥ 0 ist Fh =
mit
5
1+ 5
1- 5
α=
und β =
.
2
2
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
(Induktion)
9
Lemma: Ein AVL-Baum mit n Knoten hat Höhe O(log n).
Beweis: Der Baum hat ≤ n Blätter.
αh − βh
≤ n.
Also Fh ≤ n oder
5
αh − βh
αh
≥
Da β < 1 :
für h groß genug.
5
2 5
αh
α ≈ 1.9,
⇒ n≥
2 5
β ≈ 0 .1
h
⇒ α ≤ 2 5 ⋅n
( )
log (2 5 ) + log n
= O (log n )
h≤
h log(α ) ≤ log 2 5 + log n
log(α)
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
10
Einfügen / Streichen:
Beschriften jedes Knotens v mit seiner Balance Bal(v).
Einfügen: Durch Einfügen eines Knotens w können Balancen
einiger Vorfahren von w Werte ± 2 annehmen.
Sei u der tiefste dieser Vorfahren. O.B.d.A. sei Bal(u) = 2.
w wurde also im rechten Unterbaum von u eingefügt.
Sei v rechtes Kind von u.
Beachte: Bal(v) ≠ 0, da Höhe von v verändert wurde.
Fall 1: Bal(v) = 1
v h+2
u h+3
u h+1
h+2 Rotation.Links(u)
v
h+1
h
h
⇒
h+1
h
A h
B
C
Vorlesung Algorithmen (RN/MK/AZ)
A
B
WSI für Informatik, Universität Tübingen
C
11
Beachte:
(1) Die Rotation bewahrt die links-nach-rechts-Ordnung.
A-u-B-v-C.
(2) u und v haben nach der Rotation die Balance 0.
Alle Knoten in A, B und C haben die gleiche (legale)
Balance wie vor der Rotation.
(3) Höhe von v nach der Rotation ist gleich der Höhe von u vor
dem Einfügen von w. Also sind nach der Rotation keine
Vorfahren von v unbalanciert.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
12
Fall 2: Bal(v) = –1
h+4
u 2
oder (B,C) vertauscht.
v
h+1
h+2
–1 h+3
z
A
h
h+1
B
C
D
h+1
Ro Do
tati ppe
on. lLin
ks(
u)
h+3
z
u
h+2
h+1
h+1
A
Vorlesung Algorithmen (RN/MK/AZ)
0 / –1
B
0
v
h+2
h
C
WSI für Informatik, Universität Tübingen
1/0
h+1
D
13
Es gibt damit 4 Rotationsoperationen auf AVL-Bäumen:
• Bal(u) = 2, Bal(v) = 1:
Rotation.Links(u)
• Bal(u) = -2, Bal(v) = -1: Rotation.Rechts(u)
• Bal(u) = 2, Bal(v) = -1:
Doppelrot.Links(u)
• Bal(u) = -2, Bal(v) = 1:
Doppelrot.Rechts(u)
Beachte: Die Rotationsoperationen sind lokale Operationen,
die nur das Umhängen einiger Zeiger erfordern, und
jeweils in Zeit O(1) erfolgen
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
14
Einfügealgorithmus:
Füge neues Blatt w ein. Dann folge dem Pfad von w zur
Wurzel, wobei alle Balancen neu berechnet werden.
Tritt eine Balance ± 2 auf, dann führe Rotation oder
Doppelrotation aus.
Beende das Einfügen.
Laufzeit: O(Höhe des Baums) = O(log n), n = # Knoten
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
15
Streichen:
Wie beim Einfügen können Knoten Balance ± 2 annehmen.
Sei u der tiefste solche Knoten, sei Bal(u) = 2, und sei v das
rechte Kind von u.
Fall 1: Bal(v) = 1; balanciere wie beim Einfügen.
Fall 2: Bal(v) = –1; analog.
Unterbäume B und C können jetzt beide die gleiche Tiefe
haben.
Im Fall 1 und 2 hat der betroffene Baum nach der Balancierung
kleinere Höhe als vor dem Streichen.
Balancierung muss daher höher im Baum fortgesetzt werden.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
16
Fall 3: Bal(v) = 0
u
v
v
Rotation
⇒
A
B
C
u
C
A
B
In diesem Fall muß die Balancierung nicht höher im
Baum fortgesetzt werden.
Satz:
Balancierte Bäume, wie AVL-Bäume, erlauben Suchen,
Einfügen und Streichen in O(log n) Zeit, wobei n die
Knotenanzahl ist.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
17
Anwendung von balancierten Suchbäumen:
Schnitt von achsenparallelen Liniensegmenten
Gegeben: Menge von insgesamt n vertikalen und horizontalen
Liniensegmenten in der Ebene.
Gesucht: Alle Paare von sich schneidenden Elementen
Trivialer Algorithmus: O(n²)
Anwendung z.B. bei VLSI-Schaltkreisen:
VLSI-Designer will keine unerwarteten
„Drahtüberschneidungen“...
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
18
Vereinfachende Annahme nachfolgend:
Alle Anfangs- und Endpunkte horizontaler Segmente
und alle vertikalen Segmente haben paarweise
verschiedene x-Koordinaten.
Idee: Vertikale „Sweepline“ geht Ebene von links nach rechts
durch; jedes aktuell von Sweepline abgedeckte vertikale
Segment kann höchstens Schnittpunkte mit gerade „aktiven“
horizontalen Segmenten haben.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
19
Algorithmus:
 x − Koordinaten der Anfangs- und Endpunkte 
Q←

horizontal
er
Segmente


∪ {x − Koordinaten von vertikalen Segmenten} ;
Sortiere Q bzgl. x-Werten;
L ← o/ ;
/ * Menge jeweils aktiver horizontaler Segmente
in aufsteigender y - Reihenfolge * /
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
20
while Q ≠ o/ do
p ← kleinstes Element in Q ;
if p linker Endpunkt eines horizontalen Segments s
then L ← L ∪ {s}
else if p rechter Endpunkt eines horizontalen Segments s
then L ← L \ {s}
else /* p ist x-Wert eines vertikalen
Segments s = [ (p, yunten), (p, yoben)] */
Bestimme alle horizontalen Segmente t ∈ L
mit yunten ≤ y (t ) ≤ yoben und gib (s,t) aus.
fi;
fi;
Q ← Q \ { p}
od;
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
21
• Beispiel: Sweepline-Algorithmus
s4
s1
s3
s2
s5
(s1, s2)
(s3, s2)
(s3, s4)
(s5, s4)
s6
Q
L
x1
x2
x3 x4 x5 x6 x7 x8 x9
s2
s4
s6
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
22
Zur Laufzeit des Algorithmus:
Einmaliges Sortieren von Q: O(n log n)
Wichtig: Wie hält man L geordnet?
Beachte: Die Information in Q ist quasi statisch,
die in L dynamisch.
Wir benötigen folgende Operationen auf L:
-Einfügen & Entfernen
-Bestimmen aller Elemente, die in geg. Bereich[ yu , yo ]
fallen: „Bereichsanfrage“, Range Query
→ Implementation von L mit balanciertem Suchbaum
mit blattorientierter Speicherung, wobei benachbarte
Blätter verkettet sind.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
23
Damit: O(log n) für Einfügen und Entfernen und O(log n + r)
für Bereichsanfrage in Bereich [yu, yo] ,
wobei [yu, yo].
Zusammen: Laufzeit O (n log n + k),
wobei k die Gesamtzahl sich schneidender
Segmente ist.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
24
5.2 Gewichtsbalancierte Bäume: BB[α]-Bäume
Idee: Sei T ein binärer Suchbaum mit n Knoten und
Teilbäumen Tl und Tr und sei l bzw. r die Anzahl der
Knoten in Tl bzw. Tr. T ist ausbalanciert, falls
l ≈ r , d.h. l ≈ 1
n
2
Wir beschränken den Quotienten l + 1 n + 1
Def.: Sei α ∈ R, 0 ≤ α ≤ 12 . Sei T ein binärer Baum mit n
Knoten und l Knoten im linken Teilbaum. Dann heißt
ρ (T ) = l + 1 n + 1 die Wurzelbalance von T.
T heißt von beschränkter Balance α oder ein BB[α]-Baum,
falls für jeden Unterbaum T‘ von T gilt:
α ≤ ρ (T ' ) ≤ 1 − α .
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
25
•
Beispiel eines BB[α]-Baums:
Sei Tx Unterbaum mit Wurzel x
x ρ (Tx ) = l + 1 n + 1
T: 5
1 1/2 = (0+1)/(1+1)
2
7
2 2/5 = (1+1)/(4+1)
3 1/2
1 4 6 8
4 2/3
3
5 5/9
6 1/2
7 2/4 = 1/2
T ist BB[α]-Baum für α ≤ 13 .
8 1/2
T ist kein BB[α]-Baum für α > 13 .
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
26
Satz: Sei T ein BB[α]-Baum mit n Knoten. Dann gilt
log(n + 1) − 1
Höhe(T ) ≤
log( 1−1α )
Beweis: Induktion über n:
log(1 + 1) − 1
=0
n = 1: Höhe(T ) = 0 ≤
1
log( 1−α )
n Æn+1: Sei T ein BB[α]-Baum mit Wurzel und
Teilbäumen Tl und Tr.
Höhe(T ) = max{Höhe(Tl ), Höhe(Tr )}+ 1
O.B.d.A. sei Höhe(Tl ) ≥ Höhe(Tr )
⇒ Höhe(T ) = Höhe(Tl ) + 1
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
27
Höhe(T ) ≤
≤
log(l + 1) − 1
+ 1 nach Induktionsvor.
1
log( 1−α )
l +1
log((n + 1)(1 − α )) − 1
+
≤ 1−α
1 wegen
1
n +1
log( 1−α )
log(n + 1) + log(1 − α ) − 1 + log( 1−1α )
=
log( 1−1α )
=
log(n + 1) − 1
log( 1−1α )
Folgerungen:
a) BB[α]-Bäume haben logarithmische Höhe
b) Für α = 1 − 12 2 ≈ 0.293 ergibt sich Höhe(T ) ≤ 2 log(n + 1)
c) BB[α]-Bäume haben auch logarithmische mittlere
Weglänge (hier nicht gezeigt, siehe Mehlhorn)
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
28
Rebalancierung von BB[α]-Bäumen
Problem: Durch Einfügen und Löschen in BB[α]-Bäumen
kann deren Balance zerstört werden.
Lösung: Die Balance kann nach solch einer Operation nur auf
dem Suchpfad (Weg von der Wurzel zur Stelle der
Änderung) zerstört werden. Längs dieses Suchpfades muß
rebalanciert werden. Der Pfad hat logarithmische Länge.
Unter der Voraussetzung 112 ≤ α ≤ 1 − 12 2 ≈ 0.293
kann man zeigen, dass die lokalen Operationen Rotation
und Doppelrotation auf dem Suchpfad zur Rebalancierung
ausreichen.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
29
Beispiel zur Rebalancierung: Sei α = 0.29, Einfügen(7)
T:
i
2
1
T:
5
1
4
6
ρi 2/6 2/4 1/2 1/2 1/2
5
4
2
6
i
2
5
1
4
6
7
ρi 2/7 2/5 1/2 1/2 1/3 1/2 vor R.
2
1
2/4 4/7
5
4
...
...
6
2
Vorlesung Algorithmen (RN/MK/AZ)
... nach R.
5
Rot.L(2)
7
...
1
6
4
7
WSI für Informatik, Universität Tübingen
30
Lemma 1: Wirkung von Rotation und Doppelrotation
a) Bei Rotation nach links um x
T: x ρ
T‘:
y ρ‘y
x
Rot.L(x)
y ρy
T1
ρ‘x x
T3
T2
T1
T3
T2
gilt für die Wurzelbalance
ρ ′x =
ρx
ρ x + (1 − ρ x ) ⋅ ρ y
ρ ′y = ρ x + (1 − ρ x ) ⋅ ρ y
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
31
b) Bei Doppelrotation nach links
T: x ρ
T‘:
x
DRot.L(x)
y ρy
T1
ρ‘x x
z
T4
z
ρ‘z
y ρ‘y
T1 T2 T3 T4
T2 T3
gilt für die Wurzelbalance
ρx
ρ ′x =
ρ x + (1 − ρ x ) ⋅ ρ y ⋅ ρ z
ρ y (1 − ρ z )
ρ ′y =
1− ρ y ρz
ρ ′z = ρ x + (1 − ρ x ) ⋅ ρ y ⋅ ρ z
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
32
Beweis des Lemmas 1:
Sei ai-1 die Anzahl der Knoten im Teilbaum Ti:
a1
a1
a) Es gilt ρ =
ρ ′x =
x
a1 + a2 + a3
a1 + a2
a2
ρy =
a2 + a3
ρ ′y =
a1 + a2
a1 + a2 + a3
Damit gilt
a1
a1 + a2 + a3
ρx
a1
=
=
= ρ ′x
a
a
+
a
a
a1 + a2
ρ x + (1 − ρ x ) ⋅ ρ y
2
3
1
2
+
⋅
a1 + a2 + a3 a1 + a2 + a3 a2 + a3
ρ x + (1 − ρ x ) ⋅ ρ y =
a1
a2 + a3
a2
a1 + a2
= ρ ′y
+
⋅
=
a1 + a2 + a3 a1 + a2 + a3 a2 + a3 a1 + a2 + a3
b) analog
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
33
Lemma 2: Sei T ein binärer Suchbaum, der bei x nur ein
wenig außer Balance geraten ist, d.h.
i) Jeder echte Unterbaum von
T: x ρ
x
T ist BB[α]-Baum
y ρy
T1
ii) α (1 − α ) ≤ ρ x < α
Dann gilt:
a)
b)
T2
T3
1 − 2α
Ist ρ y >
und entsteht T‘ aus T durch eine
1−α
Doppelrot. nach links um x, so ist T‘ ein BB[α]-Baum.
1 − 2α
ρ
≤
Ist
und entsteht T‘ aus T durch eine
y
1−α
Rotation nach links um x, so ist T‘ ein BB[α]-Baum.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
34
Beweisidee des Lemmas:
a) Es muss gezeigt werden, dass eine Doppelrotation
möglich ist (T2 nicht leer) und dass T‘ ein BB[α]-Baum
ist, d.h. α ≤ ρ ′x , ρ ′y , ρ ′z ≤ 1 − α .
b) analog
Bemerkung: Sei T ein BB[α]-Baum, in dem ein einzelnes
Element eingefügt oder gelöscht wird, wodurch T‘
entstehe. Man kann zeigen, dass
i) die Balancen außerhalb des Suchpfades unverändert sind,
also im zulässigen Bereich [α, 1-α] liegen.
ii) die Balancen auf dem Suchpfad unverändert oder nur
wenig außerhalb von [α, 1-α] liegen und T‘ gemäß
Lemma 2 durch Rotation und Doppelrot. balanciert
werden kann.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
35
Algorithmus zur Rebalancierung von BB[α]-Bäumen nach
dem Einfügen/Löschen eines einzelnen Knotens.
Sei v0, v1, ... vk der Weg von der Wurzel bis zu der Stelle,
an der die Struktur des Baumes geändert wurde,
Sei Ti der Teilbaum mit Wurzel vi:
for i := k downto 0 do
/* d.h. vom Blatt zur Wurzel! */
begin if ρ (Ti ) ≤ α then /* T‘ sei rechter Teilb. von Ti */
1 − 2α
if ρ (T ′) ≤
then Rotation.Links(vi)
1−α
else DoppelRot.Links(vi);
if ρ (Ti ) > 1 − α then /* T‘ sei linker Teilb. von Ti */
α
′
ρ
(T
)
>
if
then Rotation.Rechts(vi)
1−α
else DoppelRot.Rechts(vi);
end;
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
36
Bemerkungen zur Realisierung
a) In jedem Knoten des Baumes wird neben Inhalt, RSohn,
LSohn auch die Anzahl der Nachfolger gespeichert. Dann
lässt sich die Wurzelbalance in jedem Knoten berechnen.
b) Die Knoten des Suchpfades werden beim Abstieg auf
einem Stack (Keller) abgelegt. Dann kann man den
Suchpfad leicht hochsteigen.
c) Zeitbedarf einer Rebalancierung: O(log n),
denn es ist ein Ab- und ein Aufstieg des Suchpfades
nötig, der Pfad hat Länge O(log n).
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
37
Satz (Zeitbedarf bei BB[α]-Bäumen).
Sei 112 ≤ α ≤ 1 − 12 2
Speichert man eine Menge S als BB[α]-Suchbaum,
so können die Operationen
– Suchen,
– Einfügen,
– Löschen
eines Elements in Zeit O(log||S||) ausgeführt werden.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
38
5.3 B-Bäume
Für große Datenmengen, die nicht mehr in den Hauptspeicher
passen, sind AVL-Bäume oder BB[α]-Bäume ungeeignet.
Hier kommen B-Bäume zum Zug, die für Zugriff auf externe
Speicher entworfen wurden.
Definition:
Ein B-Baum der Ordnung k ≥ 2 ist ein Baum,
- dessen Blätter alle gleiche Tiefe haben,
- die Wurzel mindestens 2 Kinder und jeder andere
- innere Knoten mind. k Kinder hat und
- jeder innere Knoten höchstens 2k-1 Kinder besitzt.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
39
Lemma:
Sei T ein B-Baum der Ordnung k mit Höhe h und
h
n Blättern. Dann gilt: 2 ⋅ k h −1 ≤ n ≤ (2k − 1)
Beweis:
Minimale Anzahl von Blättern, falls jeder innere Knoten
die Minimalzahl von Kindern hat:
2 ⋅ k14
⋅ k2
⋅ ...4
⋅3k = 2 ⋅ k h −1 = nmin ≤ n
h −1
Analog folgt, dass die maximale Anzahl der Blätter
höchstens (2k − 1)h =: nmax ist.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
40
Logarithmieren ergibt:
n
log ( 2 k −1) n ≤ h ≤ 1 + log k
2
⇒ Wähle bei großen Datenmengen k so, dass auf eine Seite
ein Knoten des B - Baums passt.
Operationen: Zugriff, Einfügen, Streichen
Annahme: Wir speichern knotenorientiert;
nichts in den Blättern.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
41
Betrachte Knoten u mit l Kindern:
u
s1
s2
...
si-1
...
si ...
sl-1
Ti . . .
u hat Schlüssel s1 , s2 ,..., sl −1. (geordnet!)
Sei Ti der i-te Unterbaum von u
Für alle v ∈ Ti und alle Schlüssel „ s ∈ v„“ gilt :
s ≤ si , falls i = 1
si −1 ≤ s ≤ si , falls 1 < i < l
si −1 ≤ s, falls i = l
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
42
Zugriff auf (a,S):
Starte in Wurzel w und suche den kleinsten
Schlüssel si in w mit a ≤ si .
Falls si existiert:
if a = si
then gefunden
else w ← i - tes Kind von w ;
suche rekursiv weiter
fi
Falls si nicht existiert : w ← rechtestes Kind ;
suche rekursiv weiter
Laufzeit: O((log k n ) ⋅ k )
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
43
Einfügen (a,S):
(Erfolglose) Suche ende in Blatt b mit Elternknoten v,
welcher l Kinder hat.
Sei si der kleinste Schlüssel in v mit a<si (falls existent).
Füge neuen Schlüssel a in v ein und neues Blatt b′
für a, sodass
a links von si , falls i=1
a zwischen si-1 und si , falls 1<i<l
a rechts von sl-1 , falls si nicht existent
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
44
Also:
v
s1 s2
...
sl-1
14444
4244444
3
l Blätter
s1 s2
... si-1 a si ... sl-1
144444
42444444
3
l + 1 Blätter
Falls l < 2k − 1 ⇒ OK.
Falls l = 2k − 1 : Spalte v in zwei Knoten v′ und v′′ mit
jeweils k Kindern
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
45
Bild:
w
v
sk
w
s1 s2
...
s2k-1
v ′ s1 . . .
sk-1 v′′ sk+1
. . . s2k-1
14444244443
2k Kinder
w bekommt ein Kind mehr und auch einen Schlüssel sk mehr.
Setze Aufspalten falls nötig zur Wurzel des B-Baums hin fort.
Beachte: Tiefe des Gesamtbaums bleibt erhalten, außer wenn
die Wurzel aufgespalten werden muss.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
46
Streichen eines Schlüssels aus einem B-Baum:
Streiche (a,S)
Annahme: a = sj kommt in Knoten u vor.
Mittels Zugriff (a,S) suche zunächst Knoten u,
in dem a als Schlüssel sj vorkommt. Wir nehmen an,
die Suche ende erfolgreich.
allg. Situation:
.......... sj-1
Tj
sj
............. u
Tj+1
Fallunterscheidung:
1.) Falls Tj ein Blatt ist, so lösche sj und Tj.
2.) Tj ist kein Blatt: Sei s der rechteste Schlüssel in Tj.
Ersetze sj durch s und lösche s samt „rechtestem“ Blatt in Tj.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
47
Situation:
.... sj-1 sj sj+1 ....
v
s
.... sj-1 s sj+1 ....
v (ohne s)
Sei v der Knoten, in dem s (rechts außen) vorkomme.
Zahl der Kinder in v ist damit um 1 verringert:
Sei r die ursprüngliche Zahl der Kinder in v
mit k ≤ r ≤ 2k − 1.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
48
a) Falls r > k (bzw. r > 2, falls v Wurzel), so fertig, da B-BaumEigenschaft gewahrt bleibt.
b) Falls r = 2 und v Wurzel ist, so hat v nach Entfernung von s
nur noch ein Kind.
Dann „streiche“ die Wurzel.
Alle Blätter bleiben auf gleicher Tiefe, die Baumhöhe
verringert sich um 1.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
49
c) Sei r = k und v keine Wurzel. Sei w Elternknoten von v und
v´ ein „direkter“ Geschwisterknoten links von v.
Weiter sei s´ der Schlüssel in w zwischen den
Verweisen auf v und v´. Also:
.... s´´ s´ ....
s1´ .... sl´
v´
k ≤ l + 1 ≤ 2k − 1
Verschmelze v und v´:
.... s´´ ....
w
s1 s2 .... sk-2
v
nur k-1 Kinder, zu wenig
w
s1´ .... sl´ s´ s1 .... sk-2
vneu
vneu hat jetzt mind. 2k-1 und höchstens 3k-2 Kinder.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
50
α) Falls vneu mehr als 2k-1 Kinder hat, so spalte vneu wieder
in zwei Knoten auf (wie beim Einfügen), um die
B-Baum-Eigenschaft zu erfüllen:
Jedes der Kinder hat dann mind. k und
 3k 
höchstens   - 1 Kinder.
2
β ) Falls vneu genau 2k-1 Kinder hat, so muss nicht gespalten
werden. Jedoch hat w nun ein Kind verloren und so
muss rekursiv mit w fortgefahren werden.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
51
Zusammenfassend ergibt sich:
Satz: Zugriff / Einfügen / Streichen kann in B-Bäumen
der Ordnung k, welche n Schlüssel verwalten,
in Zeit O(k ·logk n) durchgeführt werden.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
52
Nachtrag zu B-Bäumen
• in vielen Lehrbüchern wird eine leicht veränderte
Definition von B-Bäumen verwendet (anderes fan-out):
Modifizierte Definition von B-Bäumen:
Ein B-Baum der Ordnung k ist ein Baum,
- dessen Blätter alle gleiche Tiefe haben,
- die Wurzel mindestens 2 Kinder und jeder andere
- innere Knoten mind. k+1 Kinder hat und
- jeder innere Knoten höchstens 2k+1 Kinder besitzt.
Lemma: Sei T ein B-Baum der Ordnung k mit Höhe h und N
gespeicherten Elementen. Dann gilt:
h +1
h
2 ⋅ (k + 1) ≤ N + 1 ≤ (2k + 1)
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
53
• Hierbei werden bei B-Bäumen die Datensätze sowohl in
den inneren Knoten als auch in den Blättern gespeichert.
• Unter Verwendung dieser Definition ergibt Logarithmieren
log ( 2 k +1) ( N + 1) − 1 ≤ h ≤ log k +1
Vorlesung Algorithmen (RN/MK/AZ)
N +1
2
WSI für Informatik, Universität Tübingen
54
Beispiel für Problem beim Einfügen in B-Bäumen
5 11 16 21
1 2 3 4
6 7 8 10
k=2
h=1
12 13 14 15 17 18 19 20 22 23 24 25
Einfügen (9) 6 7 8 9 10
5 8 11 16 21
11
5 8
1 2 3 4
6 7
Baum wird um
eine Stufe höher
16 21
9 10
Vorlesung Algorithmen (RN/MK/AZ)
h=2
12 13 14 15 17 18 19 20 22 23 24 25
WSI für Informatik, Universität Tübingen
55
5.4 B*-Bäume
B*-Bäume sind eine Datenstruktur, die ebenfalls für Zugriff
auf externe Speicher entworfen wurde. Sie ist allerdings
blattorientiert, d.h. alle Informationen (Records in DBSystemen) werden in den Blättern gespeichert, die inneren
Knoten dienen nur zur Suche.
Definition: Ein B*-Baum der Ordnung k ∗ ≥ 2 ist ein Baum,
–
–
–
–
–
–
bei dem alle Einträge in den Blattknoten gespeichert sind,
jedes Blatt hat mindestens k und höchstens 2k Einträge
jeder Pfad vom Wurzelknoten zu einem Blatt hat die Länge h*,
jeder innere Knoten hat mindestens k* + 1 Söhne,
die Wurzel ist entweder ein Blatt oder hat mindestens 2 Söhne,
jeder Knoten hat höchstens 2k* + 1 Söhne.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
56
• Beispiel für einen B*-Baum
k* = 2
k=2
h=2
25 73
8 13 20
33 45 61 67
78 86
Blätter
prev
69 data69 70 data70 71 data71 72 data72
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
next
57
Prinzipien bei B*-Bäumen:
• möglichst hohes fan-out ( 2k ∗ ≈ 1000 ), um die Zahl der
Knotenzugriffe zu minimieren. Ein Knoten ist meist mit
einer Hauptspeicherseite (page) identisch.
• Blätter werden zusätzlich durch Zeiger nach links und
rechts verbunden, um auch eine schnelle sequentielle
Bearbeitung (Lesen) der Daten zu ermöglichen, ohne
immer über die Baumstruktur gehen zu müssen
• Für die Zahl der Datenelemente eines B*-Baumes gilt:
∗
2 ⋅ (k + 1)
h −1
(
∗
)
h
⋅ k ≤ N ≤ 2k + 1 ⋅ 2k
h
N
h −1
∗
∗
(k + 1) ≤
≤ 2k + 1
2k
(
Vorlesung Algorithmen (RN/MK/AZ)
)
WSI für Informatik, Universität Tübingen
58
B*-Baum mit minimaler
#Elementen, max. Höhe
2
k* = 2,
k = 2,
h=2
B*-Baum mit maximaler
#Elementen, min. Höhe
2k*+1
2k*+1
k*+1
k
k
k
k
k
k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
N ≤ (2k ∗ + 1) h ⋅ 2k
2 ⋅ (k ∗ + 1) h −1 ⋅ k ≤ N
Hieraus erhält man wieder durch Logarithmieren:
N
N
log ( 2 k *+1)
≤ h ≤ 1 + log k *+1
2k
2k
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
59
Weiteres über B*-Bäume
• Rebalancierung geschieht analog zu B-Bäumen
• B*-Bäume spielen eine sehr große Rolle als
Indexstrukturen für Datenbanksysteme.
• Alle relationalen DB-Systeme verwenden sie als Index für
Primärschlüssel, in versch. Varianten
• Wurzelseite des B*-Baums wird i.A. im Hauptspeicher als
„nicht ersetzbar“ markiert
• In DB-Implementierungen wird oft ein Seiten-Unterlauf
toleriert, weil er meist durch spätere Einfügungen wieder
kompensiert wird. Vermeidet locking auf Indexseiten.
• Ggf. spätere Garbage-Collection
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
60
5.5. Mengenoperationen mit Suchbäumen
Mengen werden häufig entweder als Bitvektoren (wenn das
Universum U der mögl. Mengenelemente klein ist) oder
als Suchbäume gespeichert (wenn U groß ist).
Wir betrachten im Folgenden die Speicherung von Mengen
als Suchbäume
1. Ist S als Suchbaum T gespeichert, so lässt sich die
Operation Seq(T) (S der Größe nach sortiert ausgeben) in
Zeit O(||S||) ausführen.
Beweis: T in inorder-Reihenfolge durchlaufen.
2. Ist S als Folge x1 < x2 < ... < xn gegeben, so lässt sich in
Zeit O(||S||) ein Suchbaum erstellen, der gleichzeitig AVL
und BB[1/3]-Baum ist.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
61
Gewünschte Mengenoperationen:
if S1 ⊆ S 2 then true else false
• IstTeilmenge (S1, S2)
S3 ← S1 ∪ S 2 , S3 Suchbaum
• Vereinigung (S1, S2, S3)
S3 ← S1 ∩ S 2 ,
• Durchschnitt (S1, S2, S3)
S3 ← S1 − S 2 ,
• Differenz (S1, S2 , S3)
S 2 ← S1,
• Kopie (S1, S2)
• Anhängen (S1, S2 , S3)
if max(S1 ) < min( S 2 ) then
• Spalten (S1, a, S2 , S3)
S 2 ← {x ∈ S1 x ≤ a},
Vorlesung Algorithmen (RN/MK/AZ)
S3 ← S1 ∪ S 2 ,
S3 ← {x ∈ S1 x > a}
WSI für Informatik, Universität Tübingen
62
Lemma: Bei Speicherung von Mengen als Suchbäume
können die Operationen IstTeilmenge, Vereinigung,
Durchschnitt und Differenz in Zeit O(||S1||+||S2||), die
Operation Kopie in Zeit O(||S1||) ausgeführt werden.
Beweis:
a) Kopie ist klar
b) Seien T1 und T2 Suchbäume für S1 und S2.
i) Bilde Seq(T1) und Seq(T2),
ii) Führe die Operationen auf den geordneten Folgen aus i)
aus (dies kann gleichzeitig mit i) geschehen
iii) bilde aus der Folge aus ii) einen Suchbaum
Zeitbedarf insgesamt: O(||S1||+||S2||).
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
63
Im Folgenden nehmen wir an, dass die Mengen als AVLBäume gespeichert sind.
Hilfsalgorithmus Anhängen*(T1, a, T2, T3)
Gegeben: AVL-Bäume T1, T2 für S1, S2, sowie Element a. Es
gelte max(S1) < a < min(S2)
Gesucht: AVL-Baum T3 für S3 = S1 ∪ {a}∪ S 2
Beispiel:
T1
T2
10 v
a
25
20
u 15
7
22
30
5
8 12 18
35
4
6
9
16
3
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
64
1. Versuch: Sei o.B.d.A. Höhe(T1 ) ≥ Höhe(T2 )
a) Steige in T1 ganz rechts hinab bis zum Knoten u mit
Höhe(Tu) = Höhe(T2).
b) i) u ist Wurzel von T1:
a
Mache a zum Vater von T1 und T2
T1 T2
Höhe (T1) = Höhe (T2)
ii): u hat Vater v:
w1 T1
Mache a zum Vater von T2
a
v
und zum Vater von u,
mache v zum Vater von a
u
Fehlversuch!
Warum funktioniert das nicht immer?
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
hu
h2 w2 T2
65
Gründe für den Fehlversuch:
1. Knoten u existiert nicht immer, denn die Höhe der
Bäume kann beim Absteigen um mehr als je 1 vermindert
werden (im Beisp. Folie 64: Höhe(10) = 4, Höhe(15) = 2)
2. Der neue Baum ist i. allg. kein AVL-Baum und lässt sich
auch nicht durch einfaches Rebalancieren dazu machen.
Analyse: Sei T AVL-Baum und sei v Vater von u.
v
Seien hu, hv die Höhen von u bzw. v.
u
a) Es gilt hv > hu ≥ hv − 2 , da T AVL-Baum
b) Wenn u einziger Sohn von v ist, folgt hu = 0
c) hu = hv − 2 gdw. der Teilbaum von v, in dem u liegt,
ist kleiner als der andere Teilbaum von v.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
66
Folgerung: Beim Abstieg ganz rechts im Baum sinkt die
Höhe der Unterbäume um 1 oder 2 bis zur Höhe 1 oder 0.
2. Versuch. Sei o.B.d.A. Höhe(T1 ) ≥ Höhe(T2 )
Algorithmus Anhängen*(T1, T2, a, T3)
1. Steige in T1 ganz rechts ab bis zum ersten Knoten u mit
hu ≤ Höhe(T2 ) + 1
T1 =: T3
w
1
2. Mache a zum Vater von u und T2.
a
Falls u in T1 einen Vater v hatte,
v
mache a zum rechten Sohn von v
T2
w
2
h
u
2
3. Rebalanciere ab v aufwärts.
hu
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
67
Korrektheit des Algorithmus:
a) der neue Baum T ist Suchbaum für S3 = S1 ∪ {a}∪ S 2
b) T ist AVL-Baum, denn
1. u existiert nach Folgerung, d.h. T existiert
2. Sei h2 = Höhe(T2), h:= hu
also h2 ≤ hu = h ≤ h2 + 1 , daher a in Balance
v
a
h*
hu=h u
h+1
h2 w2 T2
3 Fälle: h* = h-1,
h* = h,
h* = h+1.
Vorlesung Algorithmen (RN/MK/AZ)
zu zeigen jeweils: lokale
Rebalancierungen auf dem
Suchpfad liefern AVL-Baum
WSI für Informatik, Universität Tübingen
68
Fall 2.1: h* = h-1, daraus folgt h = h2+1, denn dann wurde
der rechte Teilbaum von T1 in Einerschritten
abwärts bis hu = h = h2+1 traversiert.
u h+1
v h+2
DRot.L(v)
a h
a h+1
h v
h*=h-1
hu=h u h2=h-1 w2
h´ h´´
Fall 2.2: h* = h
v h+2
a
h*=h
h+1
hu=h u h2=h-1 w2
Vorlesung Algorithmen (RN/MK/AZ)
h*=h-1 h´ h´´ h-1 w2
in Balance, nicht höher als
vorher, Rebalancierung fertig
in Balance, höher geworden,
Aufstieg und Rebalancierung
fortsetzen
WSI für Informatik, Universität Tübingen
69
Fall 2.3: h* = h+1
v h+2
h*=h+1 a h+1
hu=h u
in Balance, nicht höher als
vorher, Rebalancierung fertig
h2=h w2
Zeitbedarf: O(Höhe(T1) – Höhe(T2)),
denn man muss ganz rechts in T1 einen Weg der Länge
Höhe(T1) – Höhe(T2)+c ab- und evtl. wieder aufsteigen.
Bem. Der Fall Höhe(T1 ) < Höhe(T2 ) geht analog
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
70
Algorithmus Anhängen (S1, S2 , S3)
• Sei Ti AVL-Suchbaum für Si mit i = 1, 2;
• sei max(S1 ) < min( S 2 )
1. Lösche größtes a aus S1 in T1 (a ist rechtester Knoten),
es entstehe T1´, a, T2
2. Anhängen* (T1´, a, T2 , T3).
3. Dann ist T3 AVL-Suchbaum für S3 = S1 ∪ S 2
Zeitbedarf: 1. O(Höhe(T1))
2. O( Höhe( S1 ) − Höhe( S 2 ))
≤ O(max( Höhe(T1 ), Höhe(T2 )))
= O (max(log S1 , log S 2 ))
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
71
Algorithmus Spalten (S1, a, S2 , S3)
Sei T1 AVL-Suchbaum für S1;
Verwalte linke und rechte Liste von Knoten u. Teilbäumen
1. Steige in den Suchpfad durch Suche(a) hinab.
Sei v aktueller Knoten:
v
a) Suchpfad führt zu rechtem Sohn von v:
Nimm T, v in linke Liste auf.
b) Suchpfad führt zu linkem Sohn von v:
Nimm v, T in rechte Liste auf.
c) Suchpfad endet bei v = a:
Nimm T´, v in linke Liste auf,
Nimm T´´ in rechte Liste auf.
d) Suchpfad endet bei v = b mit b ≠ a
Falls a < b, nimm v, T in rechte Liste auf,
falls a > b, nimm T, v in linke Liste auf.
Vorlesung Algorithmen (RN/MK/AZ)
T
v
T
a
T´ T´´
b
b
WSI für Informatik, Universität Tübingen
T
T
72
• Es entstehen Listen, jeweils aufsteigend sortiert sind.
Abarbeitung
links: T1´, a1´, T2´, a2´, ... Tl´, al´.
rechts: (am´´), Tm´´, ... a2´´, T2´´, a1´´, T1´´. Abarbeitung
2. Wende sukzessiv Anhängen* auf die linke und rechte Liste
an, kleine Bäume zuerst:
links: Einfügen (Tl´, al´) = Tl*
*
′
′
For i:= l downto 2 do Anhängen*( Ti −1 , ai −1 , Ti , Ti *−1 )
es entstehe T2
rechts: Einfügen (Tm´´, am´) = Tm*
*
For i:= m downto 2 do Anhängen*( Ti , ai′′−1 , Ti′−′1 , Ti *−1 )
es entstehe T3
Es gilt: T2 und T3 sind AVL-Suchbäume für
S 2 = {x ∈ S1 x ≤ a}, S3 = {x ∈ S1 x > a}
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
73
Beispiel für Spalten (S1, a, S2 , S3)
a=18 T1
12
8
6
links von 18:
20
25
15 22
13 18
33
30
16 19
T1´, a1´, T2´, a2´, T3´, a3´.
8 12 13 15 16 18
Abarbeitung
6
rechts von 18:
T2´´, a1´´, T1´´.
19
Abarbeitung
20 25
22
33
30
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
74
Aufbau der Teilbäume durch Einfügen und Anhängen*
links von 18:
T1´, a1´, T2´, a2´, T3´, a3´.
8 12 13 15 16 18
6
16 Einfügen (T3´, a3´) = T3*
T2*
T2 = T1*
8
6
Abarbeitung
12
18
15
13 16
15
18
13 16
18
*
′
′
T
,
a
,
T
,
T
Anhängen*( 2 2 3 2 )
*
*
Anhängen*( T1′, a1′, T2 , T1 )
Vorlesung Algorithmen (RN/MK/AZ)
*
WSI für Informatik, Universität Tübingen
75
Aufbau der Teilbäume durch Einfügen und Anhängen*
rechts von 18:
T2´´, a1´´, T1´´.
19
Abarbeitung
20 25
22
20
T2*
19
19
25
20
33
19 22 30
33
30
T2 = T1*
25
Rot.Links(20) ist Teil v.
22 33 Anhängen*(T2* , a1′′, T1′,′ T1* )
30
*
*
T
Zwischenzustand Anhängen*( 2 , a1′′, T1′,′ T1 )
Einfügen (T2´´, a2´) = T2*
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
76
Zeitbedarf von Spalten (S1, a, S2 , S3):
Sei hi′ = Höhe(Ti′), hi ∗ = Höhe(Ti ∗ ),
Es gilt a) hi′+1 ≤ hi′,
umständlich zu zeigen,
b) h′ − h ∗ ≤ h′ − h′ + 2
hier ohne Beweis
i −1
i
i −1
i
∗
∗
(
)
Also Aufbau von Ti −1 aus Ti′−1 , Ti kostet c ⋅ hi′−1 − hi ∗ + 1
∗
T
Zeit für den Aufbau von 1 aus T1′, ...Tl′ :
2
(
)
2
c ⋅ ∑ hi′−1 − hi + 1 ≤ c ⋅ ∑ (hi′−1 − hi′ + 3) wegen b)
i =l
∗
i =l
≤ c ⋅ Höhe(T )
Also Zeit für linke und rechte Liste: jeweils O(Höhe(T))
Daher Gesamtzeit des Algorithmus O(Höhe(T)) = O(log ||S||)
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
77
5.5. Optimale Suchbäume
Vor.: Die verwaltete Menge S sei statisch, auf die Elemente x
aus S werde mit unterschiedlicher Häufigkeit zugegriffen
Idee: T ist ein guter Suchbaum für S, falls die häufig
gesuchten Elemente geringe Tiefe haben
Def. (Zugriffsverteilung): Sei S = {x1 ,..., xn } .
Sei β i die Wahrscheinlichkeit für die Suche nach xi, i = 1,
... n, und sei α i die Wahrscheinlichkeit für die Suche nach
einem x mit xi < x < xi+1. Dann heißt
(α , β ) = (α 0 , β1 , α1 ,..., β n , α n )
die Zugriffsverteilung
für die Suche in S.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
78
Beachte:
n
n
• Es muß gelten 0 ≤ α j , β i ≤ 1 und ∑ β i + ∑ α j = 1
i =1
j =0
• Häufig hat man relative Häufigkeiten (Zähler)
α j , β i ≥ 0 für die Suche nach den xi bzw. (xi, xi+1).
Setzt man A = ∑n β i + ∑n α j
i =1
α j = α j A,
j =0
β =β /A
so ist (α , β ) = (α 0 , β1 , α1 ,..., β n , α n )
eine
Zugriffswahrscheinlichkeit.
• Sei T ein mit Blättern (xi, xi+1) erweiterter Suchbaum für S, sei bi die Tiefe von Knoten xi in T,
sei ai die Tiefe des Blattes (xi, xi+1) in T.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
79
• Dann benötigt Suche (x, S)
– bi +1
– ai
Vergleiche, falls x = xi,
Vergleiche, falls xi < x < xi+1,
• also ist die mittlere #Vergleiche für Suche (x, S)
C = ∑i =1 β i (1 + bi ) + ∑ j =0 α j a j
n
n
Def.: Sei T ein erweiterter Suchbaum mit Gewichten
β i für die Knoten xi und α j für die Blätter (xj, xj+1)
und seien bi = Tiefe (xi), aj = Tiefe (xj, xj+1).
n
n
T
P = ∑i =1 β i (1 + bi ) + ∑ j =0 α j a j
Dann heißt
die gewichtete Weglänge von T. Sie heißt
n
n
normiert, falls 0 ≤ α j , β i ≤ 1 und ∑i =1 β i + ∑ j =0 α j = 1
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
80
• Beispiel: Suchbaum mit 4 Knoten S = {10, 20, 30, 40} und
Zugriffshäufigkeiten
i
0
1
2
3
4
1/6
0
0
1/8
5/12
αi
-1/24 1/8
1/8
0
βi
T 1/8 30
1/24 10
...,10
Tiefe 0
40 0
1/8
20
30,40 40,...
1/6 10,20 20,30 1/8 5/12
0
P = ∑i =1 β i (1 + bi ) + ∑ j =0 α j a j
n
T
n
= 1 / 24 ⋅ 2 + 1 / 8 ⋅ 3 + 1 / 8 ⋅1 + 0 ⋅ 2
+ 1 / 6 ⋅ 2 + 0 + 0 + 1 / 8 ⋅ 2 + 5 / 12 ⋅ 2
=2
T ist optimaler Suchbaum für S
0
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
81
Def.: Sei T ein erweiterter Suchbaum für S = {x1, ... xn} und
sei (α , β ) = (α 0 , β1 , α1 ,..., β n , α n ) eine Zugriffsverteilung.
T heißt optimaler Suchbaum für S und (α , β ), falls für
jeden Suchbaum T´ für S gilt P T ≤ P T ′ .
Problem: wie bestimmt man einen optimalen Suchbaum für
eine gegebene Menge S und Zugriffsverteilung (α , β ) ?
Lösung: Dynamisches Programmieren
Zerlege das Problem in nicht disjunkte Teilprobleme, von
denen die kleinsten Teilprobleme direkt gelöst und in eine
Tabelle (Matrix) eingetragen werden. Größere
Teilprobleme werden aus den Lösungen kleinerer
Probleme mit Hilfe der Tabelle bestimmt.
Unterschied Teile & Beherrsche: dort disjunkte Teilprobleme
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
82
Dynamisches Programmieren für opt. Suchbäume:
• wir bestimmen opt. Suchbäume Tij für {xi, ... xj}.
• Sei wij = α i −1 + β i + α i + ... + β j + α j das Gewicht von Tij,
xrij = xm sei die Wurzel von Tij mit i ≤ rij ≤ j .
Pij sei die gewichtete Weglänge von Tij
Pij/wij sei die normierte gewichtete Weglänge von Tij
Idee: Baum Tij besteht aus einem Wurzelknoten xm und
Teilbäumen Ti,m-1 und Tm+1,j, die beide optimale Suchbäume für ihre Teilmengen {i, ..., m-1} und {m+1, ..., j}
sind.
Bestimme m so, dass Tij minimale
xm
gewichtete Weglänge hat.
Ti,m-1
Tm+1,j
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
83
Lemma 1: Sei Tij ein opt. Suchbaum für {xi, ... xj} mit Wurzel
xm und linkem bzw. rechtem Teilbaum Tl bzw. Tr und
gewichteten Weglängen Pl bzw. Pr. Dann gilt:
a) Pij = Pl + Pr + wij.
b) Tl ist opt. Suchbaum für {xi, ... xm-1},
c) Tr ist opt. Suchbaum für {xm+1, ... xj}.
Beweis: Seien
akl, bkl
akr, bkr
ak, bk
Dann gilt
Tiefen der Blätter/Knoten in Tl,
Tiefen der Blätter/Knoten in Tr,
Tiefen der Blätter/Knoten in Tij.
bzw. ak = 1+akl
ak = 1+akr
bk = 1+bkr
bzw. bk = 1+bkl
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
84
Pij = β m ⋅1 + ∑k =i β k (1 + 1 + bk ) + ∑k =i −1α k (1 + ak )
m −1
m −1
l
l
+ ∑m +1 β k (1 + 1 + bk ) + ∑k = m α k (1 + ak )
j
r
j
r
= wij + Pl + Pr
b) + c) Wäre Tl oder Tr nicht optimal, so wäre auch Tij nicht
optimal
Folgerung: die Tij lassen sich mit einer Laufvariablen k = j – i
für k = 0, 1, ..., n-1 so berechnen:
k=0:
xi
xi-1,xi xi,xi+1
k>0: bestimme m = rij aus {i, ..., j} so, dass
Pi,m-1 + Pm+1,j + wij minimal ist
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
85
wij = wi , j −1 + α j + β j
Setze
Pij = wij + Pi ,m −1 + Pm +1, j
Beachte: rij = m zerlegt die Menge {xi, ... xj} in
{xi, ... xm-1}, {xm}, {xm+1, ... xj},
also legen die rij alle Teilbäume Tij eindeutig fest.
Beispiel:
T
k = 0: r = 1, r = 2, r = 3, r = 4,
11
22
33
44
P11=5/24, P22=1/8, P33=2/8, P44=13/24
30 Tiefe 0
k = 1: r12 = 1, r23 = 3, r34 = 4,
1/8
P12=11/24, P23=1/2, P34=22/24, 1/24 10
40 0
1/8
k = 2: r13 = 3, r24 = 4,
...,10 20
30,40 40,...
P13 = 25/24, P24 = 31/24,
k = 3: r14 = 3,
1/6 10,20 20,30 1/8 5/12
P14 = 48/24 = 2
0
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
0
86
Algorithmus: Optimaler Suchbaum mit Dyn. Prog.
1. begin
2.
for i:= 0 to n do Pi+1,i := 0, wi+1,i := αi endfor
3.
for k:= 0 to n – 1 do
4.
for i:= 1 to n – k do
5.
j:= i + k
/* k = j – i */
wij = wi , j −1 + α j + β j
6.
7.
Bestimme m so, dass Pi,m-1 + Pm+1,j minimal,
i≤m≤ j
8.
rij:= m
9.
Pij = wij + Pi ,m −1 + Pm +1, j
10.
endfor
11.
endfor
12. end
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
87
• Korrektheit: siehe Lemma 1 + Folgerung.
• Platzbedarf: 3 quadratische Felder Pij, wij, rij: Θ(n 2 )
• Zeitaufwand:
Θ(n)
– Zeile 2) kostet Zeit
Θ(k + 1)
– Zeile 7) kostet Zeit
n −1
n−k
– Zeilen 3) – 11) kosten T ( n) = ∑ ∑ Θ( k + 1)
k =0
i =1
= ∑k =0 Θ((k + 1)(n − k ))
n −1
= Θ( n 3 )
• Frage: Geht es auch schneller?
• Untersuche innerste Schleife
ri,m-1
(Zeile 7)
xi
Vorlesung Algorithmen (RN/MK/AZ)
xm ri,j
rm+1,j
xm-1 xm+1 xj
WSI für Informatik, Universität Tübingen
88
Lemma 2: Es gibt optimale Suchbäume Tij für {xi, ... xj} mit
ri,j-1
Wurzel rij, so dass
ri+1,j
i ≤ ri , j −1 ≤ ri , j ≤ ri +1, j ≤ j
i i+1
j-1 j
Beweis: Siehe
Knuth: Optimal Binary Search Trees, Acta Informatica 1
(1973), S. 14-25.
Verbesserter Algorithmus:
Ändere Zeile 7) zu
7.
Bestimme m so, dass Pi,m-1 + Pm+1,j minimal,
für ri , j −1 ≤ m ≤ ri +1, j
Zeitbedarf: siehe nächste Folie
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
89
T (n) = ∑k =0 ∑i =1 (ri +1, j − ri , j −1 + 1)
n −1
n−k
= ∑k =0 ∑i =1 (ri +1,i + k − ri ,i + k −1 + 1) wegen j = i + k
n −1
n−k
= ∑k =0 (rn − k +1,n − r1,k + n − k ) Summanden kürzen sich weg
n −1
≤ ∑ k = 0 ( 2 n − k ) = Θ( n 2 )
n −1
Satz: Für S = {x1, ... xn} und Zugriffswahrscheinlichkeit (α , β )
läßt sich mit dynamischem Programmieren in Zeit
T (n) = Θ(n 2 ) ein optimaler Suchbaum berechnen.
Bemerkung: „nahezu optimale“ Suchbäume lassen sich in
linearer Zeit berechnen. Siehe Mehlhorn, Effiziente
Algorithmen, Teubner Verlag, 1977
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
90
5.6 Kantenmarkierte Suchbäume (Tries)
• Bisher wurde die Suche in Bäumen durch Vergleiche x < y
mit x, y ∈ S, gesteuert. Für sehr lange Schlüssel über
einem Alphabet Σ, d.h. S ⊆ Σ∗, sind Vergleiche der Art
„1. Buchstabe von x < 1. Buchstabe von y“ sinnvoller.
• Jetzt bekommen die Knoten eines Baumes mehrere Söhne,
a-Söhne, mit a ∈ Σ .
Definition: Sei Σ ein festes, endliches Alphabet.
a) Ein Baum T = (V, E) heißt Σ-markiert, falls gilt:
i) Jede Kante (u, v) von E ist mit einem a aus Σ markiert,
v heißt dann a-Sohn von u.
ii) Jeder Knoten hat höchstens einen a-Sohn.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
91
∗
b) Sei T = (V, E) Σ-markiert, φ : V → Σ definiert durch
φ (v) = e (leeresWort), falls v Wurzel ist,
φ (v) = φ (u )a, falls v der a - Sohn von u ist.
∗
φ
(v
)
∈
Σ
Wir sagen: v definiert das Wort
φ (v) ist das Wort, das entsteht, wenn man die Buchstaben
auf dem Weg von der Wurzel zu v hintereinander
schreibt.
∗
S
⊆
Σ
c) Sei
. T heißt Kanten-markierter Suchbaum für S
(engl. Trie mit „ie“), falls gilt:
i) Für jedes Blatt u in T ist φ (u ) Anfangswort eines x ∈ S.
ii) Zu jedem x ∈ S gibt es genau ein Blatt u, so dass φ (u )
Anfangswort von x ist.
Das Blatt u trägt als Information das x ∈ S , das mit φ (u )
beginnt (Blatt-orientierte Speicherung).
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
92
Beispiel für Trie mit Σ = {A,..., Z } :
S = {Bauer, Baum, Feld, Hahn, Haus, Hof, Huhn, Hund,
Katze}
B
K
F H
A
E
U
E
A O
L
M
D
R Baum Feld
H
N
U
A
U FH
S
Hahn Haus
Hof
N
T
N
Huhn
D
Hund
Z
E
Katze
Bauer
Beachte: einen Trie gibt es nur für Mengen S, die präfix-frei
sind, d.h. kein x aus S ist echtes Anfangswort eines y aus S.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
93
• Nimmt man im Beispiel noch BAU in S auf, so ist S nicht
mehr präfix-frei.
• Präfix-Freiheit lässt sich stets erreichen, indem ein neuer
Buchstabe $ an jedes Wort aus S angehängt wird. Dann ist
S präfix-frei, z.B. Bau$ kein Präfix mehr von Baum$.
• Auf Σ sei eine Ordnung definiert (z.B. A < B < ... < Z).
Dies liefert eine lexikographische Ordnung auf Σ*.
Ordnet man die Söhne jedes Knotens v so, dass der a-Sohn
links vom b-Sohn steht (für alle a, b aus Σ, a < b), so sind
in den Blättern die Elemente von links nach rechts
aufsteigend sortiert. Es ist dann leicht, S sortiert
auszugeben.
• Algorithmen für Suche, Einfügen, Löschen sind
offensichtlich.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
94
Nachteile von Tries:
• Tries sind oft sehr dünn besetzt, d.h. fast alle Knoten
haben weniger als ||Σ|| Söhne.
• Implementierung der Verweise auf die Söhne als
–
–
Feld: viele Verweise haben den Wert nil/null.
Liste: der Zugriff ist umständlich.
•
Es kann lange Wege ohne Verzweigungspunkte geben,
z.B. bei BAUM, BAUER
Ausweg:
a) Setze Σ = {0, 1}, d.h. ||Σ|| = 2, und betrachte die
Binärcodierung von Buchstaben und Wörtern.
b) Ziehe die Wege ohne Verzweigungspunkte zu einem
Knoten zusammen. Dies ergibt Patricia-Bäume
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
95
Patricia-Bäume
(Practical Algorithm To Retrieve Information Coded In
Alphanumerics)
• Patricia-Bäume sind geeignet für sehr lange Schlüssel
unterschiedlicher Länge.
• Patricia-Bäume sind binäre Bäume, deren linker/rechter
Sohn immer der 0/1-Sohn ist. Jeder innere Knoten hat ein
Feld „Skip“, das angibt, wie lang der Weg ist, den dieser
Knoten repräsentiert, d.h. wie viele Buchstaben überlesen
werden müssen. In den Blättern stehen die Schlüssel oder
Verweise darauf.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
96
Beispiel für Patricia-Bäume
File-Inhalt:
THIS IS THE HOUSE THAT JACK BUILT
Position:
1
6 9
13
19
24
29
S = {BUILT, HOUSE, IS, JACK, THAT, THE, THIS}
Binär-Codierung (hier einfach A = 00001, B = 00010, ...)
BUILT
HOUSE
IS
JACK
THAT
THE
THIS
USA
00010 11000 01010 01101 10111
01000 10000 11000 10110 00101
01010 10110
1
0
01011 00001 00011 01100
29
10111 01000 00001 10111
BUILT
10111 01000 00101
13
10111 01000 01010 10110
HOUSE
1
6
11
16
11000 10110 00001
Vorlesung Algorithmen (RN/MK/AZ)
0
0
0 11 1
1
1
19 9 THIS
1
2
1
24 THAT THE
6
IS
1
JACK
WSI für Informatik, Universität Tübingen
97
• Patricia-Tree: In den Knoten steht das Skip-Feld, d.h. die
Anzahl der Zeichen, die bis zur nächsten Entscheidung
überlesen werden müssen
Suchen (p, x)
/* p ist Zeiger auf Wurzel, x Suchschlüssel */
while p zeigt auf inneren Knoten do
überlies p^.Skip Zeichen
if nächstes Zeichen = 0 then p := p^.LSohn
= 1 then p := p^.RSohn
else if ....
else (d.h. x abgearbeitet): Stop (x nicht in S)
endwhile /* p zeigt jetzt auf ein Blatt u mit Wert j */
Vergleiche im File ab Stelle j, ob hier wirklich x steht.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
98
• Im Beispiel: Suche (p, THAT)
1+ 0 = 1. Buchstabe = 1: rechts
1+11 = 12. Buchstabe = 0: links
12+ 1 = 13. Buchstabe = 0: links
Blatt liefert Index 19 im File, dort steht THAT,
also THAT in S.
• Im Beispiel: Suche (p, USA)
1+ 0 = 1. Buchstabe = 1: rechts (alles wie bei THAT)
1+11 = 12. Buchstabe = 0: links
12+ 1 = 13. Buchstabe = 0: links
Blatt liefert Index 19 im File, dort steht nicht USA,
also USA nicht in S.
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
99
Anwendungen:
1. Frage: Gegeben Wort y aus {0, 1}*.
Welche x aus S beginnen mit y?
Lösung: Suche (Wurzel, y) liefere Knoten v. Nur die
Blätter unter v können Adressen für solche x enthalten,
die mit y beginnen.
2. Bestimme maximales gemeinsames Anfangswort zweier
beliebiger Elemente aus S (nicht vorgegeben)
Lösung: Sei Tiefe (v) die Summe der Skip-Werte auf
dem Weg von der Wurzel nach v. Durchlaufe T und
bestimme inneren Knoten v0 maximaler Tiefe
Übung: Algorithmen für Einfügen und Löschen
Vorlesung Algorithmen (RN/MK/AZ)
WSI für Informatik, Universität Tübingen
100
Herunterladen