02.01.2014 Aufrufe

Vorlesung 2.5.3

Vorlesung 2.5.3

Vorlesung 2.5.3

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!