PowerPoint

Werbung
7. Natürliche Binärbäume
Ein Baum ist
- ein azyklischer einfacher, zusammenhängender Graph
- d. h. er enthält keine Schleifen und Zyklen: zwischen jedem
Paar von Knoten besteht höchstens eine Kante
Verallgemeinerung von Listen:
Element (Knoten) hat möglicherweise mehrere Nachfolger (Söhne).
Genau 1 Knoten ohne Vorgänger: Wurzel
Knoten ohne Nachfolger: Blätter
Häufig verwendete Datenstruktur: Entscheidungsbäume,
Syntaxbäume, Ableitungsbäume, Suchbäume, ...
Hier im Vordergrund: Verwendung von Bäumen zur Speicherung
von Schlüsseln und Realisierung der Wörterbuchoperationen
(Suchen, Einfügen, Entfernen) in Binärbäumen.
G.Heyer
1
Algorithmen und Datenstrukturen
Darstellungsarten für orientierte Bäume
1) Mengendarstellung
2) Klammerdarstellung
3) Rekursives Einrücken
4) Graphendarstellung
Stufe/Niveau
0
x
a
b
G.Heyer
d
c
e
2
h
1
f
2
g
3
Algorithmen und Datenstrukturen
Baum B heißt geordnet, wenn Nachfolger jedes Knotens
geordnet sind (1., 2., 3. etc.; linker, rechter). Bei einem
geordneten Baum bilden die Unterbäume Bi jedes Knotens eine
geordnete Menge. (Beispiel: Arithmetischer Ausdruck)
Eine geordnete Menge von geordneten Bäumen heißt Wald.
Ordnung von B: maximale Anzahl von Nachfolgern eines
Knotens
Pfad der Länge k: Folge p0, ..., pk von Knoten, so daß gilt: pi
Nachfolger von pi-1.
Höhe eines Baums: maximaler Abstand eines Blattes von der
Wurzel. Tiefe eines Knotens: Abstand zur Wurzel, d.h. Anzahl
der Kanten auf dem Pfad von diesem Knoten zur Wurzel. Die
Knoten auf dem Niveau i sind alle Knoten mit Tiefe i.
Ein Baum der Ordnung n heißt vollständig, wenn alle Blätter
dieselbe Tiefe haben und auf jedem Niveau die maximale Anzahl
von Knoten vorhanden ist.
G.Heyer
3
Algorithmen und Datenstrukturen
Definition
Ein Binärbäum ist ein geordneter Baum, in dem jeder Knoten
höchstens zwei Söhne besitzt (Ordnung 2).
Üblicherweise wird verlangt, dass jeder Knoten 2 oder 0
Nachfolger hat.
Ein Binärbaum ist eine endliche Menge von Elementen, die
entweder leer ist oder ein ausgezeichnetes Element - die
Wurzel des Baumes - besitzt und folgende Eigenschaften
aufweist:
- Die verbleibenden Elemente sind in zwei disjunkte
Untermengen zerlegt.
- Jede Untermenge ist selbst wieder ein Binärbaum und heißt
linker bzw. rechter Unterbaum des ursprünglichen Baumes
G.Heyer
4
Algorithmen und Datenstrukturen
Formale ADT-Spezifikationen
Datentyp
BINBAUM
Basistyp
ELEM
Operationen:
 { TRUE, FALSE };
LEER:
BINBAUM
BAUEBAUM:
BINBAUM x ELEM x BINBAUM
 BINBAUM;
LINKS:
BINBAUM - {b0}
 BINBAUM;
WURZEL:
BINBAUM - {b0}
 ELEM;
RECHTS:
BINBAUM - {b0}
 BINBAUM;
ERZEUGE:
b0
G.Heyer
5
Algorithmen und Datenstrukturen
 l, r,  BINBAUM,  d  ELEM
