B-Bäume - Peter L. Reichertz Institut für Medizinische Informatik

Werbung
Algorithmen & Datenstrukturen
WS 2006/07
Bäume
Zusatzfolien
Diese Folien detaillieren verschiedene Aspekte des PDF-Foliensatzes.
O.J. Bott, 16.01.2007
Institut für Medizinische Informatik
Technische Universität
Braunschweig
6. Bäume
Inhalt
1.
Binärbäume und Binäre Suchbäume
2.
Ausgeglichene Bäume
1. AVL-Bäume
2. Red/Black-Bäume
3. B-Bäume
3.
Heaps und Heapsort
Institut für Medizinische Informatik
Technische Universität
Braunschweig
1
1. Binärbäume
Implementierung (1/2): Modell
(Klassendiagramm)
0,1 left
0,1 right
BinTreeNode
BinaryTree
getRoot(): BinTreeNode
setRoot(BinTreeNode)
...
...
0,1
root
getRight(): BinTreeNode
getLeft(): BinTreeNode
getValue(): Object
setValue(Object)
setRight(BinTreeNode)
setLeft(BinTreeNode)
toString(): String
1
value
Object
Technische Universität
Braunschweig
Institut für Medizinische Informatik
1. Binärbäume
Implementierung (2/2): Binärbaum (Objektmodell)
l: BinaryTree
root
left
t2: BinTreeNode
left
t4: BinTreeNode
t1: BinTreeNode
9: Integer
right
value
2: Integer
value
1: Integer
right
value
t5: BinTreeNode
t3: BinTreeNode
value
12: Integer
value
9
t2
5: Integer
t4
Institut für Medizinische Informatik
1
2
t1
12
5
t3
t5
Technische Universität
Braunschweig
2
1. Binäre Suchbäume
Löschen eines Wertes
Drei Fälle
(2) Knoten hat ein Kind
delete(2)
(1) Knoten ist Blatt
delete(5)
2
1
2
9
5<9
5>2
5
12
9
2<9
2 == 2
12
1
9
5 ==5
1
12
Technische Universität
Braunschweig
Institut für Medizinische Informatik
1. Binäre Suchbäume
Fortsetzung Löschen
(3) Knoten hat zwei Kinder
delete(3)
3
9
9
3<9
3 == 3
4
12
12
successor?
1
1
6
6
...
...
4
7
5
7
5
Institut für Medizinische Informatik
Technische Universität
Braunschweig
3
6. Bäume
6.2 Ausg. Bäume
2.1 AVL-Bäume
– Entwickelt von den russischen Mathematikern G.M. AdelsonVelskii und E.M. Landis
– AVL-Bäume sind binäre Suchbäume und basieren auf einem
abgeschwächten Kriterium für eine ausgeglichene Höhe.
Ein binärer Suchbaum ist ein AVL-Baum, wenn das AVL-Kriterium
erfüllt ist:
Für jeden (inneren) Knoten ist der absolute Betrag der Differenz
der Höhen des rechten und linken Teilbaums maximal 1.
11
11
5
2
1
17
7
5
13
2
AVL
1
Institut für Medizinische Informatik
17
7
6
Es genügt nicht, diese
Eigenschaft nur für die
Wurzel zu fordern, da
beide Teilbäume
entartet sein können.
Nicht AVL
Technische Universität
Braunschweig
6. Bäume
6.2 Ausg. Bäume
Einfügen in AVL-Bäume (1/6)
– Einfügen eines Schlüssels mit üblichem Algorithmus
– Danach kann die AVL-Eigenschaft eines inneren Knotens k
verletzt sein:
– balance(k) := right.height - left.height // null.heigth := -1
– AVL-Eigenschaft: balance(k) ∈ { -1, 0, +1 }
– Nach Einfügen: balance(k) ∈ { -2, -1, 0, +1, +2 }
– Fallunterscheidung beim Einfügen: Verletzung der AVLEigenschaft können eintreten bei
1. Einfügen in linken Teilbaum des linken Kindes
2. Einfügen in rechten Teilbaum des linken Kindes
3. Einfügen in rechten Teilbaum des rechten Kindes
4. Einfügen in linken Teilbaum des rechten Kindes
1 und 3 sowie 2 und 4 sind symmetrische Problemfälle.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
4
6. Bäume
6.2 Ausg. Bäume
Einfügen in AVL-Bäume (2/6)
– Ist die AVL-Eigenschaft eines inneren Knotens k verletzt, so
muss ausgeglichen werden. Die hierbei notwendigen
Vertauschungen von Knoten bezeichnet man als Rotation.
– Fall 1. (bzw. 3) Einfügen in linken Teilbaum des linken Kindes
-2
Ungleichgewicht
entsteht hier
u
-1
0
p
0
2. Rotation
p
balance(k) :=
right.height - left.height
u
z
1. Einfügen
von k
y
e
z
y
e
Rotation mit linkem Kind nach rechts, analoge Operation nach
links (spiegelbildlich)
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Einfügen in AVL-Bäume (3/6)
– Fall 2. (bzw. 4) Einfügen in rechten Teilbaum des linken Kindes
-2
balance(k) :=
right.height - left.height
Ungleichgewicht
entsteht hier
u
0
+1
g
*
z
p
1. Einfügen
von k
2. Doppelrotation
p
0/+1
0/-1
g
u
w
x
y
w
x
y
z
Doppelrotation mit linkem Kind nach links und bzgl. des Vaters
nach rechts, analoge Operation nach links (spiegelbildlich)
Institut für Medizinische Informatik
Technische Universität
Braunschweig
5
Einfügen in AVL-Bäume
Zusammenfassung der Fälle
1. Einfügen in linken Teilbaum des linken Kindes
=> Rechtsrotation des Vaters
2. Einfügen in rechten Teilbaum des linken Kindes
=> Doppelrotation links/rechts des linken Kindes/Vaters
3. Einfügen in rechten Teilbaum des rechten Kindes
=> Linksrotation des Vaters
4. Einfügen in linken Teilbaum des rechten Kindes
=> Doppelrotation rechts/links des rechten
Kindes/Vaters
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Einfügen in AVL-Bäume (4/6)
Beispiel (1/3): Einfügen von 3,2,1,4,...
Einfügen 3
0
3
-1
2
3
0*
1
-1
2
2
1
-2
3
RR
1
4
2
2
1
1
3
1
3
4
*i.F. werden balance(k) = 0 u.
irrelevante Werte weggelassen
Institut für Medizinische Informatik
Technische Universität
Braunschweig
6
6. Bäume
6.2 Ausg. Bäume
Einfügen in AVL-Bäume (5/6)
Beispiel (2/3): Einfügen von ...5,6,7...
5
1
LR
2
2
6
2
2
2
1
3
1
4
1
4
1
1
1
3
4
3
5
5
5
LR
6
1
7
4
1
2
LR
4
4
2
2
5
2
5
6
1
3
1
6
3
1
6
3
1
5
7
7
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Einfügen in AVL-Bäume (6/6)
Beispiel (3/3): Einfügen von ...9,8
9
4
1
8
4
1
2
1
2
6
3
1
7
5
6
2
3
1
7
5
-1
9
9
1
DR r/l
8
4
2
1
7
RR
2
1
8
LR
9
Institut für Medizinische Informatik
1
6
3
5
8
7
9
Technische Universität
Braunschweig
7
6. Bäume
6.2 Ausg. Bäume
Löschen in AVL-Bäumen
– Analog zum Einfügen!
– Löschen eines Schlüssels mit üblichem Algorithmus.
– Danach kann die AVL-Eigenschaft eines inneren
Knotens k verletzt sein.
=> Ggf. Balance des betroffenen, vom Vater aufgespannten Teilbaums
durch Rotieren wieder herstellen.
Aber: Rotieren kann Ausgeglichenheit weiterer Knoten auf dem Pfad zur
Wurzel verletzen.
=> Balance rekursiv/iterativ ggf. bis zur Wurzel wieder herstellen.
-1
-2
4
4
Löschen von 5
1
RR
2
-1
2
1
2
5
3
1
Institut für Medizinische Informatik
4
1
3
3
Technische Universität
Braunschweig
6. Bäume
6.2 Ausg. Bäume
2.2 Red/Black-Bäume
– Ein Red/Black-Baum ist ein Binärer Suchbaum, in dem jeder
Knoten über ein Zusatzbit zur Speicherung seiner Farbe
(0=Schwarz und 1 =Rot) verfügt.
38
41
– Auch Red/Black-Bäume basieren auf einem abgeschwächten
Kriterium für eine ausgeglichene Höhe: Durch Einschränkungen
bei der Färbung der Knoten auf den Pfaden von der Wurzel zu
einem Blatt wird sichergestellt, dass jeder Pfad maximal doppelt
so lang ist, wie jeder andere.
– Für nicht vorhandene Kind-Knoten (bislang durch
Referenz der Beziehung right/left auf null
repräsentiert) wird ein spezieller Null-Knoten als
Kind eingefügt, dessen Wert das Null-Objekt
repräsentiert.
Institut für Medizinische Informatik
41
Null
38
Null
Null
Technische Universität
Braunschweig
8
6. Bäume
6.2 Ausg. Bäume
Red/Black-Bäume: Definition
Ein Binärer Suchbaum ist ein Red/Black-Baum, wenn er folgende
Red/Black-Eigenschaft erfüllt:
1.
2.
3.
4.
5.
Jeder Knoten ist entweder rot oder schwarz.
Die Wurzel ist schwarz.
Jedes Blatt (Null) ist schwarz.
Wenn ein Knoten rot ist, so sind beide Kinder schwarz.
Für jeden Knoten gilt, dass alle Pfade vom Knoten zu einem Blatt die
selbe Anzahl schwarzer Knoten beinhalten.
8
4
12
2
6
1
Null
3
Null
Null
10
5
Null
Null
7
Null
Null
14
9
Null
Null
11
Null
Null
13
Null
15
Null
Null
Null
Null
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Red/Black-Bäume: Black-Height
Definition:
Als black-height eines Knotens k - geschrieben bh(k) - gelte die Anzahl
der schwarzen Knoten auf beliebigen Pfaden von k zu einem Blatt.
Hierbei wird k selbst nicht mitgezählt.
Anmerkung:
Die black-height-Eigenschaft ist aufgrund der Red/Black-Eigenschaft 5
wohl definiert.
Beispiel:
bh(8) = 3
8
4
12
2
6
1
Null
3
Null
Null
10
5
Null
Null
7
Null
Null
Institut für Medizinische Informatik
Null
11
Null
14
bh(11) = 1
9
Null
bh(2) = 2
Null
13
Null
Null
15
Null
Null
Null
Technische Universität
Braunschweig
9
6. Bäume
6.2 Ausg. Bäume
Black-Height (1/3)
Satz 9.2:
Die Höhe eines Red/Black-Baumes mit n internen Knoten beträgt
maximal 2 ld (n+1) .
Beweis:
Zunächst zeigen wir, dass jeder durch einen Knoten x aufgespannte
Teilbaum wenigstens 2bh(x) -1 innere Knoten hat.
Der Beweis erfolgt durch vollständige Induktion über die Höhe h
von x.
I.Anf.: h = 0 ⇒ x ist ein Blatt (=Null-Knoten) und der durch x
aufgespannte Teilbaum enthält 2bh(x) -1 = 20 -1 = 0
innere Knoten. (o.k.)
I.Ann.: Ein durch x aufgespannter Teilbaum der Höhe h hat
wenigstens 2bh(x) -1 innere Knoten.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
6. Bäume
6.2 Ausg. Bäume
Black-Height (2/3)
Satz 9.2:
Die Höhe eines Red/Black-Baumes mit n internen Knoten beträgt
maximal 2 ld (n+1) .
Beweis: (Fortsetzung)
I.B.: Ein durch x aufgespannter Teilbaum der Höhe h+1 hat
wenigstens 2bh(x) -1 innere Knoten.
I.S.: x habe die Höhe h+1 und zwei Kinder.
⇒ Jedes Kind hat die black-height bh(x) oder bh(x) -1
abhängig davon, ob seine Farbe Rot oder Schwarz ist.
⇒ (Induktionsannahme) Jedes Kind von x hat mindestens
2bh(x)-1 -1 innere Knoten.
⇒ Der durch x aufgespannte Teilbaum hat mindestens
(2bh(x)-1 -1)+(2bh(x)-1 -1)+1= 2bh(x) -1 innere Knoten. (q.e.d.)
Institut für Medizinische Informatik
Technische Universität
Braunschweig
10
6. Bäume
6.2 Ausg. Bäume
Black-Height (3/3)
Satz 9.2:
Die Höhe eines Red/Black-Baumes mit n internen Knoten beträgt
maximal 2 ld (n+1) .
Bereits bewiesen: Ein durch x aufgespannter Teilbaum der Höhe h+1
hat wenigstens 2bh(x) -1 innere Knoten.
Sei nun h die Höhe des Baumes. Entsprechend Red/BlackEigenschaft 4 müssen mindestens die Hälfte aller Knoten auf allen
Pfaden von der Wurzel zu einem Blatt (ausschließlich der Wurzel)
schwarz gefärbt sein.
⇒ Die black-height der Wurzel muss mindestens h/2 betragen.
⇒ n ≥ 2h/2-1
⇒ ld (n+1) ≥ h/2 oder h ≤ 2 ld (n+1)
Institut für Medizinische Informatik
Eig. 4: Wenn ein Knoten rot ist, so
sind beide Kinder schwarz.
Technische Universität
Braunschweig
6. Bäume
6.2 Ausg. Bäume
Basisalgorithmen für
Red/Black-Bäume
Da die Höhe eines Red/Black-Baumes durch
h< 2 ld (n+1)
beschränkt ist, liegen die Laufzeiten der Algorithmen
– Suchen eines Knotens,
– Minimum, Maximum,
– Nachfolger und Vorgänger
in O(log n).
Institut für Medizinische Informatik
Technische Universität
Braunschweig
11
6. Bäume
6.2 Ausg. Bäume
Einfügen in R/B-Bäume (1/5)
–
Einfügen eines Schlüssels mit üblichem Algorithmus, Rot-färben
des eingefügten Knotens k sowie Ergänzung zweier Null-Knoten
als Kinder.
Danach kann die Red/Black-Eigenschaft des Baumes verletzt sein:
–
1.
2.
Jeder Knoten ist entweder rot oder schwarz. => Nicht verletzt.
Die Wurzel ist schwarz.
Verletzt nur dann, wenn k in den leeren Baum eingefügt wird.
Aktion: k Schwarz färben.
3. Jedes Blatt (Null) ist schwarz. => Nicht verletzt.
4. Wenn ein Knoten rot ist, so sind beide Kinder schwarz.
Nicht durch k verletzt, da beide Kinder schwarze Null-Knoten sind.
Die Eigenschaft ist dann verletzt, wenn k als Kind eines roten Vater...
Knotens eingefügt wird.
5. Für jeden Knoten gilt, dass alle Pfade vom Knoten zu einem Blatt
die selbe Anzahl schwarzer Knoten beinhalten.
Da nur ein roter Knoten hinzukommt, ist diese Eigenschaft ebenfalls
nicht verletzt.
...
41
38 k
Null
Null
Institut für Medizinische Informatik
Technische Universität
Braunschweig
6. Bäume
6.2 Ausg. Bäume
Einfügen in R/B-Bäume (2/5)
–
Maßnahmen die Red/Black-Eigenschaft 4 wieder herzustellen sind
1.
2.
Geeignete Links/Rechts/Doppel-Rotation zwecks Höhenausgleich.
Dabei gibt die Einfärbung der Knoten Aufschluss über die
notwendigen Rotationen.
Korrektur der Einfärbung der falsch eingefärbten Knoten.
Die Einfärbung wird dabei in Richtung der Wurzel korrigiert, wodurch eine
Funktion zum Zugriff auf den Vaterknoten eines Knotens k nötig wird
==>> parent(k).
–
Sechs Fälle sind zu unterscheiden:
a.
parent(k) ist linkes Kind von parent(parent(k)).
1. Der „Onkel“ von k ist rot.
2. Der „Onkel“ von k ist schwarz und k ist rechtes Kind.
3. Der „Onkel“ von k ist schwarz und k ist linkes Kind.
b.
parent(k) ist rechtes Kind von parent(parent(k)).
3 analoge Fälle
Institut für Medizinische Informatik
Technische Universität
Braunschweig
12
6. Bäume
6.2 Ausg. Bäume
Einfügen in R/B-Bäume (3/5)
Im Folgenden wird nur Fallgruppe a betrachtet:
– Fall a.1: Der „Onkel“ von k ist rot.
c
a
Umfärben
d
b
α
β
c
k
a
d
k
δ
ε
b
α
χ
β
δ
ε
χ
Problem: Knoten c kann ebenfalls wieder Kind eines roten Knoten sein
(erneute Verletzung von Eigenschaft 4).
Dementsprechend wird in diesem Fall für c (=: k) rekursiv die Red/BlackEigenschaft wiederhergestellt.
Der Fall, dass k linkes Kind von parent(k) ist, wird analog behandelt.
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Einfügen in R/B-Bäume (4/5)
–
Fall a.2: Der „Onkel“ von k ist schwarz und k ist rechtes Kind.
c
c
a
Linksrotation
d
b
α
β
k
neues k
δ
ε
χ
α
d
b
a
χ
β
δ
ε
=> Fall a.3
Durch Linksrotation der Knoten k und parent(k) entsteht Fall a.3 in Bezug
auf den ehemaligen Vater-Knoten von k (=:k): Der „Onkel“ von k ist
schwarz und k ist linkes Kind.
Hierbei finden bezüglich der Eigenschaften bzw. bzgl. der Verletzung der
Eigenschaften keine Veränderungen statt.
=> Weiter wie bei Fall a.3 beschrieben.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
13
6. Bäume
6.2 Ausg. Bäume
Einfügen in R/B-Bäume (5/5)
–
Fall a.3: Der „Onkel“ von k ist schwarz und k ist linkes Kind.
c
d
b
k
a
χ
b
Umfärben &
Rechtsrotation
a
k
c
d
δ
ε
α
β
χ
δ
α
ε
β
Die Rechtsrotation und Rot-färbung des Knoten c sowie die nachfolgende
Schwarz-färbung von Knoten b gefährden Eigenschaft 5 nicht:
Knoten c hatte vormals links und rechts die gleiche Anzahl schwarzer Knoten. Da
b vormals rot war, wird die Anzahl nach Übernahme des rechten Teilbaums von b
als linken Teilbaum dies nicht ändern.
Knoten b bekommt rechts zwar einen schwarzen Knoten d hinzu, da vormals die
Anzahl der schwarzen Knoten der von b über a oder χ laufenden Pfade aber gleich
der von d (inklusive) ausgehenden Pfade war, bleibt Eigenschaft 5 gültig. (> Fertig)
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
2.3 B-Bäume
Ausgangspunkt:
– Zugriff auf Primärspeicher (RAM) ist bzgl. Zugriffszeit „billig“
– Zugriff auf Sekundärspeicher (HD) ist „teuer“ und das vor allem dann, wenn
– das Auslesen der Daten eine Änderung der Position des Lesekopfes
nötig macht,
– der Beginn des einzulesenden Bereichs abgewartet werden muss.
Bereich benötigter Daten
Datentrack n+1
Datentrack n
Schreib-/Lesekopf
Institut für Medizinische Informatik
Idee:
Zusammenhängende Daten,
auf die i.d.R. immer komplett
zugegriffen wird, möglichst
hintereinander auf einem
Track oder mehreren
beieinander liegenden Tracks
unterbringen.
Technische Universität
Braunschweig
14
6. Bäume
6.2 Ausg. Bäume
B-Bäume: Aufbau
Übertragung dieser Idee auf Suchbäume, die auf einem externen
Medium gespeichert sind:
Möglichst viele Knoten eines Suchpfades in einem
zusammenhängenden Datenbereich speichern.
=> B-Bäume
–
B-Bäume sind ausgeglichene geordnete k-näre Suchbäume,deren Knoten
– maximal (k-1) Werte bzw. Schlüssel tragen können
– auf maximal k Kindknoten verweisen
⇒ B-Bäume sind nicht binär; B steht für „Balanced“
Werte
Beispiel:
10
20
Knoten eines 4-nären B-Baumes
30
...
13
...
14
17
23
Institut für Medizinische Informatik
Zeiger auf Kind-Knoten
24
Technische Universität
Braunschweig
6. Bäume
6.2 Ausg. Bäume
B-Bäume: Definition (1/3)
Definition B-Baum T der Ordnung t:
Ein (2t)-närer Baum T heißt B-Baum der Ordnung t ≥ 2, wenn
folgende Eigenschaften erfüllt sind:
1. Jeder Knoten x hat die folgenden Felder bzw. Funktionen
• n[x] ist die Anzahl der in Knoten x gespeicherten Werte
• die n[x] Werte sind in aufsteigender Weise geordnet:
value1[x] ≤ value2[x] ≤ ... ≤ valuen[x][x]
• leaf[x] ist eine boole‘sche Funktion, die angibt, ob x ein Blatt ist,
oder nicht.
2. Jeder innere Knoten x trägt n[x]+1 Zeiger c1[x], c2[x], ... cn[x]+1[x] auf
seine Kind-Knoten.
3. Die Werte valuei[x] unterteilen die in den Teilbäumen gespeicherten
Werte. Sei treeValues(y) die Menge aller in einem B-Baum mit Wurzel
y gespeicherten Werte, so gilt für 1 ≤ i < n[x]:
∀ vi ∈ treeValues(ci[x]), vi+1 ∈ treeValues(ci+1[x]): vi ≤ valuei[x] ≤ vi+1
Institut für Medizinische Informatik
Technische Universität
Braunschweig
15
6. Bäume
6.2 Ausg. Bäume
B-Bäume: Definition (2/3)
Definition B-Baum T der Ordnung t (Fortsetzung):
4. Jedes Blatt hat das gleiche Niveau. Es entspricht der Höhe h
des Baumes.
5. Die Ordnung t ≥ 2 definiert die obere und untere Grenze der
Anzahl Werte und Kind-Knoten eines Knoten:
• Jeder Knoten mit Ausnahme der Wurzel trägt
wenigstens t -1 Werte.
• Jeder innere Knoten mit Ausnahme der Wurzel hat
wenigstens t Kind-Knoten.
• Ist der Baum nicht leer, so trägt die Wurzel wenigstens
einen Wert.
• Jeder Knoten trägt maximal 2 t -1 Werte. Damit hat jeder
innere Knoten höchstens 2t Kinder. Ein Knoten heißt voll,
wenn er genau 2t-1 Werte trägt.
D.h. t-1 ≤ n[x] ≤ 2*t-1 für alle Knoten m.A.d. Wurzel
und t ≤ #Kinder von x ≤ 2*t für innere Knoten m.A.d. Wurzel
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
B-Bäume: Definition (3/3)
Beispiel eines B-Baumes der Ordnung 3:
⇒ Für alle Knoten x m.A.d. Wurzel gilt 3-1=2 ≤ n[x] ≤ 2*3-1=5
⇒ Für alle innere Knoten x m.A.d. Wurzel gilt: 3 ≤ #Kinder ≤ 2*3=6
value1[x]
Knoten x
c1[x]
3
7
50
value2[x]
10
20
30
40
55
59
70
75
c2[x]
8
9
13
14
Anmerkungen
•
•
45
Wurzel
17
......
65
66
......
Blätter
Knoten x ist voll, sein rechter Bruder nicht.
Es gibt insgesamt 11 Blätter, die alle das Niveau 2 (=Höhe des
Baumes) haben.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
16
6. Bäume
6.2 Ausg. Bäume
B-Bäume: Anmerkungen
– Alle Pfade von der Wurzel bis zu den Blättern sind in einem
B-Baum gleich lang.
– Typischerweise werden B-Bäume hoher Ordnung verwendet.
⇒ Knoten enthalten sehr viele Werte
⇒ Höhe des Baumes ist dafür niedrig.
Vorteil: Ein Knoten kann „in einem Rutsch“ von einer Festplatte
geladen werden.
– B-Bäume werden im Zusammenhang mit Datenbanken z.B. für
Indexstrukturen verwendet.
– Die Anzahl der Knoten eines Niveaus nimmt bei einem
vollständigen B-Baum der Ordnung t exponentiell zur Basis 2t zu:
Jeder Knoten hat 2t Kinder
⇒ Auf Niveau n befinden sich (2t)n Knoten
– Die Ordnung t eines B-Baumes wird auch als minimaler Grad
(minimum degree) bezeichnet.
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Höhe eines B-Baumes (1/2)
Die Laufzeit und damit die Anzahl der Festplattenzugriffe ist für die
meisten B-Baum-Operationen abhängig von der Höhe des Baumes.
Satz 9.3: Ist n ≥ 1 die Anzahl der Werte (Schlüssel) eines BBaumes T der Höhe h der Ordnung t, so gilt
h ≤ log t
n +1
2
Beweis:
Hat ein B-Baum die Höhe h, so trägt die Wurzel wenigstens einen
Wert und alle anderen Knoten tragen wenigstens t-1 Werte. Innere
Knoten haben wenigstens t Kinder.
⇒ Wenigstens zwei Knoten befinden sich auf Niveau 1.
⇒ Wenigstens 2t Knoten befinden sich auf Niveau 2.
⇒ Wenigstens 2t² Knoten befinden sich auf Niveau 3 u.s.w.
⇒ Auf Niveau h befinden sich 2th-1 Knoten
Institut für Medizinische Informatik
Technische Universität
Braunschweig
17
6. Bäume
6.2 Ausg. Bäume
Höhe eines B-Baumes (2/2)
Satz 9.3: Ist n ≥ 1 die Anzahl der Werte (Schlüssel)
eines B-Baumes T der Höhe h der Ordnung t, so gilt
h ≤ log t
n +1
2
Beweis (Fortsetzung):
Auf Niveau h befinden sich 2th-1 Knoten
⇒
n ≥ 1 + (t − 1)∑i =1 2t i −1
h
 t h −1 

