Algorithmen und Datenstrukturen Elementare

Werbung
Algorithmen und
Datenstrukturen
Dipl. Inform. Andreas Wilkens
[email protected]
Elementare Datenstrukturen
Array
Linked List
Stack
Queue
Tree
(Feld)
(Verkettete Liste)
(Stapel)
(Warteschlange)
(Baum)
2
1
Sortierbaum
Der binäre Suchbaum kann auch
“Sortierbaum” genannt werden.
Es lassen sich sehr einfache
Algorithmen definieren, die eine
aufsteigend oder absteigend sortierte
Reihenfolge der Daten ausgeben.
3
Sortierverfahren
Will man eine unsortierte Wertefolge
sortieren, dann kann man aus dieser
Wertefolge einen Sortierbaum aufbauen
und diesen nach
LWR ( aufsteigend)
RWL ( absteigend)
auslesen. Dabei entsteht dann die
sortierte Wertefolge.
4
2
Sortierverfahren
Beispiel
16, 8, 24, 4, 12, 20, 28, 2, 14, 26, 18, 22,
30, 8, 10, 1, 9, 23, 25, 27, 29, 11, 13, 15,
17, 3, 5, 7, 19, 21, 31
Gegeben ist eine unsortierte Folge von
Zahlen...
5
Sortierverfahren
...daraus wird ein Sortierbaum aufgebaut...
16
24
8
4
2
1
6
3
20
12
5
10
7
9
14
11
13
28
15
17
26
22
18
19
21
23
25
30
27
31
29
6
3
Sortierverfahren
...der dann nach LWR oder RWL
durchlaufen und ausgelesen wird.
LWR:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
RWL:
31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
7
Aufbau binärer Suchbaum
Bisher kennen wir folgenden
Algorithmus zum Aufbau eines binären
Suchbaums:
Beim leeren Baum wird der erste Wert in
einen neu geschaffenen Knoten
untergebracht und unter dem root-Pointer
eingehängt.
8
4
Aufbau binärer Suchbaum
Weitere Knoten wie folgt eingehängen:
bei root beginnend im Baum absteigen, bis ein
Nullpointer erreicht wird.
wenn neuer Wert kleiner als aktueller
Knotenwert, dann links absteigen
wenn neuer Wert größer, dann rechts
absteigen.
Neuen Knoten anstelle des gefundenen
Nullpointers einhängen.
9
Nachteil
Die Form des nach diesem Algorithmus
entstehenden Baumes hängt stark ab
von den eingegliederten Daten.
Bei bereits sortierten Daten entsteht
eine lineare Liste.
10
5
Ideal
Ideal wäre es, wenn der binäre
Suchbaum immer die minimale Höhe
hat, da dann die Suchzeit minimiert
wird.
Wir brauchen also ein Verfahren, um
einen Baum mit minimaler Höhe
aufbauen zu können!
11
Unsymmetrie durch löschen
Beim Löschen von Knoten kann auch
ein Baum entstehen, der stark
unsymmetrisch ist.
Dann ist eine Reorganisation des
Baumes sinnvoll um wieder die
minimale Höhe zu erhalten.
12
6
Reorganisieren
Gründe für den Neuaufbau eines
Binärbaums:
um starke Unsymmetrien zu beseitigen
( minimieren der Höhe)
um den Baum zu regenerieren, nachdem
man ihn am Ende einer Arbeitssitzung in
eine Datei abgespeichert hatte
13
Reorganisieren
Das folgende Verfahren ermöglicht den
Neuaufbau des Baumes bei
gleichzeitiger Erzielung größerer
Symmetrie.
Zunächst aber noch einige
Beobachtungen.
14
7
voller binärer Suchbaum
16
24
8
4
2
1
6
5
3
20
12
10
9
7
14
11
13
28
15
17
26
22
18
21
19
25
23
30
27
31
29
Dieser Baum weist einige Besonderheiten auf:
15
voller binärer Suchbaum
16
24
8
4
2
1
6
3
20
12
5
10
7
9
14
11
13
28
15
17
26
22
18
19
21
23
25
30
27
29
31
ist ein voller Baum und trägt die lückenlosen
Werte von 1 bis 31
16
8
voller binärer Suchbaum
16
24
8
4
2
1
6
5
3
20
12
10
9
7
14
11
13
28
15
17
26
22
18
21
19
25
23
30
27
31
29
Inorder-Durchlauf: Knotenwert entspricht der
Reihenfolge-Nummer des Knotens beim
Durchlauf
17
voller binärer Suchbaum
16
24
8
4
2
1
6
3
20
12
5
10
7
9
14
11
13
28
15
17
26
22
18
19
21
23
25
30
27
29
31
alle Knoten mit ungerader Knotennummer
liegen auf der zeichnerisch untersten Ebene
18
9
voller binärer Suchbaum
16
24
8
4
2
1
6
5
3
20
12
10
9
7
14
11
13
28
15
17
26
22
18
21
19
25
23
30
27
31
29
alle Knoten, deren Wert durch 2 aber nicht
durch 4 teilbar ist, liegen auf der zweituntersten Ebene
19
voller binärer Suchbaum
16
24
8
4
2
1
6
3
20
12
5
10
7
9
14
11
13
28
15
17
26
22
18
19
21
23
25
30
27
29
31
alle Knoten, deren Wert durch 4 aber nicht
durch 8 teilbar ist, liegen auf der drittuntersten Ebene
20
10
voller binärer Suchbaum
16
24
8
4
2
1
6
5
3
20
12
10
7
9
14
11
13
28
15
17
26
22
18
19
21
23
25
30
27
31
29
alle Knoten, deren Wert durch 8 aber nicht
durch 16 teilbar ist, liegen auf der viertuntersten Ebene
21
voller binärer Suchbaum
Die gerade genannten Besonderheiten
lassen sich auf alle vollen Suchbäume
verallgemeinern.
Auch wenn beliebige andere Werte in
den Knoten gespeichert werden.
Sie gelten sogar für beliebige volle
Binärbäume.
22
11
Allgemein
Allgemein gilt:
Anhand der Inorder-Reihenfolgenummer
eines Knotens ist seine Position im vollen
Baum bestimmt.
23
Aufbau voller Binärbäume
Liest man einen binären Suchbaum nach dem
Inorder-Verfahren aus und schreibt die Werte
nacheinander in eine Datei, dann stehen dort
die Werte aufsteigend sortiert.
z.B. die Werte von 1 bis 31.
Die Datei wird ausgelesen und daraus ein
neuer Baum mit minimaler Höhe generiert.
Das geht wie folgt:
24
12
Schrittweiser Aufbau
erster Wert eingefügt:
bedeutet: Knoten,
der für spätere
Verbindung gemerkt
werden muß
25
Schrittweiser Aufbau
zweiter Wert eingefügt:
26
13
Schrittweiser Aufbau
dritter Wert eingefügt:
27
Schrittweiser Aufbau
vierter Wert eingefügt:
28
14
Schrittweiser Aufbau
fünfter Wert eingefügt:
29
Schrittweiser Aufbau
Nach dem Einfügen des fünften Werts
in den neuen Baum, müssen sich zum
ersten Mal zwei Pointer für spätere
Verbindung gemerkt werden.
30
15
Schrittweiser Aufbau
21. Wert eingefügt:
31
lastnode-Vektor
Der lastnode-Vektor wird verwendet,
um für jede Ebene des Baums einen
Pointer zwischen zu speichern.
Dieser Pointer zeigt jeweils auf den
letzten hinzugefügten Knoten der
betreffenden Ebene.
(Sofern nicht bereits ein anderer Knoten
darauf zeigt.)
32
16
Schrittweiser Aufbau
33
Schrittweiser Aufbau
Das beschriebene Verfahren funktioniert
nicht nur bei vollen Bäumen.
Falls z.B. nur die Werte 1-21 eingefügt
werden müssen, kann aus dem bis
dahin aufgebauten Gebilde ein
Binärbaum leicht erzeugt werden.
34
17
Binärbaum
Erzeugen eines
Binärbaums aus diesem
Gebilde
Als Vater für Knoten
21 wird der erste
markierte Knoten
der nächsthöheren
Ebene gesucht (20).
Ebenso für Knoten
20, Vater wird 16.
16 wird Wurzel des
gesamten
Binärbaums
35
Vorteile
Bei dem gezeigten Verfahren entstehen
Binärbäume, die recht ausgeglichen
sind.
Im ungünstigsten Fall ist die Höhe um
den Wert 1 schlechter als die eines
vollständigen Baumes.
36
18
Herunterladen