LEER ( BAUEBAUM ( l, d, r )) = FALSE ;
LINKS ( BAUEBAUM ( l, d, r )) = l ;
WURZEL ( BAUEBAUM ( l, d, r )) = d ;
RECHTS ( BAUEBAUM ( l, d, r )) = r ;
Satz: Die maximale Anzahl von Knoten eines Binärbaumes
(1) auf Stufe i ist 2i , i  0
(2) der Höhe h ist 2h - 1 , h  1
Definition: Ein vollständiger Binärbaum der Stufe n hat
folgende Eigenschaften:
- Jeder Knoten der Stufe n ist ein Blatt.
- Jeder Knoten auf einer Stufe < n hat nicht-leere linke
und rechte Unterbäume.
G.Heyer
6
Algorithmen und Datenstrukturen
Definition: In einem strikten Binärbaum
besitzt jeder innere Knoten nicht-leere linke und rechte
Unterbäume.
Definition: Ein fast vollständiger Binärbaum ist ein Binärbaum
(k  0), so daß gilt:
(1) Jedes Blatt im Baum ist auf Stufe k oder k+1
(2) Falls ein innerer Knoten einen rechten Nachfolger auf Stufe
k + 1 besitzt, dann ist sein linker Teilbaum vollständig mit
Blättern auf Stufe k + 1.
(3) Jeder Knoten auf Stufe < k hat nicht-leere linke und rechte
Teilbäume.
Definition: Bei einem ausgeglichenen Binärbaum ist jedes Blatt
auf Stufe k oder k + 1 ( k  0 ). Jeder Knoten auf Stufe < k hat
nicht-leere linke und rechte Teilbäume.
Zwei Binärbäume werden als ähnlich bezeichnet, wenn sie
dieselbe Struktur besitzen. Sie heißen äquivalent, wenn sie ähnlich
sind und dieselbe Information enthalten.
G.Heyer
7
Algorithmen und Datenstrukturen
Eigenschaften von Binärbäumen
1) Für zwei beliebige Knoten in einem Baum existiert
genau ein Pfad, der sie verbindet.
2) Ein Binärbaum mit N Knoten hat N-1 Kanten.
3) Ein binärer Baum mit N inneren Knoten hat N + 1
äußere Knoten.
4) Die Höhe eines vollständigen binären Baumes mit N
inneren Knoten beträgt log2N.
G.Heyer
8
Algorithmen und Datenstrukturen
Binäre Suchbäume (natürliche Binärbäume)
Für jeden Knoten p eines binären Suchbaums gilt: Die
Schlüssel im linken Teilbaum von p sind sämtlich kleiner als
der Schlüssel von p, und dieser wiederum ist kleiner als
sämtliche Schlüssel im rechten Teilbaum von p.
Ein binärer Suchbaum B =<K,A,S> für eine linear geordnete
Menge M ist ein geordneter, binärer Baum B =<K,A> mit
einer Abbildung S: K->M von der Knotenmenge K in die
Schlüsselmenge M.
Für jeden Knoten k von B muss gelten:
(1) S(k) > S(u) für alle Knoten u im linken Teilbaum von k,
(2) S(k) <=S(u) für alle Knoten u im rechten Teilbaum von k.
Aufbau von Binärbäumen (Beispiel).
G.Heyer
9
Algorithmen und Datenstrukturen
2 Arten der Speicherung:
1) Suchbäume: Schlüssel an inneren Knoten gespeichert, Blätter
repräsentieren Intervalle
2) Blattsuchbäume: Schlüssel in Blättern gespeichert,
Markierung an inneren Knoten dienen als "Wegweiser"
zum Finden des richtigen Blattes.
G.Heyer
10
Algorithmen und Datenstrukturen
Repräsentation von Binärbäumen:
1) Arrays. Nachfolger von a[i] sind a[2i] und a[2i+1]
Feldbaum - Realisierung
Simulation einer dynamischen Struktur in einem
statischen Feld.
Eigenschaften:
- statische Speicherplatzzuordnung
- explizite Freispeicherverwaltung
G.Heyer
11
Algorithmen und Datenstrukturen
Speicherung von Binärbäumen
2) Verkettete Speicherung
*
Info
*
Lsohn
Rsohn
...
...
Freispeicherverwaltung der Struktur wird von der
Speicherverwaltung des Programmiersystems übernommen.
G.Heyer
12
Algorithmen und Datenstrukturen
Typdefinition
typedef struct Knoten {
int
key ;
infotype
info ;
struct Knoten *leftson, *rightson;
};
typedef struct Knoten *Knotenzeiger;
Knotenzeiger
G.Heyer
Wurzel;
13
Algorithmen und Datenstrukturen
Suchen in natürlichen Binärbäumen
Annahme: Für jeden Knoten k mit Söhnen p0,..., pl-1 und
Schlüsseln s1, ..., sl-1 gilt (Suchbaumbedingung):
alle im Teilbaum unter pi-1 gespeicherten Schlüssel sind
kleiner als si, si ist kleiner als alle im Teilbaum unter pi
gespeicherten Schlüssel (1  i l-1).
Suche nach Schlüssel x:
Suche in gerade inspiziertem Knoten kleinstes i, so daß x < si.
Falls solches si existiert, führe Suche in Knoten fort, auf den
pi-1 zeigt (falls pi-1 = nil Suche erfolglos) .
Falls solches si nicht existiert, führe Suche in Knoten fort, auf
den pi zeigt (falls pi = nil Suche erfolglos) .
Maximale Anzahl inspizierter Knoten: Tiefe des Baumes.
Suche innerhalb der Knoten etwa durch lineares oder binäres
Suchen zu realisieren. Da l m, ist Aufwand dafür konstant.
G.Heyer
14
Algorithmen und Datenstrukturen
void Suchen (Knotenzeiger p, int x)
{
if ( p == NULL ) printf („Schluessel nicht gefunden!\n“);
if ( x < p --> key) Suchen( p--> leftson, x );
else ( if x > p--> key ) Suchen( p --> rightson, x);
else printf („Schluessel gefunden! \n“);
}
G.Heyer
15
Algorithmen und Datenstrukturen
Herunterladen