= 1 + 2(t − 1)
 t −1 
(wg. mind. t-1 Schlüsseln pro Knoten)
= 2t h − 1
⇒ th ≤ (n+1)/2
⇒
h ≤ log t
n +1
2
nach Anwendung des Logarithmus zur Basis t.
(q.e.d.)
Institut für Medizinische Informatik
6. Bäume
Technische Universität
Braunschweig
6.2 Ausg. Bäume
Suchen in B-Bäumen (1/3)
Suche in B-Bäumen kombiniert die
– Suche in Binären Suchbäumen
– Suche in Listen bzw. Folgen
Ausgangspunkt: Jeder Knoten sei durch einen Zugriff auf die Festplatte
(diskRead() oder diskWrite()) in den Speicher zu laden bzw. zu schreiben.
Algorithmus (Pseudocode) zum Suchen eines Wertes v:
1. Lies den Wurzelknoten x ein (diskRead()).
2. Vergleiche in x beginnend mit i = 1 jeden Wert valuei[x] mit v, bis ein
erster Wert valuei[x] ≥ v oder i = n[x] ist
Fallunterscheidung:
a. Ist v = valuei[x], dann liefere Knoten x und Index i zurück und
beende die Suche
b. Ist v ≠ valuei[x] und x ein Blatt, so ist der Wert nicht enthalten: die
Suche wird beendet.
c. Ist valuei[x] > v bzw. valuei[x] < v (i=n[x]), so lies Knoten ci[x] bzw.
ci+1[x] als neuen Knoten x ein und mache weiter bei Schritt 2
Institut für Medizinische Informatik
Technische Universität
Braunschweig
18
6. Bäume
6.2 Ausg. Bäume
Suchen in B-Bäumen (2/3)
Beispiel: Suchen des Buchstaben Q in folgenden B-Bäumen
der Ordnung 3 Q=N?
Q>N=value1[x1]: Verfolge c2[x1]
x1 N
C K
A B
D E F H
*
P Q R x3
L M
**
** Q>P=value1[x3]:
Vergleiche mit value2[x3]
Q=N?
A B
D E F H
Q<S
L M
T V
X Y Z
Q=Q=value2[x3]:
Liefere x3 und 2 zurück
Q>N
x1 N
C K
* Q<S=value1[x2]:
Verfolge c1[x2]
S W x2
O P R x3
O<Q & P<Q
Institut für Medizinische Informatik
6. Bäume
*** R>Q & x3ist Blatt:
Liefere Null zurück
S W x2
T V
***
X Y Z
Technische Universität
Braunschweig
6.2 Ausg. Bäume
Suchen in B-Bäumen (3/3)
Analyse des Laufzeitverhaltens des Suchalgorithmus
1. Die Suche innerhalb eines Knotens erfolgt linear und ist beendet,
– wenn ein Wert größer oder gleich dem gesuchten Wert ist
– oder alle n[x] Werte des Knotens betrachtet worden sind.
In einem B-Baum der Ordnung t ist n[x] < 2t.
Daher liegt die Laufzeit dieser lokalen Suche in O(t).
2. Wird der Wert in einen inneren Knoten nicht gefunden, so wird
analog zum Binären Suchbaum der nächste Knoten in Richtung der
Blätter weitergesucht.
Die Anzahl der besuchten Knoten sowie die Anzahl der
Festplattenzugriffe ist damit abhängig von der Höhe h des Baumes.
Sie liegt daher in Θ(h) = Θ(logt n) nach Satz 9.3.
3. Die Laufzeit des gesamten Algorithmus liegt nach 1. und 2. in
Ο( t ∗ h ) = Ο(t logt n)
Institut für Medizinische Informatik
Technische Universität
Braunschweig
19
6. Bäume
6.2 Ausg. Bäume
Einfügen in B-Bäume (1/5)
Das Einfügen eines Wertes in einen B-Baum der Ordnung t ist
erheblich komplizierter als bei Binären Suchbäumen:
– Zunächst wird analog zu Binären Suchbäumen ein Blatt
gesucht, in dem der Wert gespeichert werden kann.
– Sollte das Blatt vor dem Einfügen bereits voll gewesen sein, so
verstößt der Baum danach gegen die B-Baum-Definition!
Ausweg: Aufteilen des „übervollen“ Knotens in zwei Knoten am
„Median“ des ursprünglichen Knotens.
Beispiel: B-Baum der Ordnung 3.
Es gilt 2 ≤ n[x] ≤ 5 und 3 ≤ #Kinder ≤ 6 für alle inneren Knoten x
m.A.d. Wurzel (Obergrenzen gelten für alle Knoten).
S
Einfügen von W
C K S X Y
Blatt x
Institut für Medizinische Informatik
C K
W X Y
Aufsplitten & Einfügen
Technische Universität
Braunschweig
6. Bäume
6.2 Ausg. Bäume
Einfügen in B-Bäume (2/5)
– Der neue Vaterknoten muss nun in den ursprünglichen
Vaterknoten integriert werden, wodurch wieder die
B-Baum-Eigenschaft verletzt sein kann.
Rekursiv in Richtung Wurzel ist demnach solange
jeder so entstehende „übervolle“ Knoten aufzuteilen,
bis spätestens ein neuer Vater die „neue“ Wurzel des
Baumes bildet (B-Bäume wachsen in Richtung Wurzel).
– Das beschriebene Verfahren durchläuft den Baum
ggf. zweimal: Erst wird der Baum in Richtung eines
Blattes durchsucht, der Knoten eingefügt und dann
in Richtung der Wurzel ausgeglichen.
– Ein effizienteres Verfahren, dass den Baum nur einmal
durchläuft, teilt auf dem Suchpfad in Richtung des Zielblattes
vorsorglich jeden vollen Knoten auf und fügt zum Schluss den
Wert in einen Knoten ein, der sicher nicht voll ist.
> One-pass-Verfahren
Institut für Medizinische Informatik
Technische Universität
Braunschweig
20
6. Bäume
6.2 Ausg. Bäume
Einfügen in B-Bäume (3/5)
Beispiel (1/3): Einfügen der Buchstaben F, S, Q, K, C, L, H, T, V,
W, M, R, N, P in einen B-Baum der Ordnung 3 (max. 5 Werte).
L
K
K
H T V
C F K Q S
C F
W
C F H
M R N
K S
C F H
L Q S
L Q
K S
T V W
P
L Q S T V
C F H
L M N Q R
T V W
K N S
C F H
L M
P Q R
T V W
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Einfügen in B-Bäume (4/5)
Beispiel (2/3): Einfügen der Buchstaben A, B, X, Y, D, Z in den BBaum der Ordnung 3 (max. 5 Werte).
A B X Y
K N S
A B C F H
L M
D
T V W X Y
C K N S
A B
D F H
Z
A B
P Q R
L M
P Q R
T V W X Y
C K N S W
D E F H
L M
Institut für Medizinische Informatik
P Q R
T V
X Y Z
Technische Universität
Braunschweig
21
6. Bäume
6.2 Ausg. Bäume
Einfügen in B-Bäume (5/5)
Beispiel (3/3): Einfügen des Buchstaben E in den B-Baum der
Ordnung 3 (max. 5 Werte) einmal ohne One-Pass-Verfahren und
einmal mit.
E
A B
ohne One-passVerfahren
C K N S W
D E F H
L M
P Q R
T V
X Y Z
N
E
A B
C K
D E F H
L M
mit One-passVerfahren
S W
P Q R
T V
X Y Z
Technische Universität
Braunschweig
Institut für Medizinische Informatik
6. Bäume
6.2 Ausg. Bäume
Löschen in B-Bäumen (1/8)
Zum Löschen eines Wertes in einen B-Baum der Ordnung t:
1. Zunächst wird der Knoten x gesucht, in dem der Wert v
(=valuei[x] für ein i ) gelöscht werden soll.
2. Wird der Wert aus dem betreffenden Knoten x entfernt, so
können folgende Fälle auftreten:
–
–
Alle Beispielbäume zum
Löschen haben
die Ordnung 3
Fall 1: x ist ein Blatt und trägt mehr als t-1 Werte oder ist zugleich
die Wurzel. Dann kann der Wert einfach gelöscht werden.
Fall 2: x ist ein Blatt, trägt die minimale Anzahl von t-1 Werten und
ein Bruder b von x trägt mindestens t Werte. Dann findet vor dem
Löschen eine Rotation des kleinsten bzw. größten Wertes von b mit
dem Wert des Vaterknotens statt, dessen Teilbäume b und x sind.
K N S
F H x L M b P Q R
Löschen von M
T V
F H
K P S
L N
Q R
T V
P ist kleinster Wert im rechten Bruder b von x
Institut für Medizinische Informatik
Technische Universität
Braunschweig
22
6. Bäume
6.2 Ausg. Bäume
Löschen in B-Bäumen (2/8)
–
Fall 3: x ist ein Blatt und trägt die minimale Anzahl von t-1 Werten.
Gleiches gilt für beide Brüder.
Dann findet eine Verschmelzung von x und einem Bruder b statt,
wobei der Wert des Vaterknotens, dessen Teilbäume b und x sind,
in der Mitte des neuen Knotens zwischen den Werten von x und b
gespeichert wird.
K P S
F H x L M b Q R
Löschen von M
T V
F H
K S
L P Q R
T V
Problem: der Vaterknoten kann damit die kritische
Größe (t-1 Werte) unterschreiten, wodurch
Ausgleichsaktionen nötig werden!
Lösung: s.u.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
>>> PDF 6-74
Institut für Medizinische Informatik
Technische Universität
Braunschweig
23
6. Bäume
6.2 Ausg. Bäume
Einfügen & Löschen: Laufzeitanalyse
Analyse des Laufzeitverhaltens beim Einfügen & Löschen
1. Zunächst muss der für Einfügen/Löschen relevante Knoten x
gesucht und der richtige Index i bestimmt werden.
Beim Einfügen wird hierfür ein Blatt gesucht, das Löschen kann
potenziell jeden Knoten betreffen.
Daher liegt die Laufzeit dieser lokalen Suche entsprechend
der Laufzeitanalyse des Suchalgorithmus in O(t logt n).
2. Sowohl beim Löschen, als auch beim Einfügen, werden dabei
Ausgleichoperationen vorgenommen. Da diese aber lokal
beschränkt sind, und jeden Knoten des Suchpfades maximal
einmal betrifft, kommt allenfalls eine Konstante additiv hinzu.
3. Die Laufzeit der beiden Algorithmen liegen demnach ebenfalls
in Ο(t logt n)
Institut für Medizinische Informatik
Technische Universität
Braunschweig
12. Sortieralgorithmen
4. Heap Sort
•
Heap Sort stellt keine Voraussetzungen bzgl. der zu
sortierenden Daten
•
Gegeben: unsortiertes Array a
•
Ausgabe: sortiertes Array a
•
Verwendung einer spezifischen (virtuellen) Datenstruktur:
(Binärer) Heap
1. Array interpretiert als ausgeglichener binärer Baum B:
•
•
bis auf Ebene der Blätter vollständig
Ebene der Blätter ist gefüllt von links bis zu einem
Endpunkt
2. Nicht die Suchbaumeigenschaft, sondern die HeapEigenschaft gilt in B
Institut für Medizinische Informatik
Technische Universität
Braunschweig
24
12. Sortieralgorithmen
12.4 Heap Sort
Heaps (1/2)
Definition: Ein (binärer) Heap ist ein Array a mit Indexmenge {1,..,n}
für n∈IN das bis zu einem Index h < n (der sog. Heap-Size) mit
Werten des eigentlichen Heaps belegt ist:
1. a.length=n repräsentiere die "Länge" des Arrays
2. a.heapSize=h repräsentiere die Belegung mit Heap-Werten.
Für den durch den Heap repräsentierte Binärbaum gelte:
– a[1] repräsentiert die Wurzel des Baumes
– 2k repräsentiert das linke Kind von Knoten k∈{1,..,h}
Hilfsfunktion: left:IN→IN mit left(k)= 2k
– 2k+1 repräsentiert das rechte Kind von Knoten k∈{1,..,h}
Hilfsfunktion: right:IN→IN mit right(k)= 2k+1
–
k/2  repräsentiert den Vater von Knoten k∈{1,..,h}
Hilfsfunktion: parent:IN→IN mit parent(k)=  k/2 

Technische Universität
Braunschweig
Institut für Medizinische Informatik
12.4 Heap Sort
12. Sortieralgorithmen
Heaps (2/2)
Definition (Fortsetzung):
In einem (Max-)Heap gilt die (Max-)Heap-Eigenschaft:
a[parent(k)] ≥ a[k] f. k∈{2,..,h}
D.h. Werte der Kinder eines Knotens sind kleiner oder gleich dem Wert
des Vaterknotens (Min-Heap entsprechend; hier: Max-Heaps).
Beispiel (Max-Heap):
9
1 2 3 4 5 6 7 8 9
a
9 6 8 1 5 7 2 0 3
mit n=9 und h=6
Institut für Medizinische Informatik
≈
1
2
3
6
8
4
1
5
5
6
7
left(3)
=3*2=6
right(2)
=2*2+1=5
parent(5) =5/2=2,5
=2
Technische Universität
Braunschweig
25
12. Sortieralgorithmen
12.4 Heap Sort
Dienste
Heap Sort benötigt 3 Dienste bzw. Prozeduren:
1. Max-Heapify bzw. maxHeapify():
stellt die Max-Heap-Eigenschaft für einen Teilbaum sicher
2. Build-Max-Heap bzw. buildMaxHeap():
konstruiert ausgehend von einem unsortierten Array einen
(Max-)Heap
3. Heapsort bzw. heapSort():
sortiert ein ungeordnetes Array speicherneutral (d.h. das
Array selbst ohne ein zweites gleichgroßes Array)
Aufrufstruktur:
buildMaxHeap()
maxHeapify()
heapSort()
n/2
n-1
maxHeapify()
Technische Universität
Braunschweig
Institut für Medizinische Informatik
12. Sortieralgorithmen
12.4 Heap Sort
Max-Heapify (1/4)
Eingabe:
1. Referenzparameter Array a: Heap mit ggf. verletzter HeapEigenschaft
2. Wertparameter Index k: gibt Knoten in a an, der HeapEigenschaft im Teil-Heap verletzt, wobei Teilbäume von k
Heap-Eigenschaft einhalten
Ausgabe: Array a mit Teil-Heap aufgespannt durch Knoten k, der
Heap-Eigenschaft erfüllt
Verletzt HeapEigenschaft
k
heapify (a,k)
Erfüllt HeapEigenschaft
k
Erfüllt Heap-Eigenschaft
Institut für Medizinische Informatik
Technische Universität
Braunschweig
26
12. Sortieralgorithmen
12.4 Heap Sort
Max-Heapify (2/4)
Algorithmus Max-Heapify
1. Rekursive Kontrollstruktur
2. Hilfsfunktion: swap(a,i,j) tauscht Inhalt von a[i] mit dem von a[j]
Algorithmus in Pseudocode:
S. PDF-Datei Folie 6-81
Aber erst das Prinzip an einem Beispiel: ....
Technische Universität
Braunschweig
Institut für Medizinische Informatik
12. Sortieralgorithmen
12.4 Heap Sort
Max-Heapify (3/4)
Beispiel: maxHeapify(a,2)
17
1
17
2
5
11
5
9 10
8
2
k
8
7
1
11
17
2
9 10
2
7
11
3
3
10
4
5
8
2
Institut für Medizinische Informatik
7
6
1
4
9 10
6
1
4
8
7
6
1
11
5
5
6
5
3
8
10
4
7
6
4
3
11
10
4
8
2
3
k 6
1
7
11
3
Technische Universität
Braunschweig
27
12. Sortieralgorithmen
12.4 Heap Sort
Max-Heapify (4/4)
Zur Laufzeit:
• Alle Operationen in Max-Heapify bis auf den rekursiven
Aufruf sind in O(1) implementierbar.
• Falls ein rekursiver Aufruf erfolgt, dann nur auf Knoten,
die unterhalb von k liegen.
• Die Aufruffolge ist daher durch die Höhe des von k
aufgespannten Teilbaums nach oben begrenzt.
• Da auch der Teilbaum vollständig ist, liegt die Laufzeit
von Max-Heapify innerhalb von O(log n).
Institut für Medizinische Informatik
Technische Universität
Braunschweig
12. Sortieralgorithmen
12.4 Heap Sort
Build-Max-Heap (1/5)
Eingabe:
Referenzparameter Array a: ungeordnetes Array
(insb. erfüllt a ggf. nicht die Max-Heap-Eigenschaft)
Ausgabe:
Umsortiertes Array a, wobei Max-Heap-Eigenschaft erfüllt ist
Algorithmus:
Wende maxHeapify() auf alle inneren Knoten von Heap a an.
O.Bew. (Übung): Indizes innerer Knoten liegen
in { 1, 2, ...,  n/2  }
maxHeapify()
maxHeapify() angewendet auf Knoten k erwartet,
das k's Teilbäume die Heap-Eigenschaft erfüllen
=> maxHeapify() muss hintereinander auf die Knoten
 n/2 ,  n/2  -1, ..., 2, 1 angewendet werden.
