Binäre Bäume

Transcrição

Binäre Bäume
Binäre Bäume
Binäre Bäume
Bäume gehören zu den wichtigsten Datenstrukturen in der Informatik. Sie repräsentieren z.B.
die Struktur eines arithmetischen Terms oder die Struktur eines Buchs. Bäume beschreiben
Organisationshierarchien in Unternehmen oder die Aufrufstruktur eines Divide-and-ConquerAlgorithmus.
Ein Nachteil beim Suchen von Komponenten in linearen Listen ist, dass man sich, beginnend
beim Listenkopf, linear durch die.Liste bewegen muss.
Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten
kürzer.
Dies nutzen wir beim Suchen aus:
kopf
5
Eine Datenstruktur mit Schlüsselwerten 1 bis 10
wurzel
3
4
9
Suchschritte (Mittelwert s)
Suche von 5: 1 Vergleich
Suche von 2: 7 Vergleiche
Suche von 7: 10 Vergleiche
......
6
s = (1 + 2+ ....... + 10) / 10 = 5,5
5
3
9
4
6
2
10
1
8
10
2
8
1
Mittelwert
s = (1+2+3+4+5+ 2+3+4+5+6) / 10 = 3,5
7
Bei geeigneter Fortführung erhalten wir einen Baum.
© Wagner, 14. Apr. 2011 Seite 1
7
Binäre Bäume
Binärbaum
Stufe (level)
der Knoten
0
innerer
Knoten
6
1
9
3
2
8
5
2
li. Teilb.
3
1
Die maximale Stufe
des Baums heißt Höhe:
h=3
Wurzel
4
7
10
Die Zahl der Kanten
von der Wurzel bis
zu einem Knoten
heißt Weglänge.
re. Teilb.
Blatt
= äußerer Knoten
Ein Knoten auf der
Stufe i hat die
Weglänge i
Der Knoten (node) ohne Vorgänger heißt Wurzel (root).
Knoten mit Nachfolgern heißen innere Knoten.
Knoten ohne Nachfolger heißen Blätter (leaf, leaves).
Jedem Knoten ist eine Stufe (level) zugeordnet: Die Stufe ist die Länge des Pfades bis zur
Wurzel.
Die Höhe (height) des Baums ist die maximale Stufe.
Der leere Baum hat die Höhe -1.
Suchaufwand
Schlüssel
6
3, 9
2, 5, 8, 10
1, 4, 7
Zahl der Vergleiche
1
2
3
4
© Wagner, 14. Apr. 2011 Seite 2
Binäre Bäume
Damit erhalten wir einen mittleren Suchaufwand
s = (1 + 2*2 + 4*3 + 3*4)/ 10 = 2,9.
Bei z.B. 1023 Schlüsseln beträgt s = 9.
Definition
Ein binärer Baum (binary tree) vom Knotentyp T (Klassentyp) ist entweder
1. die leere Struktur oder
2. ein Knoten (Wurzel) vom Typ T, der mit zwei verschiedenen binären (Teil-)Bäumen
vom Typ T verknüpft ist: linker und rechter Teilbaum der Wurzel.
Anmerkungen
Auf Grund dieser rekursiven Definition ist ein Baum eine rekursive Datenstruktur.
Falls linker und rechter Teilbaum leer sind, besteht der Baum nur aus der Wurzel.
Bäume
Baum mit 6 Knoten
Leerer Baum
∅
Baum mit 1 Knoten
null
Nur der
Handle
Bemerkung: Die lineare Liste ist ein Sonderfall eines Baums,
wobei jeder Knoten nur einen Nachfolger hat.
© Wagner, 14. Apr. 2011 Seite 3
Binäre Bäume
Definition
Ein binärer Baum heißt voll, wenn alle inneren Knoten 2 Nachfolger haben.
Ein voller Binärbaum heißt vollständig, falls alle Blätter die gleiche Tiefe haben.
Eigenschaften
Wie viele Blätter b hat ein binärer Baum der Höhe h maximal?
-> b ≤ 2h
Wie viele Knoten n hat ein binärer Baum der Höhe h maximal?
-> n ≤ 2h+1 - 1
Wie viele Kanten (edges) e hat ein binärer Baum mit n Knoten? -> e = n - 1
Wie hängen bei einem vollständigen Binärbaum Blattzahl und die Zahl der inneren Knoten
zusammen?
Bäume finden bei arithmetischen Ausdrücken als Strukturbäume (parse trees) eine
Anwendung. In den inneren Knoten sind die Operatoren, in den Blättern werden die
Operanden gespeichert.
© Wagner, 14. Apr. 2011 Seite 4
Binäre Bäume
Strukturbäume (parse trees)
a+b*c
(a + b)*c
+
*
*
a
+
c
b
b
a
Weitere Beispiele:
(( a + b ) / c ) * (d - e*f)
( a + b*c )*d
Aufgabe: Welche der obigen Strukturbäume sind vollständig?
Für einen vollständigen binären Baum der Höhe h gilt:
Höhe
Knoten n
0
1
2
1 = 20+1 -1
3 = 21+1-1
7 = 22+1-1
Blätterzah
l
1= 20
2= 21
4= 22
h
n = 2h+1 -1
2h
n = 2h+1 -1
à n + 1 = 2h+1 | lg
à lg(n + 1) = (h + 1)* lg 2
à h = lg(n+1) /lg 2 - 1
© Wagner, 14. Apr. 2011 Seite 5
c
Binäre Bäume
Eigenschaften
Falls der Baum vollständig ist, gibt es
1 Knoten mit der Weglänge 0
2 "
"
"
1
4 "
"
"
2
8 "
"
"
3
.............
2k "
"
k
Für einen vollständigen Binärbaum der Höhe h = 3 gilt für die mittlere Weglänge:
laenge = (1*0 + 2*1 + 4*2 + 3*8 ) /15 = 2,3
Aufgaben
Berechne Knoten- und Blattzahl, sowie die mittlere Weglänge bei einem vollständigen Baum
der Höhe h = 4, 5, 6, 10, 20.
Die Höhe eines vollständigen binären Baums wächst nur logarithmisch mit der Knotenzahl:
n = 10000 ⇒ h ≈ 13; n=106 ⇒ h ≈ 19
© Wagner, 14. Apr. 2011 Seite 6
Binäre Bäume
Vollständig ausgeglichene Bäume
Konstruktion eines Baums mit minimaler Höhe
(vollständig ausgeglichener Baum)
Beispiel: n = 10
5
nli = [ n / 2]
2
nre = n -1 - [ n / 2]
4
2
nli = [2 div 2]
2
nre = 0
Der komplette Baum
© Wagner, 14. Apr. 2011 Seite 7
1
usw.
Binäre Bäume
Aufgaben:
Erstelle vollständig ausgeglichene Bäume mit n = 5, 6, 7, 8, 9, 11 Knoten.
Lösung (für n = 8)
Vollständig ausgeglichener Baum
(n = 8)
5
7
3
2
4
6
8
1
Definition: Ein binärer Baum heißt vollständig ausgeglichen, wenn sich für jeden Knoten
die Anzahlen der Knoten im linken und rechten Teilbaum um höchstens 1 unterscheiden.
Anmerkung (nicht im Lehrplan)
Eine schwächere Definition gilt für den AVL-Baum:
Definition: Ein binärer Baum heißt ausgeglichener Baum (AVL-Baum: Adelson-Velskij;
Landis), wenn sich für jeden Knoten die Höhen der beiden Teilbäume um höchstens 1
unterscheiden.
© Wagner, 14. Apr. 2011 Seite 8
Binäre Bäume
Algorithmus Voll_Ausgeglichener_Baum
· Erzeuge Knoten für die Wurzel
· Erzeuge linken Teilbaum mit nli = n / 2 Knoten (ganzzahlige Division)
· Erzeuge rechten Teilbaum mit nre = n - nli - 1 Knoten
© Wagner, 14. Apr. 2011 Seite 9
Binäre Bäume
Traversierungsarten
Traversieren eines Baums
(tree traversal)
W
L
R
Preorder: Betrachte (bearbeite) die Wurzel, dann in gleicher Weise
den linken Teilbaum, dann den rechten Teilbaum
Preorder: WLR
Inorder:
LWR
Postorder: LRW
Rekursive Traversierung eines Baums mit n Knoten
Jede Kante wird zweimal durchlaufen: Beim Absteigen und beim Aufsteigen.
Dies ergibt 2n -2 Kantentraversierungen (Schritte), d.h. S(n) = O(n)
© Wagner, 14. Apr. 2011 Seite 10
Binäre Bäume
Fülle einen vollständig ausgeglichenen Baum mit n Knoten gemäss Inorder mit den Zahlen 1
bis n: Gib die Knotenreihenfolge für die Traversierungsarten Preorder und Postorder an: n= 7
( n= 9)
Beispiel: n = 8
Vollständig ausgeglichener Baum
(n = 8)
5
7
3
2
4
6
8
1
Aufgaben
1.1 Erstelle "von Hand" einen vollständig ausgeglichenen binären Baum derart, dass bei
Preorder-Traversierung das Wort ALGORITHMUS gelesen wird.
1.2 Schreibe die Besuchsreihenfolge bei Inorder- und Postorder-Traversierung auf.
1.3 Bei Postorder-Traversierung eines Baumes wird das Wort POSTORDER ausgegeben.
Gib den Baum an.
© Wagner, 14. Apr. 2011 Seite 11
Binäre Bäume
Anwendung: Strukturbäume
Im Elternknoten steht das Operatorsymbol, die Kindknoten sind die Wurzeln der zu dem
Operator gehörenden Terme.
Traversieren eines Strukturbaums
c * (b + a)
*
+
c
b
Preorder
*c+ba
Inorder
c*b+a
Postorder
cba+*
Der Postorderdurchlauf
liefert die Postfixnotation.
Sie kommt ohne Klammern
aus und hält die Operatorprioritäten ein!
a
// jBaum09
Postorder-Traversierung
(a + b)*c
*
a b+ c *
+
a
b
c
© Wagner, 14. Apr. 2011 Seite 12
Binäre Bäume
Aufgaben
Erstelle für folgende Terme den Strukturbaum und gib den Term in Postfixnotation an:
a) a*(b+c) - d
b) 3* a + c/ 5
c) a * b + c - d
d) a * b +( c - d)
e) (a - c) / (e - 11)
f) ((a + b) /c)*(d - e*f)
g) ((a + b) /c) * (d - e + f)
Gib die Strukturbäume an
( a + b*c )*d
(( a + b ) /c )*(d - e * f)
(( a + b) + c) +d
a*(b + c) - d
Welche Ausgaben liefert ein Postorderdurchlauf?
Levelorder-Durchlauf
Durchlaufe den Baum Schicht für Schicht, beginnend mit der Wurzel.
Levelorder-Durchlauf
Start
1
3
2
4
8
6
5
9
7
10
© Wagner, 14. Apr. 2011 Seite 13
Gewinnpositionen
Ende ?
Binäre Bäume
Der Baum stellt Spielpositionen dar. Levelorder sucht Gewinnpositionen, die mit möglichst
wenig Zügen (Kanten) erreichbar sind.
Aufgabe: Wie groß ist die Maximalzahl der Knoten in einer Schicht, wenn der Baum aus n
Knoten besteht?
Lösung:
© Wagner, 14. Apr. 2011 Seite 14

Documentos relacionados