Bäume

Werbung
Bäume
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
1
Inhalt
• Grundbegriffe: Baum, Binärbaum
• Binäre Suchbäume (Definition)
• Typische Aufgaben
• Suchaufwand
• Löschen allgemein, Methode „Schlüsseltransfer“
• Programmiertechnik
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
2
Baum: Grundbegriffe #1
• Graph: gerichtet, ungerichtet
Komponenten:
Knoten Elemente: Eigenschaften
Kanten Beziehungen zwischen Elementen
• Baum:
1. Spezielfall eines Graphen
2. Verallgemeinerung der Liste
Liste: 1 Element: 1 Nachfolger
Baum: 1 Element: ≥ 1 Nachfolger
d
t-ärer Baum, Baum der Ordnung t
zu jedem Element sind höchstens t Nachfolger festgelegt
t=1 Spezialfall: Liste; t=2 Binärbaum; t=3 Ternärbaum, ...
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
3
Baum: Grundbegriffe #2
• Knotensorten
Wurzel
Blatt=äußerer K.
innerer Knoten
Randknoten
•
•
•
•
Vorgänger = Vater
Nachfolger = Sohn = Kind
Knoten ohne Vorgänger
Knoten ohne Nachfolger
Knoten mit Vorgänger und Nachfolger
Knoten mit < t Nachfolger
Pfad
Weg von der Wurzel zu jedem Knoten
Pfadlänge
Anzahl von Knoten im Pfad
Voller Baum
alle Blätter haben die gleiche Pfadlänge
Quasivoller Baum nur die unterste Ebene ist nicht voll besetzt
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
4
Varianten von Bäumen
• Zahl der Nachfolger: fest oder beliebig
• Sortierung:
Ungeordneter Baum: Nachfolger unsortiert
Geordneter Baum: 1., 2., ...,k-ter Nachfolger;
beim Binärbaum: linker, rechter Nachfolger
Ebene 1
W
Ebene 2
Ebene 3
1.
1.
2
W
2.
3
4.
1. 2.
Beide Beispielsbäume: Höhe h=3
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
3.
1. 2.
L
L
R
R
L
R
Linker Teilbaum von W
5
Implementierung von Bäumen
Einige Beispiele:
• als 2 Felder
1
2
•
3
e(1,1)=0 e(1,2)=1 e(1,3)=1
Knoten:
Kanten:
v(1) v(2) v(3)
e(2,1)=0
e(1,1)=0 e(2,2)=0
e(1,2)=0 e(2,3)=0
e(1,3)=0
e(3,1)=0 e(3,2)=0 e(3,3)=0
e[i][j]==1 g.d.w. e[j] Nachfolger von e[i]
als Struktur (C++:Klasse) mit Zeigern ...
natürlich
Knoten-Nr.=1
Knoten-Nr.=2
1
Knoten-Daten
Knoten-Daten
2
3
null
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
Knoten-Nr.=3
Knoten-Daten
null
null
6
null
Zusammenhänge
• Mit der Graphentheorie
Ein Baum ist ein gerichteter zusammenhängender
kreisfreier Graph mit einer speziellen Eigenschaft:
Jeder Knoten hat bis auf einen (Wurzelknoten)
genau einen Vorgänger.
• Mit der linearen Algebra
Baum
kreisfrei
zusammenhängend
Kantenzahl
~ Basis
~ linear unabhängig
~ Erzeugendensystem
~ Dimension eines Vektorraumes
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
7
Bäume und lineare Algebra
• Satz: Charakterisierung von Bäumen
Es sei G = (V,E) ein endlicher Graph; V ... Knotenmenge, E ... Kantenmenge.
Folgende Eigenschaften sind äquivalent:
(1) G ist ein Baum
(2) G ist kreisfrei, und das Hinzufügen einer beliebigen Kante zu E erzeugt einen Kreis (G ist
maximal kreisfrei)
(3) Zwischen je zwei Knoten gibt es genau einen einfachen Weg in G
(4) G ist zusammenhängend, und die Wegnahme einer beliebigen Kante aus E zerstört den
Zusammenhang von G (G ist minimal zusammenhängend)
(5) G ist kreisfrei und seine Kantenzahl ist |E| = |V| - 1
(6) G ist zusammenhängend und |E| = |V| - 1
• analoge Eigenschaften in Vektorräumen
(2) Eine Basis ist eine maximal linear unabhängige Menge, d.h. bei Hinzufügen eines Vektors wird
die Unabhängigkeit zerstört
(4) Eine Basis ist eine minimale Erzeugendenmenge, d.h. bei Wegnahme eines Vektors hat man
kein Erzeugendensystem mehr
(5),(6) In Vektorräumen haben alle Basen eines (endlichdimensionalen) Vektorraumes die gleiche
Größe, nämlich die Dimension des Vektorraumes
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
8
Binärbaum: Grundbegriffe
•
•
•
•
linker, rechter Nachfolger
linker, rechter Teilbaum (Unterbaum) eines Knotens
Ebenen
Höhe des Baums: Anzahl der Ebenen; im Bild: h = 3
Ebene 1
W
Ebene 2
Ebene 3
L
L
R
R
L
R
Linker Teilbaum von W
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
9
Abbildung
• Datenstruktur, wobei jedes Datum = Wertepaar:
Schlüssel:
nach dem Schlüssel wird gesucht
Wert:
Zielinformation
Beispiel: Telefonbuch: Namen = Schlüssel, Telefonnummer = Werte
• Zusammenhang mit der Mathematik:
A: S → W,
A...partielle Abbildung , S...Schlüsselmenge, W...Wertemenge
Partiell: i.d.R nur ein (geringer) Teil der Schlüssel hat einen zugeordneten Wert
• Sonderform Wörterbuch
Abbildung, bei der das gesamte zu speichernde Datum ein Schlüssel ist
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
10
Binäre Suchbäume
• Besonders geeignet für Speicherung von Daten, nach denen
später gesucht werden soll:
Sie sind speziell auf Suchoperationen hin optimiert.
• Definition:
Ein binärer Suchbaum ist ein binärer Baum mit folgenden
Eigenschaften:
(1) Jedem Knoten ist ein Schlüssel key zugeordnet
(2) Sei x ein beliebiger Knoten und y ein Knoten i seinem
linken Unterbaum, so gilt key(y) < key(x)
(3) Sei x ein beliebiger Knoten und y ein Knoten in seinem
rechten Unterbaum, so gilt key(y) > key(x)
• Wertepaare Schlüssel-Wert
• Englisch: Binary Search Tree, BST
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
11
Typische Aufgaben
Typische Operationen mit den Wertepaaren
Schlüssel-Wert sind
• Suchen
Feststellen, ob ein angegebener Schlüssel im Baum enthalten ist,
bzw. den zugehörigen Wert liefern.
• Einfügen
Ein Paar Schlüssel-Wert als einen neuen Knoten an geeignete
Stelle im binären Suchbaum einfügen
• Entfernen
Einen Knoten entfernen, wobei der Baum muss auch nach dem
Löschen die Eigenschaft beibehalten, binärer Suchbaum zu sein.
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
12
Suchaufwand #1
Annahme: alle Schlüssel haben die gleiche Wahrscheinlichkeit,
dass sie gesucht werden.
Dann: Der Suchaufwand ist minimal, wenn alle Knoten Pfade
möglichst gleicher Länge haben (Vollbaum, quasivoller Baum)
Beispiel 1:
Mit einem vorhandenen (Schlüssel-)
23
Datenbestand ist ein binärer Suchbaum
ausgehend vom leeren Baum
15
aufzubauen.
Zuerst wird folgende Schlüsselreihenfolge gewählt:
30
57,23,37,15,30,27,79,33,45
Ergebnis: Pfadlängen-Differenz = 3
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
57
79
37
45
27 33
13
Suchaufwand #2
Beispiel 2:
Eine andere Reihenfolge ergibt eine andere
Suchbaum-Struktur:
33,23,45,15,27,30,37,57,79
15
Ergebnis: Pfadlängen-Differenz = 1
33
23
45
27
37
30
57
79
Die Baumstruktur ist von der Schlüsselreihenfolge abhängig.
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
14
BST programmieren:Löschen
Für Knoten mit 0-1 Nachfolger ist das Löschen einfach:
31
31
25
7
39
27
25
45
27
45
Bei anderen Knoten ist es schwieriger. Z.B.
33
23
15
23
15
27
45
27
37
30
30
57
79
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
45
37 57
Funktioniert, aber...
79
15
BST programmieren:Löschen
• Bessere Lösch-Methode: „Schlüsseltransfer“
33
23
15
45
27
37
23
57
30
30
15
45
27
37
57
79
79
oder
33
37
23
15
45
27
37
30
23
57
79
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
15
45
27
57
30
16
79
Programmiertechnik
1
dK ...ist dieser Knoten
2
bereits drin?
Ein_r(nS, nW, root) nS ... neuer Schlüssel
nW... neuer Wert
RET
1
LN ... linker Nachfolger
Einf_r
RN ... rechter Nachfolger 2
dK.S ... S.v. diesem Knoten 3
1
Beispiel: Einfügen
Neuer Knoten:
25
Einf
dK ex?
33
New Kn(nS,nW,NULL,NULL)
1
J
2
23
N
45
nS<dK.S?
J
2
Ein_r(nS, nW, LN)
N
15 27 37 57 3
25
nS>dK.S?
1
J
Ein_r(nS, nW, RN)
NULL,NULL)
N
RET
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
dK = 33
dK ex? J
25 < 33? J
Ein_r(..., LN)
dK = 23
dK ex? J
25 < 23? N
25 > 23? J
Ein_r(..., RN)
dK = 27
dK ex? J
25 < 27? J
Ein_r(...,LN)
dK = NULL
dK ex? N
New Kn (nS,nW,
17
BST: andere Aufgaben #1
Bisher: Suchen, Einfügen, Löschen. Was gibt es noch?
• Durchlauf durch einen Binärbaum
- In-Ordnungen
LWR-Ordnung: aufgesucht wird:
1. linker Unterbaum, 2. Wurzel, 3. rechter Unterbaum
RWL-Ordnung: aufgesucht wird:
1. rechter Unterbaum, 2. Wurzel, 3. linker Unterbaum
- Prä-Ordnung: WLR, WRL
- Post-Ordnung: LRW, RLW
Aufgaben z.B.:
- Bestimmen aller Blätter, der Anzahl aller Blätter, aller Knoten
- Bestimmen der rechtesten Ecke im linken Unterbaum
- Kopieren, Löschen des Baums
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
18
BST: andere Aufgaben #2
• Fädelung
Beim Durchlauf eines Baums sind stets Rückläufe
notwendig. Der Durchlauf kann beschleunigt werden,
indem die Leerzeiger in den Blättern mit
entsprechenden „Zieladressen“ belegt werden.
33
• Bsp: Fädelung bei LWR
23
15
45
27
37
30
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
19
57
79
Alternative graphische Darstellung von Bäumen
1
(1 (2 (4, 5 (9,10), 6), 3 (7, 8)))
2
4
3
5
6
1 2 4, 5 9, 10 , 6 , 3 7, 8
7
8
1
2
10
9
4
5
9
10
1
2
6
3
3
5
4
9
10
6
7
8
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
7
8
20
Ausgeglichenheit der Bäume
Definition 1 (Classic):
Binäre Baume sind vollständig ausgeglichen,
wenn sich für jeden Knoten die ZAHL
der Knoten in seinem
linken und rechten Teilbaum um höchstens eins unterscheiden.
Definition 2 (AVL-Bäume):
Ein Baum ist genau dann ausgeglichen,
wenn sich für jeden Knoten die HÖHE
der Teibäume um höchstens eins unterscheiden
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
21
AVL-Bäume
Adelson-Velski, Landis:
Neudefinition der Ausgeglichenheit
Länge des Suchpfades: O(log2 n)
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
22
Einfügen in AVL-Bäume
Bsp: Einfügen im linken
Teilbaum
3 Fälle:
1. H(lTb) = H(rTb) ⇒ H(lTb) > H(rTb),
Baum bleibt ausgeglichen
h
l
=
3. H(lTb) > H(rTb) ⇒
die Ausgeglichenheit wird zerstört,
der Baum muß neu strukturiert werden
hl
<
hr
=>
hl
hr
<
h
r
ausgeglichen
Einfügen
hl
>
hl
hr
>>
hr
unausgeglichen
Einfügen
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
>
ausgeglichen
Einfügen
hl
2. H(lTb) < H(rTb) ⇒ H(lTb) = H(rTb)
Baum bleibt ausgeglichen
=>
hr
23
Rotation bei AVL-Bäumen
a
Wiederherstellung der Ausgeglichenheit
n
b
n+1
LR(b,a)
Ziel:
RR(b,a)
Ebene(b)-Ebene(a)++
//höher
//tiefer
Dabei:
(1)
Falls Vater(a) vorhanden:
Vater(a) abhängen, er wird zum Vater(b)
(2) Falls LSohn(b) vorhanden:
Falls RSohn(b) vorhanden:
LSohn(b) abhängen und
RSsohn(b) abhängen und
als RSohn(a) anhängen
als LSohn(a) anhängen
DR=LR+RR
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
24
Rotationsbeispiele#1
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
25
Rotationsbeispiele#2
n+1
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
26
Rotationsbeispiele#3
4
a
4
<
LR
>
na
+7=
5
2
+1=
a
5
7
4
1
5
RR =>
2
DR =>
4
7
3 5 RR
LR 6
+6=
5
3
7
a
2
1
3
na
5 LR =>
LR 7
6
4
DR =>
2
1
+3=
a
na
2
1
7
4
1
4
1 LR 4
na
3
2
a
7
4
>
2 RR
<
1
+2=
7
5
7
2 RR
4
7
5
4
LR =>
5
5
6
5
3
7
a
na
mit: a=ausgeglichen, na=nicht ausgeglichen
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
27
Vielweg-Bäume
Anzahl Nachfolger eines Knotens: >2
4
Nachfolger
Anwendung: Verwaltung großer Datenmengen
Zeiger auf Knoten: Plattenadressen
Abb. 29a statt Speicheradressen
Zugriffszeiten:
Platte: ca. 10 ms
Speicher: 10 ns
(Faktor 106)
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
28
Aufteilung eines Baumes in Seiten
Seite = Teibaum
entspricht:
Abb. 30
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
29
Bayer-Bäume (B-Bäume)
Eingeführt 1970 von Bayer und McCreight
Eigenschaften von Bayer-Bäumen der Ordnung n:
• Jeder Knoten (Seite) bis auf den Wurzelknoten enthält
m Einträge (Schlüssel), mit n<=m<=2*n
• Die Wurzel enthält 1<=m<=2*n Einträge
• Jeder Knoten (Seite) hat 0 oder m+1 Nachfolger, d.h.
Anzahl der Nachfolger = Anzahl der Einträge + 1
• Alle Blätter (Blattseiten) haben die gleiche Höhe h.
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
30
Beispiel für einen B-Baum
Wurzel
Ordnung n=2
25
10 20
m=2
Seite
30 40
m+1=3
2 5 7 8 10 13 14 15 18 20 22 24 25 26 27 28 30 32 35 38 40 41 42 45
Blattseiten
2n=4
n=2
n <= m <= 2n
Abb.31
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
31
Suchen in einem B-Baum
1. Man lese eine Seite in den Hauptspeicher ein (falls existiert).
Hat die angegebene Referenz (Zeiger) den Wert Null, dann
existiert der Schlüssel S nicht.
2. Man prüfe, ob der gesuchte Schlüssel S vorhanden ist.
Diese Suchzeit ist im allgemeinen kleiner als die Zeit zum
Einlesen der Seite vom Hintergrundspeicher.
3. Hat die Suche keinen Erfolg, so liegen folgende Situationen vor:
3.1. Ki < S < Ki+1, für 0 <= i < m-1 mit Ki Schlüssel an der
Stelle i.
Dann setzen wir die Suche auf der Seite Pi fort.
3.2. Km-1 < S . Die Suche wird auf der Seite Pm fortgesetzt.
3.3. S < K1 . Die Suche wird auf der Seite P0 fortgesetzt.
P0 K1
D1
P1 K2
D2
P2
….
x
Pm-2 Km-1 Pm-1
Dm-1
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
32
Löschen aus dem B-Baum#1
Situation 1: Suchargument ist im Blatt:
1.1 Blatt hat mehr als n Elemente (normal):
lösche Element
n=2
20 30
zu löschen: 10
7 10 15 18
22 26
35 40 41
20 30
7 15 18
22 26
Abb. 33a
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
35 40 41
33
Löschen aus dem B-Baum#2
1.2 Blatt hat genau n Elemente (Unterlauf):
betrachte linken (rechten) Bruder
1.2.1 linker (rechter) Bruder hat mehr als n Elemente:
dann ‘verschiebe’ Wurzel ins Blatt und Blatt in die Wurzel
n=2
20 30
7 15 18
zu löschen: 22
22 26
35 40 41
löschen
Unterlauf droht:
Ein Knoten muss min.
2 Elemente haben
20 35
7 15 18
26 30
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
Abb. 33b
40 41
34
Löschen aus dem B-Baum#3
1.2.2 linker und rechter Bruder hat genau n Elemente:
dann ‘verkette’
n=2
20 35
7 15
zu löschen: 26
26 30
40 41
20
7 15
30 35 40 41
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
Abb. 33c
35
Löschen aus dem B-Baum#4
Situation 2: Suchargument ist nicht im Blatt:
rechtes Element im linken Teilbaum ‘hochziehen’
n=2
20 30
löschen
zu löschen: 30
7 15 18
22 26
35 40 41
20 26
7 15 18
22
35 40 41
dann Unterlauf , weiter wie unter 2
18 26
7 15
20 22
2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume
Abb. 33d
35 40 41
36
Herunterladen