Institut für Medizinische Informatik
Technische Universität
Braunschweig
28
12. Sortieralgorithmen
12.4 Heap Sort
Build-Max-Heap (2/5)
Algorithmus in Pseudocode:
proc Build-Max-Heap(a: <Referenz auf T[]>) begin
var i: int;
a.heapSize ← a.length;
for i ← a.length / 2 downto 1 do
Max-Heapify(a, i);
od;
end
Korrektheit von buildMaxHeap():
z.Z. Schleifeninvariante: Zu Beginn jeder Iteration gilt, dass jeder
Knoten von i+1 bis n (=a.length) die Wurzel eines Max-Heaps ist.
Lösung: Übung (Induktion)
Technische Universität
Braunschweig
Institut für Medizinische Informatik
12. Sortieralgorithmen
12.4 Heap Sort
Build-Max-Heap (3/5)
Beispiel: Array a mit n = 11 (=>Beginn der Iteration bei  n/2  = 5)
1
12
2
j
8
9 10
5
8
7
6
11
2
2
3
j 1
6
5
11
8
5
17
4
9 10
8
2
5
j 11
8
10
17
9 10
8
7
6
4
11
2
3
1
6
4
1
4
5
4
12
3. Iteration
2. Iteration
10
17
3
3
6
1
5
11
2
3
6
4
1
12
12
1
2
j
7
10
11
3
Institut für Medizinische Informatik
3
6
17
4
4. Iteration
5
11
8
5
6
1
4
9 10
8
2
7
10
11
3
Technische Universität
Braunschweig
29
12. Sortieralgorithmen
12.4 Heap Sort
Build-Max-Heap (4/5)
Beispiel (Fortsetzung):
12
1
2
3
j 11
5
6
8
5
1
3
a
12
6
1
4
9 10
1
4
9 10
6
7
10
11
2
3
2 3
4
12 6 1
11
5
6
7
8
9 10 11
3 17 10 5 8 2 4
7
10
11
2
6
1
5
6
8
5
11
8
5
8
2
4
17
4
3
j 17
8
5. Iteration
11
2
3
11
10
1
4
9 10
5
7
6
1
2
17
4
8
j 12
3
1
a
2
3
4 5 6
7
8
9 10 11
17 11 12 8 4 1 10 5 6 2 3
Technische Universität
Braunschweig
Institut für Medizinische Informatik
12. Sortieralgorithmen
12.4 Heap Sort
Build-Max-Heap (5/5)
Laufzeitanalyse:
(2) = O(ld(n))
=> Laufzeit von buildMaxHeap
liegt in O(n ld(n))
(1)
//...
for i ← a.length / 2 downto 1 do
(2)
Max-Heapify(a, i);
// ...
Aber: eine genauere Abschätzung ist möglich.
Voraussetzungen (o.B.>Übung):
1. ein Heap mit n Elementen hat die Höhe  ld n 
2. Höchstens n/2h+1 Knoten haben die Höhe h.
∞
1/ 2
h
Weiterhin gilt:
=
=2
∑
h
(1 − 1 / 2) 2
h =0 2
Damit:
ld n 
∞
ld n  h
h
 n 
