Vorlesung 2.5.3
Vorlesung 2.5.3
Vorlesung 2.5.3
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
2.5 Bäume<br />
2.5.1 Binäre Suchbäume<br />
2.5.2 Optimale Suchbäume<br />
<strong>2.5.3</strong> Balancierte Bäume<br />
2.5.4 Skip-Listen<br />
2.5.5 Union-Find-Strukturen<br />
1<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Balancierte Bäume<br />
• Nachteil bei normalen Suchbäumen:<br />
Worst-case Aufwand ist O(n)<br />
• Tritt bei degenerierten Bäumen auf<br />
• Kann durch Balancierung verhindert<br />
werden<br />
• Problem: Stelle Balance in O(log n)<br />
wieder her<br />
2<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Balancierte Bäume<br />
• Gewichtsbalance: Für jeden Knoten<br />
unterscheidet sich die Anzahl der<br />
Knoten im linken und rechten Teilbaum<br />
um maximal eins.<br />
• Höhenbalance: Für jeden Knoten<br />
unterscheidet sich die Höhe des linken<br />
und rechten Teilbaums um maximal<br />
eins.<br />
3<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Balancierte Bäume<br />
• Zur Erinnerung:<br />
– Maximale Zahl von Knoten in einem Baum<br />
der Höhe h ist O(2 h )<br />
– Minimale Zahl von Knoten in einem Baum<br />
der Höhe h ist ΩΩ(h)<br />
– Minimale Zahl von Knoten in einem<br />
balancierten Baum der Höhe h ist ΩΩ(2 h/2 )<br />
4<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Balancierte Bäume<br />
• Zur Erinnerung:<br />
– Minimale Höhe eines Baums mit n Knoten<br />
ist ΩΩ(log n)<br />
– Maximale Höhe eines Baums mit n Knoten<br />
ist O(n)<br />
– Maximale Höhe eines balancierten Baums<br />
mit n Knoten ist O(2×log n)=O(log n)<br />
5<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.5 Bäume<br />
2.5.1 Binäre Suchbäume<br />
2.5.2 Optimale Suchbäume<br />
<strong>2.5.3</strong> Balancierte Bäume<br />
<strong>2.5.3</strong>.1 AVL-Bäume<br />
<strong>2.5.3</strong>.2 Rot-Schwarz-Bäume<br />
<strong>2.5.3</strong>.3 B-Bäume<br />
2.5.4 Skip-Listen<br />
2.5.5 Union-Find-Strukturen<br />
6<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
• Werden wie normale binäre<br />
Suchbäume behandelt<br />
• Jeder Knoten speichert sein<br />
Ungleichgewicht (+1,0,−1)<br />
• Nach Insert() oder Delete()<br />
Wiederherstellung der Balance durch<br />
Rotation<br />
7<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
h<br />
h<br />
h<br />
8<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
h<br />
h<br />
h+1<br />
9<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Einfache<br />
Rotation<br />
h<br />
h<br />
h+1<br />
10<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Einfache<br />
Rotation<br />
h<br />
h<br />
h+1<br />
11<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Einfache<br />
Rotation<br />
h h h+1<br />
12<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
h<br />
h<br />
h<br />
13<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
h<br />
h+1<br />
h<br />
14<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
h<br />
h<br />
h<br />
h<br />
15<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Doppelte<br />
Rotation<br />
h<br />
h<br />
h<br />
h<br />
16<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Doppelte<br />
Rotation<br />
h<br />
h<br />
h<br />
h<br />
17<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Doppelte<br />
Rotation<br />
h<br />
h<br />
h<br />
h<br />
18<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Doppelte<br />
Rotation<br />
h<br />
h<br />
h<br />
h<br />
19<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Doppelte<br />
Rotation<br />
h<br />
h<br />
h<br />
h<br />
20<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
Doppelte<br />
Rotation<br />
h<br />
h<br />
h<br />
h<br />
21<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
AVL-Bäume<br />
• Rotationen müssen ggf. nach oben<br />
propagiert werden<br />
• Im schlechtesten Fall O(log n)<br />
Rotationen bei Delete()<br />
• Nur praktikabel, wenn gesamte<br />
Datenstruktur im Hauptspeicher<br />
22<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.5 Bäume<br />
2.5.1 Binäre Suchbäume<br />
2.5.2 Optimale Suchbäume<br />
<strong>2.5.3</strong> Balancierte Bäume<br />
<strong>2.5.3</strong>.1 AVL-Bäume<br />
<strong>2.5.3</strong>.2 Rot-Schwarz-Bäume<br />
<strong>2.5.3</strong>.3 B-Bäume<br />
2.5.4 Skip-Listen<br />
2.5.5 Union-Find-Strukturen<br />
23<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Binärer Suchbaum, jeder Knoten hat<br />
zwei Söhne oder keinen<br />
• Rote und schwarze Knoten<br />
• Re-Balancing durch Rotationen und<br />
Umfärben<br />
24<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Konsistenzregeln<br />
1. Jeder Knoten ist rot oder schwarz<br />
2. Die Wurzel ist schwarz<br />
3. Die Blätter sind schwarz<br />
4. Die Söhne eines roten Knotens sind<br />
schwarz.<br />
5. Alle Pfade von einem Knoten zu den<br />
nachfolgenden Blättern haben gleich<br />
viele schwarze Knoten<br />
25<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
Blätter werden im Folgenden nicht mehr dargestellt.<br />
26<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Eigenschaften<br />
– Maximales Pfadlängenverhältnis 2:1<br />
– Pfadlängen Θ(log n)<br />
27<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Lemma:<br />
Die Höhe eines Rot-Schwarz-Baums<br />
mit n inneren Knoten ist höchstens<br />
2×ld(n+1)<br />
28<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Die Zahl der schwarzen Knoten auf<br />
einem (dann jeden) Pfad von einem<br />
Knoten x (ausschließlich) bis zu einem<br />
Blatt (einschließlich) sei bh(x)<br />
29<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
bh( 2 ) = 2<br />
7<br />
1 bh( 5 ) = 1<br />
4 6<br />
8<br />
9<br />
30<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Der Baum unter einem Knoten x enthält<br />
mindestens 2 bh(x) −1 innere Knoten<br />
I.A. x ist ein Blatt → 2 bh(x) −1=2 0 −1=0<br />
I.V. Die Beh. gelte für alle y mit<br />
height(y) < height(x)<br />
I.S. x sei ein innerer Knoten mit Söhnen x1,x2<br />
bh(x1), bh(x2) ≥ bh(x)−1<br />
der Baum unter x enthält mindestens<br />
(2 bh(x)−1 −1)+(2 bh(x)−1 −1)+1 = 2 bh(x) −1 innere<br />
Knoten<br />
31<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Es sei h = height(root) die Höhe des Baumes<br />
– Mindestens die Hälfte der Knoten auf<br />
einem Pfad von der Wurzel zu einem Blatt<br />
müssen schwarz sein.<br />
bh(root) ≥ h ∕ 2<br />
n ≥ 2 h/2 −1<br />
h ≤ 2×ld(n+1)<br />
32<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
• Insert(), Delete()<br />
– Wie bei normalen binären Suchbäumen<br />
mit anschließender Wiederherstellung der<br />
Konsistenzbedingungen<br />
– Insert() → drei verschiedene Fälle<br />
– Delete() → vier verschiedene Fälle<br />
– Pseudo-Code: siehe Cormen et al.<br />
33<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
• Jeder eingefügte Knoten wird zunächst<br />
rot gefärbt<br />
• Bei Wiederherstellung durch Umfärben<br />
oder Rotation kann genau eine weitere<br />
Konsistenzverletzung auftreten.<br />
• Propagiere Modifikation nach oben.<br />
34<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
• Mögliche Konsistenzverletzungen<br />
– Neuer Knoten ist Wurzel<br />
– Neuer Knoten ist Nachfolger eines roten Knotens<br />
• Fallunterscheidung nach der Farbe des Onkels<br />
• Konsistenzregeln<br />
1. Jeder Knoten ist rot oder schwarz.<br />
2. Die Wurzel ist schwarz.<br />
3. Die Blätter sind schwarz.<br />
4. Die Söhne eines roten Knotens sind schwarz.<br />
5. Alle Pfade von einem Knoten zu den<br />
nachfolgenden Blättern haben gleich viele<br />
schwarze Knoten.<br />
35<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Großvater<br />
Vater<br />
X<br />
Onkel<br />
Bruder<br />
Neffen<br />
36<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
37<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume Insert – Scheme<br />
up<br />
Onkel<br />
0 Vorgänger schwarz<br />
à nichts zu tun<br />
Rot<br />
Schwarz<br />
1<br />
umfärben<br />
Innen<br />
Außen<br />
2 Rotation 3 Rotation<br />
& Umfärben<br />
38<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Einfügen zunächst wie bei normalen binären Suchbäumen<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
3<br />
39<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 1: Der Onkel ist rot → umfärben und weiter mit<br />
Großvater<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
3<br />
40<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 1: Der Onkel ist rot → umfärben und weiter mit<br />
Großvater<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
3<br />
41<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 1: Der Onkel ist rot → umfärben und weiter mit<br />
Großvater<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
3<br />
42<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 1: Der Onkel ist rot → umfärben und weiter mit<br />
Großvater<br />
7<br />
7<br />
2<br />
8<br />
2<br />
8<br />
1 5<br />
9<br />
1 5<br />
9<br />
4 6<br />
4 6<br />
3<br />
3<br />
43<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
3<br />
44<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn<br />
→ Rotation nach außen und weiter mit äußeren Sohn (Fall 3)<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
3<br />
45<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn<br />
→ Rotation nach außen und weiter mit äußeren Sohn (Fall 3)<br />
7<br />
2<br />
8<br />
1 5<br />
9<br />
4 6<br />
3<br />
46<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn<br />
→ Rotation nach außen und weiter mit äußeren Sohn (Fall 3)<br />
7<br />
1<br />
2<br />
5<br />
4 6<br />
8<br />
9<br />
3<br />
47<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn<br />
→ Rotation nach außen und weiter mit äußeren Sohn (Fall 3)<br />
7<br />
1<br />
2<br />
4<br />
5<br />
6<br />
8<br />
9<br />
3<br />
48<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn<br />
→ Rotation nach außen und weiter mit äußeren Sohn (Fall 3)<br />
7<br />
5<br />
8<br />
2<br />
6<br />
9<br />
1<br />
4<br />
3<br />
49<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn<br />
→ Rotation nach außen und weiter mit äußeren Sohn (Fall 3)<br />
7<br />
5<br />
8<br />
2<br />
6<br />
9<br />
1<br />
4<br />
3<br />
50<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn<br />
→ Rotation nach außen und weiter mit äußeren Sohn (Fall 3)<br />
7<br />
2<br />
1 5<br />
4 6<br />
3<br />
8<br />
9<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
51<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn<br />
→ Rotation nach innen und umfärben<br />
7<br />
5<br />
8<br />
2<br />
6<br />
9<br />
1<br />
4<br />
3<br />
52<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn<br />
→ Rotation nach innen und umfärben<br />
7<br />
5<br />
8<br />
2<br />
6<br />
9<br />
1<br />
4<br />
3<br />
53<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn<br />
→ Rotation nach innen und umfärben<br />
5<br />
7<br />
2<br />
6<br />
8<br />
1<br />
4<br />
9<br />
3<br />
54<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn<br />
→ Rotation nach innen und umfärben<br />
5<br />
7<br />
2<br />
6<br />
8<br />
1<br />
4<br />
9<br />
3<br />
55<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn<br />
→ Rotation nach innen und umfärben<br />
5<br />
2<br />
7<br />
1 4 6<br />
8<br />
3<br />
9<br />
56<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn<br />
→ Rotation nach innen und umfärben<br />
5<br />
2<br />
7<br />
1 4 6<br />
8<br />
3<br />
9<br />
57<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Insert()<br />
Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn<br />
→ Rotation nach innen und umfärben<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
5<br />
2<br />
1 4 6<br />
3<br />
7<br />
8<br />
9<br />
58<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Fallunterscheidung Insert()<br />
1. Onkel ist rot<br />
– Umfärben, Rekursion nach oben<br />
2. Sohn < Vater > Großvater oder<br />
Sohn > Vater < Großvater<br />
– Rotation, weiter mit Fall 3<br />
3. Sohn < Vater < Großvater oder<br />
Sohn > Vater > Großvater<br />
– Rotation, Umfärben, Fertig<br />
59<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Aufwand Insert()<br />
• Suchen der Einfügestelle O(log n)<br />
• Einfügen O(1)<br />
• Konsistenzwiederherstellung<br />
– Umfärbe-Schritte O(log n)<br />
(Schritt vom Enkel zum Großvater)<br />
– Rotationen O(1) (maximal zwei)<br />
• Insgesamt: O(log n)<br />
60<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
• Wie bei normalen binären Suchbäumen<br />
wird der Knoten entweder direkt<br />
gelöscht oder sein Successor wird<br />
gelöscht und der Inhalt wird kopiert.<br />
• Konsistenzwiederherstellung<br />
– Wenn der Knoten rot war, ist nichts zu tun<br />
– Wenn der Knoten schwarz war, gibt es<br />
4 Fälle<br />
61<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
• Falls der tatsächlich entfernte Knoten<br />
schwarz ist, fehlt auf allen Pfaden<br />
innerhalb des entsprechenden Teil-<br />
Baums eine schwarze Marke<br />
• Weise diese schwarze Marke dem<br />
(einen) Nachfolger des gelöschten<br />
Knotens zu. Dadurch wird dieser<br />
schwarz-rot oder doppel-schwarz.<br />
62<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
Del( A )<br />
D<br />
α<br />
B<br />
C<br />
γ<br />
β<br />
63<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
Del( A )<br />
D<br />
α<br />
Succ( ) = A<br />
B<br />
C<br />
γ<br />
β<br />
64<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
Del( A )<br />
D<br />
α<br />
B<br />
C<br />
γ<br />
β<br />
65<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
Del( A )<br />
α<br />
B<br />
D<br />
C<br />
γ<br />
β<br />
66<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
Del( A )<br />
B<br />
D<br />
α<br />
C<br />
γ<br />
β<br />
67<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
Del( A )<br />
B<br />
D<br />
α<br />
C<br />
γ<br />
β<br />
68<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
α<br />
B<br />
D<br />
C<br />
γ<br />
β<br />
69<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
B<br />
D<br />
α<br />
C<br />
β<br />
γ<br />
70<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
B<br />
D<br />
α<br />
C<br />
β<br />
γ<br />
71<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Erinnerung<br />
Rot-Schwarz-Bäume: Delete()<br />
B<br />
D<br />
α<br />
C<br />
oder<br />
C<br />
C<br />
β<br />
γ<br />
72<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
• Umfärben und Rotationen<br />
– Erhalte die Zahl schwarzer Marken der<br />
Sub-Bäume<br />
• Abbruchbedingungen<br />
– Ein schwarz-roter Knoten wird schwarz<br />
gefärbt<br />
– Ein Wurzelknoten wird erreicht<br />
(doppel-schwarz kann einfach wegfallen,<br />
da die Wurzel auf allen Pfaden liegt)<br />
73<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume – Delete - Scheme<br />
Up<br />
Bruder<br />
0<br />
: rot-‐schwarz à schwarz <br />
(nichts weiter zu tun) <br />
rot<br />
1<br />
Rot. und umfärben<br />
schwarz<br />
Neffen<br />
beide innen rot,<br />
schwarz<br />
außen rot<br />
außen schwarz<br />
2 3 4<br />
Umfärben Rot. und umfärben Rot. und umfärben<br />
74<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 1: Der Bruder ist rot → Rotation nach links<br />
und umfärben<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
75<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 1: Der Bruder ist rot → Rotation nach links<br />
und umfärben<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
76<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 1: Der Bruder ist rot → Rotation nach links<br />
und umfärben<br />
B<br />
D<br />
A<br />
C<br />
E<br />
α β γ δ<br />
ε<br />
ζ<br />
77<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 1: Der Bruder ist rot → Rotation nach links<br />
und umfärben<br />
B<br />
D<br />
A<br />
C<br />
E<br />
α β γ δ<br />
ε<br />
ζ<br />
78<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 1: Der Bruder ist rot → Rotation nach links<br />
und umfärben<br />
D<br />
B<br />
E<br />
A<br />
C<br />
ε<br />
ζ<br />
α<br />
β<br />
γ<br />
δ<br />
79<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 1: Der Bruder ist rot → Rotation nach links<br />
und umfärben<br />
D<br />
B<br />
E<br />
A<br />
C<br />
ε<br />
ζ<br />
α<br />
β<br />
γ<br />
δ<br />
80<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 1: Der Bruder ist rot → Rotation nach links<br />
und umfärben<br />
α<br />
A<br />
β<br />
B<br />
γ<br />
C<br />
δ<br />
D<br />
E<br />
A<br />
ε ζ α β<br />
B<br />
γ<br />
C<br />
D<br />
δ<br />
ε<br />
E<br />
ζ<br />
weiter mit Fall 2,3,4: der Bruder ist nicht rot<br />
81<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz<br />
→ umfärben und Marke nach oben weitergeben<br />
(Ende, falls “B” rot war, sonst weiter mit “B”)<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
82<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz<br />
→ umfärben und Marke nach oben weitergeben<br />
(Ende, falls “B” rot war, sonst weiter mit “B”)<br />
B<br />
Nun fehlt in diesem<br />
Teilbaum auch ein<br />
schwarzer Knoten!<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
83<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz<br />
→ umfärben und Marke nach oben weitergeben<br />
(Ende, falls “B” rot war, sonst weiter mit “B”)<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
84<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz<br />
→ umfärben und Marke nach oben weitergeben<br />
(Ende, falls “B” rot war, sonst weiter mit “B”)<br />
α<br />
A<br />
β<br />
B<br />
γ<br />
C<br />
δ<br />
D<br />
ε<br />
E<br />
ζ<br />
α<br />
A<br />
β<br />
B<br />
γ<br />
C<br />
δ<br />
D<br />
ε<br />
E<br />
ζ<br />
85<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot<br />
und dessen äußerer Sohn ist schwarz<br />
→ Rotation nach außen und umfärben<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
86<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot<br />
und dessen äußerer Sohn ist schwarz<br />
→ Rotation nach außen und umfärben<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
87<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot<br />
und dessen äußerer Sohn ist schwarz<br />
→ Rotation nach außen und umfärben<br />
B<br />
A<br />
C<br />
D<br />
α<br />
β<br />
γ<br />
δ<br />
E<br />
ε<br />
ζ<br />
88<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot<br />
und dessen äußerer Sohn ist schwarz<br />
→ Rotation nach außen und umfärben<br />
B<br />
A<br />
C<br />
D<br />
α<br />
β<br />
γ<br />
δ<br />
E<br />
ε<br />
ζ<br />
89<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot<br />
und dessen äußerer Sohn ist schwarz<br />
→ Rotation nach außen und umfärben<br />
B<br />
A<br />
C<br />
D<br />
α β γ<br />
E<br />
δ<br />
ε<br />
ζ<br />
90<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot<br />
und dessen äußerer Sohn ist schwarz<br />
→ Rotation nach außen und umfärben<br />
B<br />
A<br />
C<br />
D<br />
α β γ<br />
E<br />
δ<br />
ε<br />
ζ<br />
91<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot<br />
und dessen äußerer Sohn ist schwarz<br />
→ Rotation nach außen und umfärben<br />
α<br />
A<br />
β<br />
B<br />
D<br />
C E<br />
γ δ ε ζ<br />
… weiter mit Fall 4<br />
A<br />
B<br />
α β γ<br />
C<br />
δ<br />
D<br />
ε<br />
E<br />
ζ<br />
92<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
93<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
94<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
95<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
96<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
97<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
A<br />
D<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
98<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
D<br />
A<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
99<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
B<br />
D<br />
A<br />
C<br />
E<br />
α<br />
β<br />
γ<br />
δ<br />
ε<br />
ζ<br />
100<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
D<br />
B<br />
E<br />
A<br />
C<br />
ε<br />
ζ<br />
α<br />
β<br />
γ<br />
δ<br />
101<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume: Delete()<br />
Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot<br />
→ umfärben und Rotation nach innen<br />
α<br />
A<br />
β<br />
B<br />
γ<br />
C<br />
δ<br />
D<br />
ε<br />
E<br />
ζ<br />
α<br />
A<br />
β<br />
B<br />
γ<br />
C<br />
D<br />
δ<br />
ε<br />
E<br />
ζ<br />
102<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Aufwand Delete()<br />
• Suchen des Löschknotens O(log n)<br />
• Löschen O(1)<br />
• Konsistenzwiederherstellung<br />
– Umfärbe-Schritte O(log n)<br />
– Rotationen O(1) (maximal drei)<br />
• Insgesamt: O(log n)<br />
103<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.5 Bäume<br />
2.5.1 Binäre Suchbäume<br />
2.5.2 Optimale Suchbäume<br />
<strong>2.5.3</strong> Balancierte Bäume<br />
<strong>2.5.3</strong>.1 AVL-Bäume<br />
<strong>2.5.3</strong>.2 Rot-Schwarz-Bäume<br />
<strong>2.5.3</strong>.3 B-Bäume<br />
2.5.4 Skip-Listen<br />
2.5.5 Union-Find-Strukturen<br />
104<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
B-Bäume<br />
• Alternative Interpretation/Implementierung<br />
der Rot-Schwarz-Bäume führt auf 2,4-Bäume<br />
• Diese sind ein Spezialfall des allgemeineren<br />
Konzepts von B-Bäumen<br />
• Vorteil: größere Mengen von Knoten werden<br />
zusammengefasst und passen dadurch besser<br />
in einen Festplatten-Block<br />
• Hysterese: Nicht in jedem Schritt muss<br />
rebalanciert werden.<br />
105<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Speicherhierarchie<br />
• Mit zunehmendem Abstand vom<br />
Prozessor ...<br />
– ... steigt die Speicherkapzität<br />
– ... wächst die zugreifbare Blockgröße<br />
– ... sinkt die Zugriffsgeschwindigkeit<br />
106<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Speicherhierarchie<br />
• Effiziente Algorithmen ...<br />
– ... führen häufige Berechnungen auf kleinen<br />
Datenmengen durch (“innere Schleife”)<br />
– ... minimieren die Zugriffe auf externe<br />
Speicherebenen<br />
– ... passen die Größe der Datenstrukturen an<br />
die jeweiligen Blockgrößen an<br />
107<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Speicherhierarchie<br />
• Bei der Suche in externen Binärbaumstrukturen<br />
hängt die Zugriffszeit im<br />
Wesentlichen von der Verteilung der<br />
Knoten auf Festplatten-Sektoren ab.<br />
• Fasse Teilbäume in Sektoren zusammen<br />
108<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Speicherhierarchie<br />
109<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Speicherhierarchie<br />
110<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Speicherhierarchie<br />
111<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Definition : B-Bäume<br />
• Jeder Knoten x hat die folgenden Felder<br />
– Die Zahl n[x] der aktuell im Knoten<br />
gespeicherten Schlüssel (“Füllgrad”)<br />
– n[x] Schlüssel<br />
key1[x] ≤ ... ≤ keyn[x][x]<br />
– n[x]+1 Zeiger auf die Söhne<br />
c0[x], c1[x], ... , cn[x][x]<br />
– Der Bool-Wert leaf[x] zeigt an, ob x ein Blatt ist<br />
112<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Definition : B-Bäume<br />
• Bedingungen<br />
– Ist ki ein Schlüssel im Unterbaum mit Wurzel<br />
ci[x] so ist<br />
k0 ≤ key1[x] ≤ k1 ≤ key2[x] ≤ ... ≤ keyn[x][x] ≤ kn[x]<br />
– Alle Blätter haben dieselbe Tiefe h<br />
113<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Definition : B-Bäume<br />
• Bedingungen (Fortsetzung)<br />
– Es gibt eine feste Zahl t ≥ 2, den<br />
minimalen Grad, mit<br />
• Jeder Knoten außer der Wurzel enthält<br />
mindestens t−1 Schlüssel<br />
• Jeder Knoten enthält höchstens<br />
2×t−1 Schlüssel<br />
114<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Definition : B-Bäume<br />
• Bedingungen (Fortsetzung, alternativ)<br />
– Es gibt eine feste Zahl t ≥ 2, den<br />
minimalen Grad, mit<br />
• Jeder Knoten außer der Wurzel hat<br />
mindestens t Söhne<br />
• Jeder Knoten hat höchstens 2×t Söhne<br />
115<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
B-Bäume<br />
• Für die Höhe h eines B-Baums mit n<br />
Schlüsseln gilt<br />
#Knoten<br />
Tiefe<br />
t t<br />
t t t t<br />
0<br />
1<br />
2<br />
3<br />
1<br />
≥2<br />
≥2t<br />
≥2t 2<br />
116<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
B-Bäume<br />
• Halte den Wurzelknoten immer im<br />
Hauptspeicher (da für jeden Zugriff<br />
notwendig)<br />
• Erwartete Zugriffe ≈ logt n<br />
• Beispiel<br />
– 10 8 Telefonnummern in Deutschland<br />
– Blockgröße 512<br />
– maximal 2 Festplattenzugriffe<br />
117<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
B-Bäume<br />
• Zusammenhang mit Rot-Schwarz-<br />
Bäumen<br />
– Jeder schwarze Knoten absorbiert<br />
seine roten Söhne<br />
– Minimaler Füllgrad: t = 2 Söhne<br />
– Maximaler Füllgrad: 2t = 4 Söhne<br />
– (2,4)-Bäume<br />
118<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
119<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
120<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
121<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
122<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
123<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
124<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
125<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
126<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
127<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rot-Schwarz-Bäume<br />
128<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
• Operationen<br />
– Search()<br />
– Insert()<br />
– Delete()<br />
B-Bäume<br />
• In den meisten Fällen kommen die<br />
Operationen ohne Restrukturierung des<br />
Baums aus<br />
• Sonst: O(1) verallgemeinerte<br />
Rotationen<br />
129<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Zugriff auf externen Speicher<br />
• DiskRead(x), DiskWrite(x)<br />
• x ← pointer to some object<br />
DiskRead(x);<br />
access/modify the contents of x<br />
DiskWrite(x) // only if modified<br />
access but don’t modify the contents of x<br />
130<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Create()<br />
• Create()<br />
x ← AllocateNode()<br />
leaf[x] ← true<br />
n[x] ← 0<br />
DiskWrite(x)<br />
131<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Search()<br />
• SEARCH( x, k )<br />
i ← 1<br />
while i ≤ n[x] and k > keyi[x]<br />
i ← i + 1<br />
if i ≤ n[x] and k = keyi[x] then<br />
return (x,i)<br />
if leaf[x] then<br />
return NIL<br />
else<br />
DiskRead( ci−1[x] )<br />
Search( ci−1[x], k )<br />
132<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Insert()<br />
• Bei Binärbäumen wird immer ein neuer<br />
Blattknoten eingefügt<br />
• Bei B-Bäumen ist kein neuer Knoten<br />
nötig, solange der Blattknoten noch nicht<br />
voll ist<br />
• Steigt die Zahl der Schlüssel über 2×t−1,<br />
so wird das Blatt geteilt<br />
133<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Insert()<br />
• Naiver Ansatz<br />
– Suche das entsprechende Blatt<br />
– Split() falls überfüllt<br />
– Propagiere nach oben, falls Vaterknoten<br />
ebenfalls überläuft<br />
– Problem: Auf die Knoten entlang des<br />
Pfades wird jeweils zweimal zugegriffen<br />
134<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Insert()<br />
• One-Pass Algorithmus<br />
– Teile die Knoten entlang des Suchpfades bereits<br />
auf dem Hinweg wenn diese schon voll sind<br />
– Evtl. unnötige Split-Operationen amortisieren sich<br />
durch den schnelleren Average-Case<br />
135<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• SplitChild(x,i)<br />
// x : Vaterknoten<br />
// i : Index des Sohns<br />
// Vorbedingung: ci[x] ist voll<br />
136<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Beispiel t = 4<br />
x<br />
...<br />
K S ...<br />
ci[x]<br />
L<br />
M N O<br />
P Q R<br />
137<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Beispiel t = 4<br />
x<br />
...<br />
K S ...<br />
L<br />
M N<br />
O<br />
P Q R<br />
138<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Beispiel t = 4<br />
x<br />
...<br />
K S ...<br />
L<br />
M N<br />
O<br />
P Q R<br />
139<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Beispiel t = 4<br />
x<br />
...<br />
K O S<br />
...<br />
ci[x]<br />
L<br />
M N<br />
P Q R<br />
ci+1[x]<br />
140<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Spezialfall: Wurzel<br />
L<br />
M N O<br />
P Q R<br />
141<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Spezialfall: Wurzel<br />
Erzeuge zuerst einen<br />
leeren Knoten ...<br />
L<br />
M N O<br />
P Q R<br />
142<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Spezialfall: Wurzel<br />
Erzeuge zuerst einen<br />
leeren Knoten ... dann<br />
SplitChild()<br />
L<br />
M N<br />
O<br />
P Q R<br />
143<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Spezialfall: Wurzel<br />
Erzeuge zuerst einen<br />
leeren Knoten ... dann<br />
SplitChild()<br />
L<br />
M N<br />
O<br />
P Q R<br />
144<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
SplitChild()<br />
• Spezialfall: Wurzel<br />
• B-Bäume wachsen an der Wurzel<br />
O<br />
L<br />
M N<br />
P Q R<br />
145<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Insert()<br />
• Insert(T,k)<br />
r ← root[T]<br />
if n[r] = 2×t−1 then<br />
s ← AllocateNode()<br />
root[T] ← s<br />
leaf[s] ← false<br />
n[s] ← 0<br />
c0[s] ← r<br />
SplitChild(s,0)<br />
InsertNonFull(s,k)<br />
else<br />
InsertNonFull(r,k)<br />
146<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
InsertNonfull()<br />
• InsertNonFull(x,k)<br />
if leaf[x] then<br />
find correct position for k and insert<br />
DiskWrite(x)<br />
else<br />
find correct subtree ci[x]<br />
DiskRead(ci[x])<br />
if n[ci[x]] = 2×t−1 then<br />
SplitChild(x,i)<br />
if k > keyi[x] then<br />
i ← i + 1<br />
InsertNonFull(ci[x],k)<br />
147<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
t = 3<br />
G<br />
M P X<br />
A<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R S T U V Y Z<br />
148<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(B)<br />
G<br />
M P X<br />
A<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R S T U V Y Z<br />
149<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(B)<br />
G<br />
M P X<br />
A<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R S T U V Y Z<br />
150<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(B)<br />
G<br />
M P X<br />
A<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R S T U V Y Z<br />
151<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(B)<br />
G<br />
M P X<br />
A<br />
B<br />
C D E J K<br />
N<br />
O<br />
R S T U V Y Z<br />
152<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(Q)<br />
G<br />
M P X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R S T U V Y Z<br />
153<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(Q)<br />
G<br />
M P X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R S T U V Y Z<br />
154<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(Q)<br />
G<br />
M P X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R S T U V Y Z<br />
155<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(Q)<br />
G<br />
M P X<br />
T<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
R<br />
S<br />
U<br />
V<br />
Y<br />
Z<br />
156<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(Q)<br />
G<br />
M P<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N O R S U V Y Z<br />
157<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(Q)<br />
G<br />
M P<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N O R S U V Y Z<br />
158<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(Q)<br />
G<br />
M P<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q R<br />
S<br />
U V<br />
Y<br />
Z<br />
159<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
G<br />
M P<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
160<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
G<br />
M P<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
161<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
G<br />
M P<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
162<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
163<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
164<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
165<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
166<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(L)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
L<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
167<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(F)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
L<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
168<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(F)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
C D E<br />
J<br />
K<br />
L<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
169<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(F)<br />
P<br />
G<br />
M<br />
T<br />
X<br />
C<br />
A<br />
B<br />
D E<br />
J<br />
K<br />
L<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
170<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(F)<br />
P<br />
C<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
D E<br />
J<br />
K<br />
L<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
171<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(F)<br />
P<br />
C<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
D E<br />
J<br />
K<br />
L<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
172<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Beispiel<br />
• Insert(F)<br />
P<br />
C<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
D E<br />
F<br />
J<br />
K<br />
L<br />
N<br />
O<br />
Q<br />
R S U V Y Z<br />
173<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Unkritisch für Blattknoten mit<br />
hinreichendem Füllgrad (häufigster Fall)<br />
• Bei Unterlauf müssen Knoten<br />
verschmolzen werden<br />
• Kann/muss nach oben propagiert werden<br />
• One-Pass-Formulierung?<br />
174<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Delete() sucht den Schlüssel entlang<br />
eines Pfades<br />
• Eine Verschmelzung findet nur statt,<br />
wenn die entsprechenden Knoten<br />
beide einen Füllgrad ≤ t−1 haben.<br />
• Teste vor dem Abstieg, ob der<br />
Nachfolger Füllgrad ≥ t hat (dann ist<br />
Verschmelzung ausgeschlossen)<br />
• Falls dies nicht der Fall ist, erzwinge<br />
dies durch direkte Umstrukturierung<br />
175<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Wie bei Insert() sorgen wir dafür, dass<br />
der aktuelle Knoten hinreichend gefüllt<br />
ist, so dass keine Verschmelzung<br />
notwendig wird (Schleifeninvariante)<br />
• Falls ein Knoten nicht hinreichend<br />
gefüllt wäre, hätten wir das bereits bei<br />
der Bearbeitung des Vaterknotens<br />
bemerkt und behoben.<br />
176<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Hilfsoperationen<br />
– Steal()<br />
– Merge()<br />
– Rotate()<br />
177<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Steal()<br />
• Lösche Element aus aktuellem Knoten<br />
t = 3<br />
C<br />
H<br />
M<br />
A<br />
B<br />
D<br />
E F<br />
J<br />
K<br />
N<br />
O P<br />
mehr als t−1 Knoten → rekursiver Abstieg möglich<br />
178<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Steal()<br />
C<br />
H<br />
M<br />
A<br />
B<br />
D<br />
E F<br />
J<br />
K<br />
N<br />
O P<br />
... G<br />
179<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Steal()<br />
C<br />
H<br />
M<br />
A<br />
B<br />
D<br />
E F<br />
J<br />
K<br />
N<br />
O P<br />
... G<br />
180<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Steal()<br />
C<br />
G<br />
M<br />
A<br />
B<br />
D<br />
E F<br />
J<br />
K<br />
N<br />
O P<br />
...<br />
181<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Merge()<br />
• Lösche Element aus aktuellem Knoten<br />
C<br />
G<br />
M<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
nur t−1 Knoten → rekursiver Abstieg nicht möglich<br />
182<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Merge()<br />
C<br />
M<br />
A<br />
B<br />
G<br />
D E J K N O<br />
183<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Merge()<br />
C<br />
M<br />
A<br />
B<br />
D E G J K N O<br />
184<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Merge()<br />
• Lösche Element aus aktuellem Knoten<br />
C<br />
M<br />
A B D E G J K N O<br />
185<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rotate()<br />
• Lösche Element aus rechtem Teilbaum<br />
C<br />
G<br />
M<br />
A<br />
B<br />
D<br />
E<br />
F<br />
J<br />
K<br />
N<br />
O<br />
nur t−1 Knoten → rekursiver Abstieg nicht möglich<br />
186<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rotate()<br />
• Lösche Element aus rechtem Teilbaum<br />
C<br />
G<br />
M<br />
A<br />
B<br />
D<br />
E<br />
F<br />
J<br />
K<br />
N<br />
O<br />
nur t−1 Knoten → rekursiver Abstieg nicht möglich<br />
187<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rotate()<br />
C<br />
M<br />
G<br />
A<br />
B<br />
D<br />
F<br />
E<br />
J<br />
K<br />
N<br />
O<br />
188<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rotate()<br />
C<br />
M<br />
F<br />
G<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
189<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rotate()<br />
C<br />
M<br />
F<br />
G<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
190<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rotate()<br />
C<br />
F<br />
M<br />
A<br />
B<br />
D<br />
E<br />
G<br />
J<br />
K<br />
N<br />
O<br />
191<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Rotate()<br />
C<br />
F M<br />
A<br />
B<br />
D<br />
E<br />
G<br />
J<br />
K<br />
N<br />
O<br />
192<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Standardfall: Schlüssel nicht im Knoten,<br />
Rekursion in den entsprechenden Teilbaum<br />
• Nur in Knoten absteigen, die hinreichend<br />
gefüllt sind → wenn nicht, vorher den Baum<br />
mit Merge(), Steal(), Rotate() umstrukturieren.<br />
• Nicht-Standardfälle: 1, 2a, 2b, 3a, 3b<br />
(s. Cormen)<br />
193<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
B-Bäume – Delete – Scheme<br />
Blatt<br />
Kein Blatt<br />
1<br />
This<br />
Rekursion<br />
L. oder R.<br />
≥ t<br />
Beide<br />
< t<br />
L. oder R.<br />
≥ t<br />
Beide<br />
< t<br />
2ab 2c 3a 3b<br />
Steal Merge Rotate Merge<br />
194<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 1: Schlüssel in einem Blatt<br />
Del(F, P )<br />
C<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
F<br />
J<br />
K L<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
195<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 1: Schlüssel in einem Blatt<br />
P<br />
Del(F, C G M )<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
F<br />
J<br />
K L<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
196<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 1: Schlüssel in einem Blatt<br />
P<br />
C<br />
G<br />
M<br />
T<br />
X<br />
Del(F, D E F )<br />
J<br />
K L<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
197<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 1: Schlüssel in einem Blatt<br />
• Schlüssel wird gelöscht<br />
P<br />
C<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K L<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
198<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2a: Schlüssel in innerem Knoten,<br />
linker Sohn hat ≥ t Schlüssel<br />
• Stehle Vorgänger aus linkem Teilbaum<br />
Del(M, P )<br />
C<br />
G<br />
M<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K L<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
199<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2a: Schlüssel in innerem Knoten,<br />
linker Sohn hat ≥ t Schlüssel<br />
• Stehle Vorgänger aus linkem Teilbaum<br />
P<br />
Del(M, C G M )<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K L<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
200<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2a: Schlüssel in innerem Knoten,<br />
linker Sohn hat ≥ t Schlüssel<br />
• Stehle Vorgänger aus linkem Teilbaum<br />
P<br />
Del(M, C G M )<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K L<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
201<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2a: Schlüssel in innerem Knoten,<br />
linker Sohn hat ≥ t Schlüssel<br />
• Stehle Vorgänger aus linkem Teilbaum<br />
P<br />
Del(M, C G M )<br />
T<br />
X<br />
A<br />
B<br />
Del(L, J K L )<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
202<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2a: Schlüssel in innerem Knoten,<br />
linker Sohn hat ≥ t Schlüssel<br />
• Stehle Vorgänger aus linkem Teilbaum<br />
P<br />
Del(M, C G M )<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
203<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2a: Schlüssel in innerem Knoten,<br />
linker Sohn hat ≥ t Schlüssel<br />
• Stehle Vorgänger aus linkem Teilbaum<br />
P<br />
C<br />
G<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
204<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2b: Schlüssel in innerem Knoten,<br />
rechter Sohn hat ≥ t Schlüssel<br />
→ analog zu Fall 2a<br />
205<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
Del(G, P )<br />
C<br />
G<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
206<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
P<br />
Del(G, C G L )<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
207<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
• Stehlen nicht möglich → Merge()<br />
P<br />
Del(G, C G L )<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
208<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
• Stehlen nicht möglich → Merge()<br />
P<br />
Del(G, C L )<br />
G<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
209<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
• Stehlen nicht möglich → Merge()<br />
P<br />
Del(G, C L )<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
G<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
210<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
• Stehlen nicht möglich → Merge()<br />
P<br />
Del(G, C L )<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
G<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
211<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
• Stehlen nicht möglich → Merge()<br />
• Rekursion<br />
P<br />
C<br />
L<br />
T<br />
X<br />
B Del(G, D E G J K )<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
212<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 2c: Schlüssel in innerem Knoten, beide Söhne<br />
haben t−1 Schlüssel<br />
• Stehlen nicht möglich → Merge()<br />
• Rekursion<br />
P<br />
C<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
213<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
C<br />
L<br />
P<br />
T<br />
X<br />
A B E J K N O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
214<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
Del(B, C L P T X )<br />
A B E J K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
215<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
• Rotate()<br />
Del(B, C L P T X )<br />
A B E J K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
216<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
• Rotate()<br />
Del(B, C L P T X )<br />
A<br />
B<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
217<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
• Rotate()<br />
C<br />
Del(B, L P T X )<br />
E<br />
A<br />
B<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
218<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
• Rotate()<br />
Del(B, L P T X )<br />
E<br />
C<br />
A<br />
B<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
219<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
• Rotate()<br />
Del(B, E L P T X )<br />
A<br />
B<br />
C<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
220<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
• Rotate(), Rekursion<br />
E<br />
L<br />
P<br />
T<br />
X<br />
Del(B, A B C ) J K N O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
221<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3a: Schlüssel nicht im aktuellen Knoten, der<br />
entspr. Unterbaum hat nur t−1 Schlüssel, sein<br />
Bruder aber t Schlüssel<br />
• Rotate(), Rekursion<br />
E<br />
L<br />
P<br />
T<br />
X<br />
A<br />
C<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
222<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
P<br />
C<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
223<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
Del(D, P )<br />
C<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
224<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
Abstieg nicht<br />
möglich!<br />
Del(D, P )<br />
C<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
225<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
• Merge zwei der Unterbäume<br />
Abstieg nicht<br />
möglich!<br />
Del(D, P )<br />
C<br />
L<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
226<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
• Merge zwei der Unterbäume<br />
Del(D, )<br />
C<br />
L<br />
P<br />
T<br />
X<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
227<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
• Merge zwei der Unterbäume<br />
Del(D, C L P T X )<br />
A<br />
B<br />
D<br />
E<br />
J<br />
K<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
228<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
• Merge zwei der Unterbäume<br />
C<br />
L<br />
P<br />
T<br />
X<br />
Del(D, D E J K )<br />
N<br />
O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
229<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Delete()<br />
• Fall 3b: Schlüssel nicht im aktuellen Knoten,<br />
sowohl der entspr. Unterbaum als auch dessen<br />
Brüder haben t−1 Schlüssel<br />
• Merge zwei der Unterbäume<br />
C<br />
L<br />
P<br />
T<br />
X<br />
A B E J K N O<br />
Q<br />
R S<br />
U<br />
V<br />
Y<br />
Z<br />
230<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Zusammenfassung<br />
• B-Bäume<br />
– Optimierter Zugriff auf externen Speicher<br />
durch Blockung mehrerer Schlüssel<br />
– Minimaler/maximaler Füllgrad<br />
– Garantierte Balancierung<br />
– Hysterese bei der Umstrukturierung<br />
– Steal(), Merge(), Rotate()<br />
231<br />
Datenstrukturen und Algorithmen<br />
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer