Bäume

17
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 1 8. A llgem eine Bäum e und Binärbäum e Bäum e -Ü berblick - O rientierte Bäum e - Darstellungsarten - G eordnete Bäum e Binärbäum e:Begriffe und D efinitionen R ealisierung von Binärbäum en - Zeiger-Realisierung - A rray-Realisierung N atürliche Bäum e /Suchbäum e - W örterbuchoperationen auf Suchbäum en D urchlaufen von binären Bäum en - Preorder-, Inorder-, Postorder-Traversierung - Rekursive und iterative V ersion

description

Bäume. Bäume gehören zu den wichtigsten Datenstrukturen: Entscheidungsbäume, Syntaxbäume, Ableitungsbäume, Codebäume, Suchbäume, ... Ein Baum ist - PowerPoint PPT Presentation

Transcript of Bäume

Page 1: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 1

8. Allgemeine Bäume und Binärbäume

Bäume - Überblick

- Orientierte Bäume

- Darstellungsarten

- Geordnete Bäume

Binärbäume: Begriffe und Definitionen

Realisierung von Binärbäumen

- Zeiger-Realisierung

- Array-Realisierung

Natürliche Bäume / Suchbäume

- Wörterbuchoperationen auf Suchbäumen

Durchlaufen von binären Bäumen

- Preorder-, Inorder-, Postorder-Traversierung

- Rekursive und iterative Version

Page 2: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 2

Bäume

Bäume gehören zu den wichtigsten Datenstrukturen: Entscheidungsbäume, Syntaxbäume, Ableitungsbäume, Codebäume, Suchbäume, ...

Ein Baum istein azyklischer einfacher, zusammenhängender Graph, d. h. er enthält keine Schleifen und Zyklen: zwischen jedem Paar von Knoten besteht höchstens eine Kante

Orientierter Baum: Ein orientierter Baum ist ein gerichteter, zusammenhängender und zyklenfreier Graph mit einem ausgezeichneten Knoten (Wurzel). Jeder Knoten im Graph ist von der Wurzel aus auf genau einem Weg erreichbar. (Vertikale Orientierung)

(Orientierte) Bäume sind verallgemeinerte Listenstrukturen: Element (Knoten) hat i.a. mehrere Nachfolger (Söhne).

Wurzel: einziger Knoten ohne VorgängerBlätter: Knoten ohne Nachfolger

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.

Page 3: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 3

Begriffe

Sei B ein Baum.

Ordnung (Grad) 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. Länge des Pfades von diesem Knoten bis zur Wurzel. Die Wurzel hat Niveau 0. Die Knoten auf dem Niveau i sind folglich alles Knoten mit der Tiefe i.

Innere Knoten: Alle außer Blattknoten.

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.

Page 4: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 4

D a r s t e l l u n g o r i e n t i e r t e r B ä u m e

1 . M e n g e n d a r s t e l l u n g

2 . K l a m m e r d a r s t e l l u n g

W u r z e l = e r s t e s E l e m e n t i n n e r h a l b e i n e sK l a m m e r p a a r e s

3 . R e k u r s i v e s E i n r ü c k e n

4 . G r a p h e n d a r s t e l l u n g

{a,{b},{c}}{a,{c},{b}}