=
(
) = O (n ) => lineare
O
n
=
(
)
O
n
O
(
h
)
∑
∑
h
h
h +1 

h =0 2
h =0 2
Laufzeit
∑  2
h =0
Institut für Medizinische Informatik
Technische Universität
Braunschweig
30
12. Sortieralgorithmen
12.4 Heap Sort
Prozedur Heap-Sort (1/5)
Eingabe:
Referenzparameter Array a: ungeordnetes Array (insb.
erfüllt a ggf. nicht die Heap-Eigenschaft)
Ausgabe:
Sortiertes Array a.
Algorithmus:
1. Konstruiere Max-Heap
2. Vertausche erstes (=Wurzel) bzw. größtes
und letztes (=Blatt ganz rechts) Element
des Heaps
...
3. Reduziere Heap um das Blatt ganz rechts
4. Wende maxHeapify() auf die Wurzel an.
5. Solange Blätter vorhanden und nicht
gleich der Wurzel > Schritt 2
Institut für Medizinische Informatik
heapSort()
Technische Universität
Braunschweig
>>> PDF 6-89
Institut für Medizinische Informatik
Technische Universität
Braunschweig
31
12. Sortieralgorithmen
12.4 Heap Sort
Prozedur Heap-Sort (3/5)
Beispiel:
12
1
a
2 3
4
12 6 1
11
5
6
7
9 10 11
8
3 17 10 5 8 2 4
2
≈
3
6
1
4
5
11
2
5
7
12
4
5
8
11
2
6
10
1
9 10
5
7
6
4
8
3
3
11
1.Iteration
swap()
10
1
9 10
6
2
6
4
1
3
12
4
5
4
3
11
8
11
2
1
17
8
8
10
17
9 10
5
7
6
3
8
buildMaxHeap(a)
(s.o.)
1
11
2
17
Technische Universität
Braunschweig
Institut für Medizinische Informatik
12. Sortieralgorithmen
12.4 Heap Sort
Prozedur Heap-Sort (4/5)
Beispiel (Fortsetzung):
12
1
2
10
4
5
8
8
6
8
2
3
5
5
2
12
7
6
1
4
9 10
11
12
17
17
Institut für Medizinische Informatik
3
8
3
4
3
11
1
2
3.Iteration
swap() &
maxHeapify()
5
6
8
5
12
7
6
1
4
9 10
11
3
1
10
10
6
6
7
6
4
1
8
8
5
9 10
5
17
4
10
4
8
11
2
3
11
2.Iteration
swap()
3
1
11
2.Iteration
maxHeapify()
7
6
4
9 10
5
2
3
11
1.Iteration
maxHeapify()
1
2
2
11
17
Technische Universität
Braunschweig
32
12. Sortieralgorithmen
12.4 Heap Sort
Prozedur Heap-Sort (5/5)
Beispiel (Fortsetzung):
1
8
2
4.Iteration
swap() &
maxHeapify()
3
6
5
5
11
3
5
9 10
12
7
6
8
6
5
11
9 10
10
1
4
8
11
7
6
8
11
12
17
3
4
10
5
1
2
8
3
4
2
17
2
4
3
5
2
11
12
1
...
1
9 10
10
7
6
4
8
2
5. Iteration
swap() &
maxHeapify()
3
4
1
6
≈
1 2 3 4 5 6 7
a
8
9
10 11
1 2 3 4 5 6 8 10 11 12 17
11
17
Technische Universität
Braunschweig
Institut für Medizinische Informatik
Zusammenfassender Vergleich
der Sortieralgorithmen
n = Anzahl Elemente der zu sortierenden Folge
Algorithmus
Worst Case
Aver. Case
In place
•
•
•
•
O(n²)
O(n²)
O(n²)
O(k+n)=O(n)
O(n²)
O(n²)
O(n²)
O(k+n)=O(n)
Ja
Ja
Ja
Nein
O(mn+m²)=O(n)
O(mn+m²)=O(n)
Nein
O(n)
O(n ld n)
O(n ld n)
O(n ld n)**
Nein
Nein+++
Ja
Ja
Insertion Sort+
Selection Sort
Bubble Sort
Counting Sort*
(größte ganze Zahl k=O(n))
• Radix Sort*
(bei m Ziffern und Counting Sort)
•
•
•
•
Bucket Sort*
Merge Sort++
Heap Sort
Quick Sort
O(n)
O(n ld n)
O(n ld n)
O(n²)
+Arrayimplementierung; Gut bei kleinen Arrays!
++Gut für externe Sortierung
+++Wg. merge()
*Für geig. Grundmengen **Kleine konst. Faktoren! Gut (am besten) für große Arrays!
Institut für Medizinische Informatik
Technische Universität
Braunschweig
33
Herunterladen