4 Bäume .... Suchbäume, Heaps

Werbung
Datenstrukturen: Bäume
4
Bäume
4.1 Terminologie und Grundlagen: Modelle für
Graphen und Bäume
4.2. Spezifikation und einfache
Algorithmen
4.3 Anwendungen
- 4.3.1 Auswertung von Operatorbäumen
- 4.3.2 Huffman-Code
4.4 Objektorientierte Implementierung
.... Suchbäume, Heaps
hs / fub – alp3–11-Tree-1
1
4 Bäume
Verallgemeinerung von Folgen:
Verzweigung in jedem Knoten möglich
Jeder Knoten genau auf einem Weg erreichbar
o
1
o
o
1
entspricht den Folgen:
1
o
1
1
000
001
01
101
11
hs / fub – alp3–11-Tree-1
2
1
Modellierung mit Bäumen
Viele
Beispiele - auch außerhalb der Informtik
Organisationsdiagramm
FUB
FB
Math&Inf
FB Physik
.....
Institut Math
1
AG Theorie
Institut f.
Informatik
AG DB
FB
Germanistik
...
....
Institut Math
2
AG VSYS
....
AG Telematik
hs / fub – alp3–11-Tree-1
3
Modellierung mit Bäumen
Dokumentstruktur
Buch
Inhalt
Übersicht
Kapitel
Hauptteil
Index
Zusammenfassung
Abschnitt
Hier: Aufbau eines Buches, nicht ein konkretes Buch
Metadaten <-> Daten
hs / fub – alp3–11-Tree-1
4
2
Modellierung mit Bäumen
XML Textauszeichnung (Markup)
<?xml version="1.0"?>
<rezept>
<zutaten anzahl="3">
<zutat>Ei</zutat>
<zutat>Mehl</zutat>
<zutat>Salz</zutat>
</zutaten>
<anleitung>
Alles zusammenrühren und backen.
</anleitung>
</rezept>
rezept
{ anzahl="3" }
zutaten
zutat
Ei
Textuelle Darstellung
zutat
Mehl
anleitung
zutat
Salz
Alles zusammenrühren und backen.
Graphische Darstellung
hs / fub – alp3–11-Tree-1
5
hs / fub – alp3–11-Tree-1
6
Modellierung mit Bäumen:XML
Abstraktes Dokumentmodell:
Baum mit Knoten des
Typs:
root, element, attribute,
text.
3
Packages
org.apache.tools.ant
org.apache.tools.ant.taskdefs
org.apache.tools.ant.taskdefs.compilers
Klassenbibliothek
org.apache.tools.ant.taskdefs.optional
org.apache.tools.ant.taskdefs.optional.clearcase
org.apache.tools.ant.taskdefs.optional.depend
org.apache.tools.ant.taskdefs.optional.depend.constantpool
org.apache.tools.ant.taskdefs.optional.dotnet
org.apache.tools.ant.taskdefs.optional.ejb
org.apache.tools.ant.taskdefs.optional.ide
Symbolische IP-Adressierung
org.apache.tools.ant.taskdefs.optional.javacc
org.apache.tools.ant.taskdefs.optional.jlink
org.apache.tools.ant.taskdefs.optional.jsp
org
org.apache.tools.ant.taskdefs.optional.junit
org.apache.tools.ant.taskdefs.optional.metamata
org.apache.tools.ant.taskdefs.optional.net
apache
sun
org.apache.tools.ant.taskdefs.optional.perforce
org.apache.tools.ant.taskdefs.optional.scm
org.apache.tools.ant.taskdefs.optional.sound
...
tools
src
org.apache.tools.ant.taskdefs.optional.vss
org.apache.tools.ant.types
org.apache.tools.ant.util
taskdefs
util
org.apache.tools.ant.util.regexp
org.apache.tools.mail
org.apache.tools.tar
Modellierung mit Bäumen: Sprache
Syntax natürlicher Sprache
Satz
Nominalphrase
Artikel
Der
Nomen
Hund
Verbalphrase
Verb
bellt
Adverb
laut
... und
hs / fub – alp3–11-Tree-1
8
4
Modellierung mit Bäumen: Sprache
... Syntax von Programmiersprachen
Methode
Parameter
Anweisung
Typ Bezeichner
float
Bezeichner
Lokale
Anweisungen
Vereinbarung
square
myVar
...
...
hs / fub – alp3–11-Tree-1
9
Modellierung mit Bäumen
... Syntax arithmetischer Ausdrücke: Operatorbaum
Infix: (a+b)*(c-d)
*
+
a
Postfix: a b + c d - *
b
c
d
Operatorbaum:
Endknoten ("Blätter")
sind Argumente (a,b,c),
die anderen ("inneren")
Knoten sind Operatoren
hs / fub – alp3–11-Tree-1
10
5
Bäume: Spezialfall von Graphen
4.1 Modelle für Graphen und Bäume
Siehe auch Math. für Informatiker, hier nur Wiederholung und
Einführung der verwendeten Terminologie.
Baum als Spezialfall von ungerichteten Graphen:
Graph G = (V, K) ,
K ⊆ V X V gerichteter Graph
oder K ⊆ {{x,y}| x,y ∈ V} ungerichteter Graph
V : Knotenmenge ("vertex")
K : Kantenmenge
Schreibweise: auch für ungerichtete Graphen (x,y) ∈ K
hs / fub – alp3–11-Tree-1
11
Bäume: Spezialfall von Graphen
Weg (Pfad) p im Graphen G (V,K) von Knoten a nach
Knoten b:
p = (v1,v2,...,vn ) mit v1=a, vn=b und (vi, vi+1) ∈ K
Schreibweise: p = a ->b
Pfadlänge = Anzahl durchlaufener Kanten,
Beispiel: Pfadlänge von p = n-1
p heißt einfach, wenn vi != vj für i != j
Beispiel: einfacher Pfad der Länge 3
Beispiel: Pfad der Länge 4,
nicht einfach
hs / fub – alp3–11-Tree-1
12
6
Bäume: Spezialfall von Graphen
G = (V,K), ungerichtet, heißt zusammenhängend, wenn
es zu je zwei Knoten x, y einen Pfad (x->y) gibt
G = (V, K) heißt azyklisch (kreisfrei),
wenn für alle Knoten x gilt: es gibt keinen Pfad (x->x)
Beispiel: azylischer Graph
hs / fub – alp3–11-Tree-1
13
Bäume
Def: Freier Baum
azyklischer, ungerichteter, zusammenhängender
Graph
Beispiel:
Beh.: Hinzufügen einer weiteren Kante erzeugt Zyklus
hs / fub – alp3–11-Tree-1
14
7
Bäume
Def: Wurzelbaum
Freier Baum mit ausgezeichnetem Knoten: Wurzel
1
Beispiel:
7
8
4
4
6
5
1
9
9
6
3
5
8
10
7
10
2
1
2
3
2
4
9
3
6
5
10
7
8
hs / fub – alp3–11-Tree-1
15
Terminologie
Vorgänger,
Elternknoten
• jeder Knoten außer der Wurzel hat genau
einen direkten Vorgänger (Elternknoten)
z.B.: Elternknoten von h ist c
w
b
g
c
h
d
i
e
f
j
• Vorgänger von Knoten x sind
- der direkte Vorgänger und
- dessen Vorgänger
oder: alle Knoten auf dem Pfad von
der Wurzel w bis zum direkten
Vorgänger von x
z.B.: b und w sind Vorgänger von g
Ein Pfad (w -> x) von der Wurzel nach x heißt Wurzelpfad.
Eigenschaft: x,y Knoten eines Baumes => (x->y) existiert und ist eindeutig.
hs / fub – alp3–11-Tree-1
16
8
Terminologie
Kind,
w
Nachfolger
b
c
h
g
d
e
f
j
i
• ein Knoten hat null, einen oder mehrere direkte Nachfolger (Kinder).
• y ist Nachfolger von x, wenn y direkter Nachfolger von x ist oder
oder wenn y Nachfolger eines direkten Nachfolgers x' von x ist.
Bsp: h, i sind Nachfolger von c;
Alle Knoten bis auf w sind Nachfolger
von w.
Achtung: Manchmal wird die Nachfolgerrelation reflexiv definiert, so
dass jeder Knoten Nachfolger (Nf) von sich selbst ist.
Dann Nf und echte Nf unterscheiden.
hs / fub – alp3–11-Tree-1
17
Terminologie
Geschwister,
w
b
g
c
h
d
i
Blätter, innere Knoten
e
f
j
Sind x und y direkte
Nachfolger von z, heißen
sie Geschwisterknoten.
Bsp.: h, i sind Geschwisterknoten.
Ein Knoten ohne direkten Nachfolger heißt
Blatt, alle anderen sind innere Knoten.
Bsp.: g, h, i, j, f sind Blätter,
w, b c, d, e sind innere Knoten.
hs / fub – alp3–11-Tree-1
18
9
Terminologie
Grad,
b
Höhe, Tiefe, Größe
w
c
d
h
g
e
f
j
i
Grad grad (x) eines Knotens x = Anzahl der Kinder von x.
Bsp.: grad (c) = 2, grad (w) = 5, grad (f) = 0.
Grad eines Baums = maximaler Grad seiner Knoten.
hs / fub – alp3–11-Tree-1
Ebene 0:
Knoten der Tiefe 0
w
b
g
c
h
19
d
i
e
f
j
Ebene 1
Knoten der Tiefe 1
Ebene 2
Knoten der Tiefe 2
Tiefe d (x) von Knotens x = Anzahl der Kanten auf dem Wurzelpfad zu x.
Bsp: d(c) = 1, d(w) = 0, d(h) = 2.
Höhe h(t) eines Baums t = maximale Tiefe seiner Knoten.
Ebene (level) i = Menge der Knoten der Tiefe i
Größe s(x) eines Knotens x = Anzahl Nachfolger +1 (für x selbst)
Größe S(t) eines Baums t = Anzahl der Knoten von t
10
Terminologie
Def: Geordneter Baum
T1
1
3
10
6
5
8
7
2
2
4
T2
1
9
4
5
9
3
6
10
7
8
Ein Wurzelbaum heißt geordnet, wenn für jeden Knoten die
Menge der Kinder geordnet ist.
Bsp: Die Bäume T1 und T2 sind als (ungeordnete) Wurzelbäume
gleich, als geordnete jedoch nicht.
hs / fub – alp3–11-Tree-1
21
Terminologie
Def: Positionsbaum
1
2
4
1
T1
3
5
T2
2
6
4
3
5
6
Ein Wurzelbaum heißt n-ärer Positionsbaum (n>1), wenn jeder
Knoten 0 <= k <= n Kinder hat, von denen jedes eine
Position i, 0 <= i < n hat.
Wichtigster Spezialfall n = 2 : Binärbaum
Sprechweise: linkes Kind, rechtes Kind
Beachte: T1 und T2 sind als geordnete Bäume gleich, aber
nicht als Binärbäume.
hs / fub – alp3–11-Tree-1
22
11
Terminologie
Teilbaum
Ist x ein Kind des Knotens y, dann heißt der von den Nachfolgern
von x gebildete Baum mit Wurzel x Teilbaum von y.
Ein Knoten eines Binärbaums besitzt einen linken und rechten
Teilbaum.
1
T1
2
3
4
6
5
Die Wurzel 1 des Binärbaums T1
hat den linken Teilbaum mit Wurzel 2
und den Knoten 2,4,5 und den rechten
mit Wurzel 3 und Knoten 3,6 .
hs / fub – alp3–11-Tree-1
23
Binärbaum als Positionsbaum
T1 = {1, a { (1, b { (1,d) (2, e { (1, g) } ) } ), (2, c { (2,f) } ) }
a
T1
b
c
d
e
g
Positionsbäume praktisch immer nach
Position geordnet. Damit geordnete Bäume.
Rekursive Definition:
Def: Ein binärer Baum T ist
- leer
- oder er besitzt eine Wurzel r,
einen linken Teilbaum und
einen rechten Teilbaum.
hs / fub – alp3–11-Tree-1
24
12
Rekursive Definition
Haskell type:
> data BT1 t = Empty| BT1 (BT1 t) (BT1 t)
>
deriving (Show)
Analog Mehrwegbäume (k-äre Bäume mit k > 2) :
Ein k-ärer Baum (oder Mehrwegbaum vom Grad k)
- ist leer
- besteht aus einer Wurzel und
k k-ärenTeilbäumen
hs / fub – alp3–11-Tree-1
25
Terminologie
Def: Volle binäre Bäume
Manchmal technisch vorteilhaft:
leeren Baum explizit darstellen.
a
T1
b
c
d
e
g
f
Def: Ein voller binärer Baum T ist
ein binärer Baum, dessen Knoten
- entweder externe Knoten sind
- oder den Grad 2 haben
Analog: volle k-äre Bäume
Beachte: die externe Knoten sind nicht die Blätter nach obiger
Definition !
Das sind die Knoten, die genau zwei externe Knoten als Kinder haben.
hs / fub – alp3–11-Tree-1
26
13
Eigenschaften von Bäumen
(E1)
Für die Höhe h eines Mehrwegbaums (MW-Baum)
vom Grad k mit
n Knoten gilt:
log k (n+1) -1 <= h < = n – 1
Extremfälle für k=2:
a
T1
entarteter Baum,
Folge
b
c
d
e
fast vollständiger Baum
hs / fub – alp3–11-Tree-1
27
Vollständige Bäume
Def:
Ein vollständiger MW-Baum B vom Grad k und Höhe
h ist ein Baum, dessen Blätter alle die gleiche Tiefe
besitzen und alle inneren Knoten k Nachfolger
haben.
B heißt fast vollständig, wenn nur die letzte Ebene
nicht voll besetzt ist.
a
vollständig
T1
b
d
c
e
T1
b
d
fast vollständig
a
c
e
hs / fub – alp3–11-Tree-1
f
28
14
Eigenschaften
(E2)
Ein MWbaum vom Grad k der Höhe h enthält
n <= kh+1-1 Knoten
(E3)
Ein vollständiger MW-Baum vom Grad k mit
n Blattknoten hat n-1 innere Knoten.
... oder: Höhenwachstum eines vollständigen binären
Baums um 1 verdoppelt die Anzahl möglicher Knoten.
hs / fub – alp3–11-Tree-1
29
Markierte binäre Bäume
Knoten oder Kanten eines Binärbaums enthalten meist
Daten, z.B. Operatorbaum:
*
+
a
b
c
d
Markierung: Abbildung von Werten auf Knoten
oder Kanten
hs / fub – alp3–11-Tree-1
30
15
Modelle markierter Bäume
1
a)
jedem Knoten wird Wert aus
Typ T zugeordnet:
B T = {(b,m) | b ist Binärbaum
mit Knotenmenge V,
m:: V -> T}
b) inneren Knoten wird Wert aus
Typ T zugeordnet,Blättern aus T' :
B T,T' = {(b,m,t) | b ist Binärbaum
m:: Innere Knoten -> T,
t:: Blätter -> T'}
c) Kanten werden Werte aus T
zugeordnet, Blättern Werte
aus T' :
MT,T' = {(b,k,t) | b Binärbaum,
k::Kanten -> T,
t:: Blätter in T'}
o
o
T2
2
3
6
4
*
+
a
1
1 01
b
o
c
d
1
11
1
101
000 001hs / fub – alp3–11-Tree-1
31
16
Herunterladen