{x

x

B 1 B 2 B 3

B 1 =a

B 4 B 5

B 4 = b B 5 = c

B 2 =de

fg

B 3 = h

O b j e k t e : a , b , c , . . .

B ä u m e : B 1 , B 2 , B 3 , . . .

{ x , B 1 , B 2 , B 3 }

{ x , { a , { b } , { c } } , { d , { e } , { f , { g } } } , { h } }

B 1 B 2 B 3

{ a , { b } , { c } } { a , { c } , { b } }

x

B 2B 1 B 3

xB 1

B 2B 3

xa

b c

d e f

gh

Page 5: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 5

Darstellungen (2)

Graphendarstellung

Stufe (Ebene)

0

1

2

3

Bezeichnungen

Wurzel:

Blätter:

innere Knoten:

Grad (K) = # Nachfolger von K

Grad (x) = Grad (g) =

Grad (Baum) = Max (Grad(Ki)) =

Stufe (Ki) = Pfadlänge l von Wurzel nach Ki

Stufe 0: Stufe 2:

Stufe 1: Stufe 3:

Höhe h =

Gewicht w = # der Blätter =

Page 6: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 6

Geordnete Bäume

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.

Eine geordnete Menge von geordneten Bäumen heißt Wald.

Beispiel: Arithmetischer Ausdruck a * (b - c) + d/e

- Graphendarstellung (Operatorbaum)

- Klammerdarstellung

{+, { *, { a }, {-, { b }, { c } } }, { /, { d }, { e } } }

+

b c

a -

*

d e

/

Page 7: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 7

Binärbäume

Definition: Ein Binärbäum ist ein geordneter Baum, in dem jeder Knoten höchstens zwei Nachfolger besitzt (Ordnung 2).

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

Page 8: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 8

Binärbäume (2)

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 - 1 , h 0

Page 9: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 9

Realisierung von Binärbäumen

1. Zeiger-Realisierung

Freispeicherverwaltung der Struktur wird von der Speicherverwaltung des Programmiersystems übernommen

2. Array-Realisierung

(Array a[]: Wir nummerieren die Knoten des Binärbaumes mit der Wurzel beginnend durch, indem wir jede Ebene von links nach rechts durchlaufen und dann in die nächste Ebenene absteigen. Die Knotennummer ist die Position des Elementes im Feld (erste Feldposition trägt die Nummer 1). Der linke Nachfolger eines Knotens k steht auf Position 2*k , der rechte Nachfolger auf Position 2*k+1. Für fast vollständige oder zumindest ausgeglichene Binärbäume bietet die Array- Ralisierung eine sehr elegante und effiziente Darstellungsform an.

. .Lsohn Rsohn

Page 10: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 10

Binäre Suchbäume (natürliche Binärbäume)

Suchbaumbedingung:Für jeden Knoten k eines binären Suchbaums B gilt: Die Schlüssel im linken Teilbaum von k sind sämtlich kleiner als der Schlüssel S(k) von k, und dieser wiederum ist kleiner als sämtliche Schlüssel im rechten Teilbaum von k,d.h. falls die Teilbäume nicht nur aus einem Blatt bestehen gilt(1) S(w) < S(k) für alle Knoten w im linken Teilbaum von B, (2) S(w) >=S(k) für alle Knoten w im rechten Teilbaum von B.

Definition: Ein binärer Suchbaum B =<K,w,S> für eine linear geordnete Menge M ist ein geordneter, binärer Baum B =<K,w> mit einer Abbildung S: K->M von der Knotenmenge K in die Schlüsselmenge M, die die Suchbaumbedingung erfüllt.

Page 11: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 11

Wörterbuchoperationen

Annahme (Suchbaumbedingung):

Für einen beliebigen Knoten k mit Schlüssel S(k) des Binärbaumes gilt: Alle im linken Teilbaum von k gespeicherten Schlüssel sind kleiner als S(k) und S(k) wiederum ist kleiner als alle Schlüssel im rechten Teilbaum von k.

(1) Suche nach Schlüssel x:

Die Suche nach einem Schlüssel x in einem Baum (Teilbaum) läuft nach folgendem rekursiven Schema ab:

Man inspiziere den Wurzelknoten des Baumes.

Falls x = Schlüssel des inspizierten Knotens: Suche beendet. Sonst:

Falls x < Schlüssel des inspizierten Knotens: Setze Suche im linken Teilbaum fort. Falls x > Schlüssel des inspizierten Knotens: Setze Suche im rechten Teilbaum fort.

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.

Page 12: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 12

Wörterbuchoperationen (2)

Einfügen eines Schlüssels

Folge von (paarweise verschiedenen) Schlüsseln der Reihe nach in den anfangs leeren Baum so einfügen, dass immer die Suchbaumbedingung erfüllt bleibt.

Schema zum Einfügen von x: 1. Suche nach Schlüssel x. FERTIG, falls dieser

gefunden. Sonst:2. Suche endet an einem Knoten k mit maximal einem

Teilbaum (der aber den Schlüssell nicht enthalten kann). Hänge an k einen neuen Knoten rechts oder links gemäß Suchbaumbedingung an und schreibe x in den neuen Knoten ein.

Das folgende Programm leider nur in PASCAL.

Page 13: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 13

Programm Einfügen eines Schlüssels

PROGRAM Baumaufbau (input, output);TYPE Kptr =

Knoten;

Knoten = RECORDLsohn, Rsohn : Kptr;Info : InfoTyp;Key: integer;

END;VAR wurzel: Kptr;k: integer;

PROCEDURE Einfügen (VAR p: Kptr; k: integer);{sucht im Baum mit Wurzel p nach Schlüssel x}BEGIN

IF p= NILTHEN {neuen Knoten mit Schlüssel k einfügen} BEGIN new(p); p

.Lsohn:=NIL;

p.Rsohn:=NIL; p

.key:=k

ENDELSEIF k<p

.key

THEN Einfügen (p.Lsohn, k)

ELSE IF k>p

.key

THEN Einfügen (p.Rsohn, k)

ELSE {p.key=k}

write('Schlüssel schon vorhanden')END;BEGIN {Baumaufbau}

wurzel:=NIL;WHILE NOT eof(input) DO

BEGINread(k); Einfügen (wurzel, k)

ENDEND

Page 14: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 14

Wörterbuchoperationen (3) Entfernen eines Schlüssels

• Das Entfernen eines Schlüssels x gelingt nach

folgendem Schema: • Suche nach x. Falls x nicht gefunden STOP.

Ansonsten gibt es (genau) einen Knoten k mit

S(k) = x.

Fälle:

1. Knoten k ist ein Blattknoten: Entferne diesen.

2. Knoten k hat nur einen nichtleeren Teilbaum: Entferne x aus Knoten k und mache diesen zur Wurzel des Teilbaumes.

3. Knoten k hat zwei Teilbäume: Suche nach kleinstem Schlüssel im rechten Teilbaum B_r. Dieser liege im Knoten q mit Wert y. Ersetze den Schlüssel x des Knotens k durch y und entferne den Schlüssel y aus B_r (Fall 2, der linke Teilbaum von q ist ja leer.).

Page 15: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 15

Durchlaufen eines Binärbaums

Baumdurchlauf (tree traversal): Verarbeitung aller Baumknoten gemäß vorgegebener Strukturierung

Rekursiv anzuwendende Schritte:

1. Verarbeite Wurzel: W 2. Durchlaufe linken UB: L 3. Durchlaufe rechten UB: R

Durchlaufprinzip impliziert sequentielle, lineare Ordnung auf der Menge der Knoten

3 Strategien:

1. Vorordnung (preorder): WLR

2. Zwischenordnung (inorder): LWR

3. Nachordnung (postorder): LRW WLR zum Beispiel heißt: Besuche zuerst die Wurzel, und durchlaufe dann den linken und danach den rechten Unterbaum. Besuchen des Wurzelknotens impliziert die Ausgabe seines Inhaltes und/oder Ausführen der Operationen wie sie in dem besuchten Knoten vorgeschrieben sind. Durchlaufen der Unterbäume erfolgt wieder nach dem WLR Schema.

Page 16: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 16

Inorder-Traversierung (LWR)

Rekursive Version:

PROCEDURE LWR (Wurzel : Kptr);BEGIN

IF Wurzel <> NIL THENLWR (Wurzel^.Lsohn);Verarbeite (Wurzel^.Info);LWR (Wurzel^.Rsohn);

ENDEND LWR;

Iterative Version:

- Ziel: effizientere Ausführung durch eigene Stapelverwaltung

- Vorgehensweise:

Nimm, solange wie möglich, linke Abzweigung undspeichere den zurückgelegten Weg auf einem Stapel.

Aktion 1: PUSH(S, Current);Current := Current^.Lsohn;

Wenn es links nicht mehr weitergeht, wird der obersteKnoten des Stapels ausgegeben und vom Stapel entfernt.Der Durchlauf wird mit dem rechten Unterbaum desentfernten Knotens fortgesetzt.

Aktion 2: WriteString (TOP(S)^.Info);(*Verarbeite Info *)Current := TOP(S)^.Rsohn;POP(S);

Page 17: Bäume

R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister). Kapitel 8: Bäume. 17

+

b c

a -

*

d e

/

Iterative Version: Durchlaufbeispiel

Stapel S Current^ Aktion Ausgabe