Algorithmen und Datenstrukturen

Werbung
SS12
Algorithmen und Datenstrukturen
3. Kapitel
Binäre Bäume
Christopher Mattern
Mai 2012
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3.1 Mathematische Struktur Binärbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
3.1 Mathematische Struktur Binärbaum
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
3.1 Mathematische Struktur Binärbaum
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
3.1 Mathematische Struktur Binärbaum
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
3.1 Mathematische Struktur Binärbaum
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
• als Codierungs-/Decodierungsbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
3.1 Mathematische Struktur Binärbaum
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
• als Codierungs-/Decodierungsbaum
• als binärer Heap (später)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
3.1 Mathematische Struktur Binärbaum
Der Datentyp (und die Datenstruktur) Binärbaum tritt überall
in der Informatik auf:
• als binärer Suchbaum
• als Repräsentation von binären Ausdrücken
(logisch, arithmetisch)
• als Entscheidungsbaum
• als Codierungs-/Decodierungsbaum
• als binärer Heap (später)
• ...
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
Beispiel 1:
Arithmetischer Ausdruck mit zweistelligen Operatoren:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
2
Beispiel 1:
Arithmetischer Ausdruck mit zweistelligen Operatoren:
((((x2 · x4) + ((x3 − x7) − (x6/x1))) + (x5 · (x9 · x3)))
/ ((x5 − x6) − x1))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
2
Beispiel 1:
Arithmetischer Ausdruck mit zweistelligen Operatoren:
((((x2 · x4) + ((x3 − x7) − (x6/x1))) + (x5 · (x9 · x3)))
/ ((x5 − x6) − x1))
/
+
−
+
−
x2
x4
FG KTuEA, TU Ilmenau
x9
/
x7
x5
x5
−
x3
x1
−
x6
x6
x3
x1
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
2
Auswertung:
1) Ordne den Blättern konkrete Werte zu,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
2) Werte aus, von den Blättern startend ( bottom-up“).
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Auswertung:
1) Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
2) Werte aus, von den Blättern startend ( bottom-up“).
”
/ −5
40
+
−
−30
+
3
−9
−7 −
−7
FG KTuEA, TU Ilmenau
7
2
5
−
10
−
−2
−3
70
−21
10
/
−5
−8
7
5
10
−2
5
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
3
Beispiel 2: Codierungs-/Decodierungsbaum
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
4
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes (auch verschiedener Länge).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
4
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes (auch verschiedener Länge).
(Wenige Bits für häufige Buchstaben, lange für seltene.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
4
Beispiel 2: Codierungs-/Decodierungsbaum
Zeichen aus Alphabet Σ erhalten binäre Codes (auch verschiedener Länge).
(Wenige Bits für häufige Buchstaben, lange für seltene.)
Mini-Beispiel:
A
1100
B
0110
C
000
D
111
E
10
F
0011
G
010
H
0010
I
0111
K
1101
Zur Codierung von Zeichenreihen benutzt man direkt die
Tabelle.
Beispiel:
F E I G E hat Codierung 0011 10 0111 010 10.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
4
Präfixfreier“ Code: Kein Codewort ist Anfangsstück eines
”
anderen. Damit: eindeutig decodierbar“;
”
Fuge zwischen Codes für Buchstaben muss nicht markiert
werden: 001110011101010 statt 0011 10 0111 010 10.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
5
Präfixfreier“ Code: Kein Codewort ist Anfangsstück eines
”
anderen. Damit: eindeutig decodierbar“;
”
Fuge zwischen Codes für Buchstaben muss nicht markiert
werden: 001110011101010 statt 0011 10 0111 010 10.
Kompakte Repräsentation des Codes als Binärbaum:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
5
Präfixfreier“ Code: Kein Codewort ist Anfangsstück eines
”
anderen. Damit: eindeutig decodierbar“;
”
Fuge zwischen Codes für Buchstaben muss nicht markiert
werden: 001110011101010 statt 0011 10 0111 010 10.
Kompakte Repräsentation des Codes als Binärbaum:
0
0
0
C
FG KTuEA, TU Ilmenau
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
D
1
K
5
0
0
0
C
FG KTuEA, TU Ilmenau
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
D
1
K
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert C
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert CH
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert CHE
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Blätter sind mit Buchstaben markiert; Weg von der Wurzel
zum Blatt gibt das Codewort wieder (links: 0, rechts: 1).
Decodierung: Laufe Weg im Baum, vom Codewort gesteuert,
bis zum Blatt.
Wegen Präfixeigenschaft: im Code keine Zwischenräume nötig.
Beispiel: 0000010100011 liefert CHEF“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
6
Binärbaum-Terminologie: Überblick
Wurzel
linkes Kind
von v2
v1
Kante/Zeiger
v2
Vater von
v5
v6
v3
v4
v7
v10
l8
l4 v
8
l0
l1
l7
l2
l5
FG KTuEA, TU Ilmenau
rechtes Kind
von v5
v9
l3
v9
l9
l10
Blatt,
externer/äußerer Knoten
l6
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
7
Mathematische Struktur: flach“
”
Definition 3.1.1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
8
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
8
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten,
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
8
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
8
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten sowie zwei Funktionen
”
leftchild : V → V ∪ L und rightchild : V → V ∪ L,
wobei folgendes gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
8
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten sowie zwei Funktionen
”
leftchild : V → V ∪ L und rightchild : V → V ∪ L,
wobei folgendes gilt:
(i) In V ∪ L gibt es genau einen Knoten r, der nicht als Wert
leftchild(v) oder rightchild(v) vorkommt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
8
Mathematische Struktur: flach“
”
Definition 3.1.1
Ein Binärbaum T besteht aus einer endlichen Menge V von
inneren“ Knoten, einer dazu disjunkten endlichen Menge L
”
von äußeren“ Knoten sowie zwei Funktionen
”
leftchild : V → V ∪ L und rightchild : V → V ∪ L,
wobei folgendes gilt:
(i) In V ∪ L gibt es genau einen Knoten r, der nicht als Wert
leftchild(v) oder rightchild(v) vorkommt.
Dieser Knoten r heißt die Wurzel.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
8
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
(iii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
(iii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
(iii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w),
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
(iii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1),
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
(iii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1), v3 = p(v2),
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
(iii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1), v3 = p(v2), . . .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
(ii) Die Wertebereiche von leftchild und rightchild bilden
eine Partition von (V ∪ L) − {r}, d. h.: für jeden Knoten
w ∈ (V ∪ L) − {r} gibt es genau einen Knoten u ∈ V mit
w = leftchild (u) oder w = rightchild (u).
(Es gilt dabei aber nicht (w = leftchild (u) und w = rightchild (u)).)
Dieser Knoten wird mit p(w) bezeichnet und heißt der
Vorgängerknoten oder Vaterknoten von w.
(iii) Kreisfreiheit“: Für jeden Knoten w ∈ V ∪ L gilt:
”
Die Folge v0 = w, v1 = p(w), v2 = p(v1), v3 = p(v2), . . .
bricht nach endlich vielen Schritten mit einem vd = r ab.
(Dadurch ist ein eindeutiger Weg von w zur Wurzel festgelegt.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
9
Mathematische Struktur: flach“ (Forts.)
”
An Knoten und Kanten lassen
gen/Beschriftungen anbringen.
sich
Markierun-
Diese werden ebenfalls als Funktionen dargestellt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
10
Mathematische Struktur: flach“ (Forts.)
”
An Knoten und Kanten lassen
gen/Beschriftungen anbringen.
sich
Markierun-
Diese werden ebenfalls als Funktionen dargestellt.
Knotenmarkierungen:
Funktionen mV : V → D und mL : L → Z.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
10
Mathematische Struktur: flach“ (Forts.)
”
An Knoten und Kanten lassen
gen/Beschriftungen anbringen.
sich
Markierun-
Diese werden ebenfalls als Funktionen dargestellt.
Knotenmarkierungen:
Funktionen mV : V → D und mL : L → Z.
Kantenmarkierungen:
Funktionen ml : V → X (für die leftchild-Kanten)
und mr : V → X (für die rightchild-Kanten).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
10
Mathematische Struktur: rekursiv
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
11
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
11
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
11
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
Induktive Definition:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
11
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
Induktive Definition:
(i) Wenn z ∈ Z, so ist (z) ein (D, Z)-Binärbaum.
[Blatt mit Markierung z.]
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
11
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
Induktive Definition:
(i) Wenn z ∈ Z, so ist (z) ein (D, Z)-Binärbaum.
[Blatt mit Markierung z.]
(ii) Wenn T1, T2 (D, Z)-Binärbäume sind und x ∈ D ist
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
11
Mathematische Struktur: rekursiv
D: Menge von Knotenmarkierungen
Z: Menge von Blattmarkierungen
Induktive Definition:
(i) Wenn z ∈ Z, so ist (z) ein (D, Z)-Binärbaum.
[Blatt mit Markierung z.]
(ii) Wenn T1, T2 (D, Z)-Binärbäume sind und x ∈ D ist,
dann ist auch (T1, x, T2) ein (D, Z)-Binärbaum.
[Wurzel mit Markierung x, linker Unterbaum T1, rechter Unterbaum T2.]
(iii) Nichts sonst ist (D, Z)-Binärbaum.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
11
Beispiel: Tupeldarstellung
(((37, b, (17, a, 31)), c, 7), b, ((29, d, (1, r, 23)), z, (13, u, 3)))
und graphische Darstellung:
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
12
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
13
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−
x2
x4
x9
/
x7
x5
x5
−
x3
x1
−
x6
x6
x3
x1
((((x2 · x4) + ((x3 − x7) − (x6/x1))) +
(x5 · (x9 · x3)))/((x5 − x6) − x1))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
13
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−
x2
x4
x9
/
x7
x5
x5
−
x3
x1
−
x6
x6
x3
x1
((((x2 · x4) + ((x3 − x7) − (x6/x1))) +
(x5 · (x9 · x3)))/((x5 − x6) − x1))
Ausdruck: Tupeldarstellung ohne Kommas.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
13
Mathematische Struktur: rekursiv
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
FG KTuEA, TU Ilmenau
oder
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,00 }.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,00 }.
Auffassung (a) ist mathematisch etwas klarer, da zu gegebenem T =
(T1, x, T2) die Komponenten T1, x und T2 unmittelbar gegeben sind (ohne
Syntaxanalyse o.ä.).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,00 }.
Auffassung (a) ist mathematisch etwas klarer, da zu gegebenem T =
(T1, x, T2) die Komponenten T1, x und T2 unmittelbar gegeben sind (ohne
Syntaxanalyse o.ä.).
Vorteil der rekursiven Auffassung:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,00 }.
Auffassung (a) ist mathematisch etwas klarer, da zu gegebenem T =
(T1, x, T2) die Komponenten T1, x und T2 unmittelbar gegeben sind (ohne
Syntaxanalyse o.ä.).
Vorteil der rekursiven Auffassung:
Übersichtlichere (rekursive) Programme und Korrektheitsüberlegungen.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,00 }.
Auffassung (a) ist mathematisch etwas klarer, da zu gegebenem T =
(T1, x, T2) die Komponenten T1, x und T2 unmittelbar gegeben sind (ohne
Syntaxanalyse o.ä.).
Vorteil der rekursiven Auffassung:
Übersichtlichere (rekursive) Programme und Korrektheitsüberlegungen.
Vorteil der flachen Auffassung:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
Mathematische Struktur: rekursiv
Beachte: Man kann die rekursiv definierten Binärbäume auf
zwei letztendlich äquivalente Arten auffassen:
(a) als geschachtelte Tripel
oder
(b) als Zeichenreihen mit Symbolen aus D ∪ Z ∪ {(, ), “,00 }.
Auffassung (a) ist mathematisch etwas klarer, da zu gegebenem T =
(T1, x, T2) die Komponenten T1, x und T2 unmittelbar gegeben sind (ohne
Syntaxanalyse o.ä.).
Vorteil der rekursiven Auffassung:
Übersichtlichere (rekursive) Programme und Korrektheitsüberlegungen.
Vorteil der flachen Auffassung:
Eventuell effizientere Ausführung (Schleifen statt Prozeduraufrufe).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
14
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
15
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Wenn T = (z), dann ist die flache“ Version von T ein äußerer
”
Knoten mit Inschrift z.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
15
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Wenn T = (z), dann ist die flache“ Version von T ein äußerer
”
Knoten mit Inschrift z. Dieser ist auch die Wurzel.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
15
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Wenn T = (z), dann ist die flache“ Version von T ein äußerer
”
Knoten mit Inschrift z. Dieser ist auch die Wurzel.
Gegeben T = (T1, x, T2), stelle rekursiv (disjunkte) flache“
”
Versionen der beiden Unterbäume T1 und T2 her,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
15
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Wenn T = (z), dann ist die flache“ Version von T ein äußerer
”
Knoten mit Inschrift z. Dieser ist auch die Wurzel.
Gegeben T = (T1, x, T2), stelle rekursiv (disjunkte) flache“
”
Versionen der beiden Unterbäume T1 und T2 her, mit Wurzeln
r1 und r2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
15
(Rekursiver) Umbau von rekursiver zu flacher“ Struktur:
”
Wenn T = (z), dann ist die flache“ Version von T ein äußerer
”
Knoten mit Inschrift z. Dieser ist auch die Wurzel.
Gegeben T = (T1, x, T2), stelle rekursiv (disjunkte) flache“
”
Versionen der beiden Unterbäume T1 und T2 her, mit Wurzeln
r1 und r2.
Die Knotenmengen Vi und Li sowie die Funktionen leftchild i
und rightchild i werden jeweils vereinigt, für i = 1, 2.
Schließlich wird ein neuer innerer Knoten r mit Inschrift x
erzeugt
und leftchild (r) = r1 und rightchild (r) = r2 gesetzt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
15
Umbau von flacher“ zu rekursiver Struktur:
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum mit Knotenbeschriftungen als V , L, leftchild,
rightchild, mV : V → D und mL : L → Z.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum mit Knotenbeschriftungen als V , L, leftchild,
rightchild, mV : V → D und mL : L → Z.
Falls die Wurzel r ein Blatt mit mL(r) = z ist: T = (z).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum mit Knotenbeschriftungen als V , L, leftchild,
rightchild, mV : V → D und mL : L → Z.
Falls die Wurzel r ein Blatt mit mL(r) = z ist: T = (z).
Falls die Wurzel r ein innerer Knoten mit mV (r) = x ist:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum mit Knotenbeschriftungen als V , L, leftchild,
rightchild, mV : V → D und mL : L → Z.
Falls die Wurzel r ein Blatt mit mL(r) = z ist: T = (z).
Falls die Wurzel r ein innerer Knoten mit mV (r) = x ist:
Definiere V1 als die Menge der v ∈ V , deren Weg zur Wurzel
durch leftchild(r) führt, analog L1 bei den Blättern.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum mit Knotenbeschriftungen als V , L, leftchild,
rightchild, mV : V → D und mL : L → Z.
Falls die Wurzel r ein Blatt mit mL(r) = z ist: T = (z).
Falls die Wurzel r ein innerer Knoten mit mV (r) = x ist:
Definiere V1 als die Menge der v ∈ V , deren Weg zur Wurzel
durch leftchild(r) führt, analog L1 bei den Blättern.
Analog V2 und L2 für Knoten, deren Weg zur Wurzel durch
rightchild(r) führt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum mit Knotenbeschriftungen als V , L, leftchild,
rightchild, mV : V → D und mL : L → Z.
Falls die Wurzel r ein Blatt mit mL(r) = z ist: T = (z).
Falls die Wurzel r ein innerer Knoten mit mV (r) = x ist:
Definiere V1 als die Menge der v ∈ V , deren Weg zur Wurzel
durch leftchild(r) führt, analog L1 bei den Blättern.
Analog V2 und L2 für Knoten, deren Weg zur Wurzel durch
rightchild(r) führt.
V1, L1 mit den eingeschränkten Funktionen leftchild, rightchild, mV und mL bildet flachen“ Baum, ebenso V2, L2.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Umbau von flacher“ zu rekursiver Struktur:
”
Gegeben: Baum mit Knotenbeschriftungen als V , L, leftchild,
rightchild, mV : V → D und mL : L → Z.
Falls die Wurzel r ein Blatt mit mL(r) = z ist: T = (z).
Falls die Wurzel r ein innerer Knoten mit mV (r) = x ist:
Definiere V1 als die Menge der v ∈ V , deren Weg zur Wurzel
durch leftchild(r) führt, analog L1 bei den Blättern.
Analog V2 und L2 für Knoten, deren Weg zur Wurzel durch
rightchild(r) führt.
V1, L1 mit den eingeschränkten Funktionen leftchild, rightchild, mV und mL bildet flachen“ Baum, ebenso V2, L2.
”
Transformiere diese beiden Bäume rekursiv in Bäume T1, T2
und setze T = (T1, x, T2).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
16
Implementierung I: (vgl. AuP-Vorlesung)
Mit markierten externen Knoten.
T:
b
z
c
b
a
37
17
FG KTuEA, TU Ilmenau
d
7
u
r
29
31
1
13
3
23
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
17
Implementierung II:
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert (NULL-Zeiger).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
18
Implementierung II:
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert (NULL-Zeiger).
Oder: 1 externer Knoten `, Zeiger auf ` statt NULL-Zeiger.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
18
Implementierung II:
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert (NULL-Zeiger).
Oder: 1 externer Knoten `, Zeiger auf ` statt NULL-Zeiger.
Speicherplatzbedarf für n Knoten:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
18
Implementierung II:
T:
b
z
c
d
b
a
u
r
Externe Knoten werden nicht repräsentiert (NULL-Zeiger).
Oder: 1 externer Knoten `, Zeiger auf ` statt NULL-Zeiger.
Speicherplatzbedarf für n Knoten:
n Dateneinträge, 2n Zeiger, davon n + 1 NULL-Zeiger.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
18
Mögliche Erweiterung: Vaterzeiger.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
19
Mögliche Erweiterung: Vaterzeiger.
T:
Wurzel
b
z
c
d
b
a
FG KTuEA, TU Ilmenau
u
r
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
19
Mögliche Erweiterung: Vaterzeiger.
T:
Wurzel
b
z
c
d
b
a
u
r
Erleichtert Navigieren im Baum,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
19
Mögliche Erweiterung: Vaterzeiger.
T:
Wurzel
b
z
c
d
b
a
u
r
Erleichtert Navigieren im Baum, besonders bei Verwenden der
flachen“ Auffassung und von iterativen Verfahren.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
19
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Elements
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Elements
Bintrees
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
FG KTuEA, TU Ilmenau
Elements
Bintrees
Boolean
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
data: Bintrees → Elements
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
data: Bintrees → Elements
isempty : Bintrees → Boolean
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Spezifikation von Binärbäumen
Datentyp Binärbaum über D: (leere äußere Knoten)
1. Signatur:
Sorten:
Elements
Bintrees
Boolean
Operationen:
empty : → Bintrees
buildTree: Elements × Bintrees × Bintrees → Bintrees
leftSubtree: Bintrees → Bintrees
rightSubtree: Bintrees → Bintrees
data: Bintrees → Elements
isempty : Bintrees → Boolean
2. Mathematisches Modell:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
20
Sorten:
Elements:
FG KTuEA, TU Ilmenau
(nichtleere) Menge D
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
FG KTuEA, TU Ilmenau
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
FG KTuEA, TU Ilmenau
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
Op’en:
empty () = FG KTuEA, TU Ilmenau
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
(∗ leerer Baum ∗)
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty () = (∗ leerer Baum ∗)
buildTree(x, T1, T2) := (T1, x, T2)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty () = (∗ leerer Baum ∗)
buildTree(x, T1, T2) := (T1, x, T2)
leftSubtree(T ) :=
FG KTuEA, TU Ilmenau
T1,
falls T = (T1, x, T2)
undefiniert, falls T = Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty () = (∗ leerer Baum ∗)
buildTree(x, T1, T2) := (T1, x, T2)
T1,
leftSubtree(T ) :=
undefiniert,
T2,
rightSubtree(T ) :=
undefiniert,
FG KTuEA, TU Ilmenau
falls T = (T1, x, T2)
falls T = falls T = (T1, x, T2)
falls T = Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty () = (∗ leerer Baum ∗)
buildTree(x, T1, T2) := (T1, x, T2)
T1,
falls T = (T1, x, T2)
leftSubtree(T ) :=
undefiniert, falls T = T2,
falls T = (T1, x, T2)
rightSubtree(T ) :=
undefiniert, falls T = x,
falls T = (T1, x, T2)
data(T ) :=
undefiniert, falls T = FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Sorten:
Elements:
Bintrees:
Boolean:
(nichtleere) Menge D
{T | T ist (D, {−})-Binärbaum}
{true, false}
Op’en:
empty () = (∗ leerer Baum ∗)
buildTree(x, T1, T2) := (T1, x, T2)
T1,
falls T = (T1, x, T2)
leftSubtree(T ) :=
undefiniert, falls T = T2,
falls T = (T1, x, T2)
rightSubtree(T ) :=
undefiniert, falls T = x,
falls T = (T1, x, T2)
data(T ) :=
undefiniert, falls T = false, falls T = (T1, x, T2)
isempty (T ) :=
true, falls T = FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
21
Implementierung:
empty, isempty, data, leftSubtree, rightSubtree: klar.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
22
Implementierung:
empty, isempty, data, leftSubtree, rightSubtree: klar.
buildTree(x, T1, T2) erzeugt einen neuen Knoten (Wurzel) r
mit Eintrag x, die Wurzeln von T1 bzw. T2 werden linkes bzw.
rechtes Kind von r.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
22
Implementierung:
empty, isempty, data, leftSubtree, rightSubtree: klar.
buildTree(x, T1, T2) erzeugt einen neuen Knoten (Wurzel) r
mit Eintrag x, die Wurzeln von T1 bzw. T2 werden linkes bzw.
rechtes Kind von r.
Der Benutzer dieser Operation muss sicherstellen, dass die
Knotenmengen von T1 und T2 disjunkt sind.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
22
3.2 Terminologie
• Binärbaum, engl: binary tree“
”
• (innerer) Knoten v, engl: node“
”
• Knoteneintrag: x = data(v) = data(T 0) (v Wurzel von T 0)
x v
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
23
• Tv : Unterbaum mit Wurzel v
x v
Tv
Der Teil von T , der aus den Knoten besteht, deren Weg zur
Wurzel durch v verläuft. Die Wurzel ist v. Dabei kann v ein
beliebiger innerer oder äußerer Knoten sein.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
24
• (äußerer) Knoten ≡ Blatt l, engl: leaf “, Pl. leaves“
”
”
• Blatteintrag: z = data(l)
z l
• Wurzel, engl: root“
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
25
• Vater ≡ (unmittelbarer) Vorgänger,
engl: parent“, von v: p(v)
”
• linkes Kind ≡ (unmittelbarer) Nachfolger, Sohn,
engl: left child“, von v: leftchild(v)
”
• rechtes Kind ≡ (unmittelbarer) Nachfolger, Sohn,
engl: right child“, von v: rightchild(v)
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
26
• Vorfahr (Vater von Vater von Vater . . . von v),
engl: ancestor“ (Im Bild: v ist Vorfahr von u.)
”
• Nachfahr (Kind von Kind von . . . von v),
engl: descendant“ (Im Bild: u ist Nachfahr von v.)
”
v
u
Achtung: Oft gilt v als (uneigentlicher) Vorfahr/Nachfahr von v.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
27
• Weg in T : Knotenfolge oder Kantenfolge, die von v zu
einem Nachfahren u führt
• Länge eines Wegs (v0, v1, . . . , vs): Anzahl s der Kanten
auf dem Weg
v
Weg der Länge 3
von v nach u
u
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
28
Häufiger Spezialfall:
Die externen Knoten haben keinen Eintrag.
(Bzw. jeder hat denselben nichtssagenden Eintrag, z.B. −“ .)
”
Ein solcher externer Knoten wird auch als leerer Baum“
”
bezeichnet.
"Blätter"
Oft bezeichnet man dann die inneren Knoten, die keinen
inneren Knoten als Nachfolger haben, als Blätter“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
29
Tiefe/Level eines Knotens
Die Länge (das ist die Kantenzahl) des Wegs
(v0, v1, . . . , vd) von der Wurzel r = v0 zum Knoten v = vd
heißt die Tiefe oder das Level d(v) von Knoten v.
Auch externen Knoten wird so eine Tiefe zugeordnet.
0
1
2
d ( v )=3
v
3
4
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
30
Tiefe/Höhe eines Binärbaums
Definition
Die Tiefe oder Höhe d(T ) (auch: h(T )) eines Binärbaums T
ist definiert wie folgt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
31
Tiefe/Höhe eines Binärbaums
Definition
Die Tiefe oder Höhe d(T ) (auch: h(T )) eines Binärbaums T
ist definiert wie folgt:
1. Fall: Die externen Knoten sind leer ():
d(T ) = max({−1} ∪ {d(v) | v innerer Knoten in T }).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
31
Tiefe/Höhe eines Binärbaums
Definition
Die Tiefe oder Höhe d(T ) (auch: h(T )) eines Binärbaums T
ist definiert wie folgt:
1. Fall: Die externen Knoten sind leer ():
d(T ) = max({−1} ∪ {d(v) | v innerer Knoten in T }).
Beobachte induktive Formel:
d(T ) = −1 für T = und
d((T1, x, T2)) = 1 + max{d(T1), d(T2)}.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
31
Beispiele: Tiefen/Höhen von Binärbäumen mit leeren Blättern.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
32
Beispiele: Tiefen/Höhen von Binärbäumen mit leeren Blättern.
Höhe −1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
Höhe 0
32
Beispiele: Tiefen/Höhen von Binärbäumen mit leeren Blättern.
Höhe −1
Höhe 0
Höhe 3:
x5
x2
T1
x6
x1
x4
T2
x7
x3
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
32
Tiefe/Höhe eines Binärbaums
Definition der Tiefe/Höhe von T :
2. Fall: Die externen Knoten sind nicht leer ((z), z ∈ Z):
d(T ) := max{d(v) | v äußerer Knoten in T }.
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Tiefe 4, gleich der maximalen Länge eines Weges zu einem Blatt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
33
Definition der Höhe eines Knotens:
Die Höhe h(v) eines Knotens in T ist definiert als die Tiefe
d(Tv ) des Teilbaums mit Wurzel v. – Beispiel:
Höhe: 5
Höhe: 4
Höhe: 2
Höhe: 1
Höhe: 0
Hier angegeben: Fall Blätter nicht leer“.
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
34
3.3 Eigenschaften
Proposition 3.3.1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
35
3.3 Eigenschaften
Proposition 3.3.1
Es sei T ein Binärbaum mit n ≥ 0 inneren Knoten und leeren
äußeren Knoten. Dann gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
35
3.3 Eigenschaften
Proposition 3.3.1
Es sei T ein Binärbaum mit n ≥ 0 inneren Knoten und leeren
äußeren Knoten. Dann gilt:
(a)
T hat 2n Zeiger/Kanten. (Beispiel: n = 10, 2n = 20)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
35
3.3 Eigenschaften
Proposition 3.3.1
Es sei T ein Binärbaum mit n ≥ 0 inneren Knoten und leeren
äußeren Knoten. Dann gilt:
(a)
(b)
T hat 2n Zeiger/Kanten. (Beispiel: n = 10, 2n = 20)
T hat n + 1 äußere Knoten. (Beispiel: n + 1 = 11)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
35
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
36
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
36
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
36
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten. Daraus: log(n + 1) ≤ l + 1, für das Level l
mit dem tiefsten inneren Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
36
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten. Daraus: log(n + 1) ≤ l + 1, für das Level l
mit dem tiefsten inneren Knoten.
(e) n − 1 ≥ d(T ) ≥ dlog(n + 1)e − 1.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
36
(c) Auf Level l liegen höchstens 2l Knoten, l = 0, 1, 2, . . ..
(d) Auf Level 0, 1, . . . , l zusammen liegen höchstens
1 + 2 + 4 + · · · + 2l = 2l+1 − 1
innere Knoten. Daraus: log(n + 1) ≤ l + 1, für das Level l
mit dem tiefsten inneren Knoten.
(e) n − 1 ≥ d(T ) ≥ dlog(n + 1)e − 1.
Merke: Die Tiefe eines Binärbaums mit n inneren Knoten ist
mindestens log n − 1.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
36
Proposition 3.3.2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
37
Proposition 3.3.2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
37
Proposition 3.3.2
Es sei T ein Binärbaum mit N ≥ 1 nichtleeren äußeren
Knoten. Dann gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
37
Proposition 3.3.2
Es sei T ein Binärbaum mit N ≥ 1 nichtleeren äußeren
Knoten. Dann gilt:
(a) T hat n = N − 1 innere Knoten. (Bsp.: N = 11, n = 10)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
37
Proposition 3.3.2
Es sei T ein Binärbaum mit N ≥ 1 nichtleeren äußeren
Knoten. Dann gilt:
(a) T hat n = N − 1 innere Knoten. (Bsp.: N = 11, n = 10)
(b) T hat 2N − 2 Zeiger/Kanten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
37
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
38
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
38
(c) N ≤ 2d(T ).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
38
(c) N ≤ 2d(T ).
(Beweis: Induktion über Binärbaume, rekursive Struktur.)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
38
(c) N ≤ 2d(T ).
(Beweis: Induktion über Binärbaume, rekursive Struktur.)
(d) N − 1 ≥ d(T ) ≥ dlog N e.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
38
(c) N ≤ 2d(T ).
(Beweis: Induktion über Binärbaume, rekursive Struktur.)
(d) N − 1 ≥ d(T ) ≥ dlog N e.
Merke: Die Tiefe eines Binärbaums mit N nichtleeren äußeren Knoten ist mindestens log N .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
38
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0+2·1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0+2·1+3·2+
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0+2·1+3·2+3·3+
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v) (Im Beispiel: 21)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v) (Im Beispiel: 21)
Mittlere innere Weglänge:
FG KTuEA, TU Ilmenau
1
n ·TIPL(T ).
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale innere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
inneren Knoten einmal hinlaufe?
0 + 2 · 1 + 3 · 2 + 3 · 3 + 1 · 4 = 21
Totale innere Weglänge ( total internal path length“):
”
P
TIPL(T ) := v∈V d(v) (Im Beispiel: 21)
Mittlere innere Weglänge:
FG KTuEA, TU Ilmenau
1
n ·TIPL(T ).
21
(Im Beispiel 10
= 2,1.)
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
39
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2+3·3
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2+3·3+5·4
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“)
”
P
TEPL(T ) := l∈L d(l)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“)
”
P
TEPL(T ) := l∈L d(l) (Im Beispiel: 41)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“)
”
P
TEPL(T ) := l∈L d(l) (Im Beispiel: 41)
Mittlere äußere Weglänge: TEPL(T )/(n + 1).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
40
Totale äußere Weglänge
Wieviele Kanten durchlaufe ich insgesamt, wenn ich zu jedem
äußeren Knoten einmal hinlaufe?
2 + 3 · 3 + 5 · 4 + 2 · 5 = 41.
Totale äußere Weglänge ( total external path length“)
”
P
TEPL(T ) := l∈L d(l) (Im Beispiel: 41)
Mittlere äußere Weglänge: TEPL(T )/(n + 1). (Im Beispiel
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
41
11 .)
40
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
41
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
TEPL(T ) = TIPL(T ) + 2n.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
41
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
TEPL(T ) = TIPL(T ) + 2n.
FG KTuEA, TU Ilmenau
(Im Beispiel: 41 = 21 + 2 · 10)
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
41
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
TEPL(T ) = TIPL(T ) + 2n.
(Im Beispiel: 41 = 21 + 2 · 10)
Beweis: Induktion über die Knotenanzahl von Binärbäumen.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
41
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
TEPL(T ) = TIPL(T ) + 2n.
(Im Beispiel: 41 = 21 + 2 · 10)
Beweis: Induktion über die Knotenanzahl von Binärbäumen.
( z ):
z
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
41
Proposition 3.3.3
Für jeden Binärbaum mit n inneren Knoten gilt:
TEPL(T ) = TIPL(T ) + 2n.
(Im Beispiel: 41 = 21 + 2 · 10)
Beweis: Induktion über die Knotenanzahl von Binärbäumen.
( z ):
z
I.A.: n = 0: TEPL(T ) = 0 und TIPL(T ) = 0.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
41
I.V.: n > 0, Beh. richtig für alle T 0 mit n0 < n inneren
Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
42
I.V.: n > 0, Beh. richtig für alle T 0 mit n0 < n inneren
Knoten.
D. h.: TEPL(T 0) − TIPL(T 0) = 2n0.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
42
I.V.: n > 0, Beh. richtig für alle T 0 mit n0 < n inneren
Knoten.
D. h.: TEPL(T 0) − TIPL(T 0) = 2n0.
I.S.:
T = ( T ,x,T ):
1
2
x
T1
FG KTuEA, TU Ilmenau
T2
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
42
I.V.: n > 0, Beh. richtig für alle T 0 mit n0 < n inneren
Knoten.
D. h.: TEPL(T 0) − TIPL(T 0) = 2n0.
I.S.:
T = ( T ,x,T ):
1
2
x
T1
T2
n1 = Anzahl innerer Knoten in T1;
n2 = Anzahl innerer Knoten in T2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
42
I.V.: n > 0, Beh. richtig für alle T 0 mit n0 < n inneren
Knoten.
D. h.: TEPL(T 0) − TIPL(T 0) = 2n0.
I.S.:
T = ( T ,x,T ):
1
2
x
T1
T2
n1 = Anzahl innerer Knoten in T1;
n2 = Anzahl innerer Knoten in T2.
Klar: n = 1 + n1 + n2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
42
Die n1 + 1 bzw. n2 + 1 externen Knoten in den Teilbäumen
hängen in T ein Level tiefer:
TEPL(T ) = (TEPL(T1) + (n1 + 1)) + (TEPL(T2) + (n2 + 1)).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
43
Die n1 + 1 bzw. n2 + 1 externen Knoten in den Teilbäumen
hängen in T ein Level tiefer:
TEPL(T ) = (TEPL(T1) + (n1 + 1)) + (TEPL(T2) + (n2 + 1)).
Interne Knoten in den Teilbäumen hängen in T ein Level tiefer:
TIPL(T ) = 0 +(TIPL(T1) + n1) + (TIPL(T2) + n2).
|{z}
Wurzel
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
43
Die n1 + 1 bzw. n2 + 1 externen Knoten in den Teilbäumen
hängen in T ein Level tiefer:
TEPL(T ) = (TEPL(T1) + (n1 + 1)) + (TEPL(T2) + (n2 + 1)).
Interne Knoten in den Teilbäumen hängen in T ein Level tiefer:
TIPL(T ) = 0 +(TIPL(T1) + n1) + (TIPL(T2) + n2).
|{z}
Wurzel
Subtraktion liefert:
TEPL(T ) − TIPL(T )
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
43
Die n1 + 1 bzw. n2 + 1 externen Knoten in den Teilbäumen
hängen in T ein Level tiefer:
TEPL(T ) = (TEPL(T1) + (n1 + 1)) + (TEPL(T2) + (n2 + 1)).
Interne Knoten in den Teilbäumen hängen in T ein Level tiefer:
TIPL(T ) = 0 +(TIPL(T1) + n1) + (TIPL(T2) + n2).
|{z}
Wurzel
Subtraktion liefert:
TEPL(T ) − TIPL(T )
=
(TEPL(T1) − TIPL(T1)) + (TEPL(T2) − TIPL(T2)) + 2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
43
Die n1 + 1 bzw. n2 + 1 externen Knoten in den Teilbäumen
hängen in T ein Level tiefer:
TEPL(T ) = (TEPL(T1) + (n1 + 1)) + (TEPL(T2) + (n2 + 1)).
Interne Knoten in den Teilbäumen hängen in T ein Level tiefer:
TIPL(T ) = 0 +(TIPL(T1) + n1) + (TIPL(T2) + n2).
|{z}
Wurzel
Subtraktion liefert:
TEPL(T ) − TIPL(T )
=
I.V.
=
(TEPL(T1) − TIPL(T1)) + (TEPL(T2) − TIPL(T2)) + 2
2n1 + 2n2 + 2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
43
Die n1 + 1 bzw. n2 + 1 externen Knoten in den Teilbäumen
hängen in T ein Level tiefer:
TEPL(T ) = (TEPL(T1) + (n1 + 1)) + (TEPL(T2) + (n2 + 1)).
Interne Knoten in den Teilbäumen hängen in T ein Level tiefer:
TIPL(T ) = 0 +(TIPL(T1) + n1) + (TIPL(T2) + n2).
|{z}
Wurzel
Subtraktion liefert:
TEPL(T ) − TIPL(T )
=
I.V.
=
(TEPL(T1) − TIPL(T1)) + (TEPL(T2) − TIPL(T2)) + 2
2n1 + 2n2 + 2 = 2n.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
43
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
44
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
0
0
0
C
FG KTuEA, TU Ilmenau
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
1
D
1
K
44
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Lemma 3.3.4
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
44
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Lemma 3.3.4
Es sei L die Menge der äußeren Knoten in einem Binärbaum T .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
44
Nächstes Ziel: Auch die mittlere Weglänge in Binärbäumen
wächst mindestens logarithmisch mit der Knotenanzahl.
0
0
0
C
1
1
0
H
1
1
F
0
G
0
E
0
1
0
B
1
1
I
0
A
1
D
1
K
Lemma 3.3.4
Es sei L die Menge der äußeren Knoten in einem Binärbaum T .
X
Dann gilt:
2−d(l) = 1.
l∈L
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
44
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
45
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
Dem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
45
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
Dem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
Sei D = d(T ) die Tiefe des tiefsten Blatts.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
45
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
Dem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
Sei D = d(T ) die Tiefe des tiefsten Blatts.
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
45
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
Dem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
Sei D = d(T ) die Tiefe des tiefsten Blatts.
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
Alle so erzeugten Bitfolgen sind verschieden;
alle 2D Bitfolgen werden so erzeugt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
45
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
Dem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
Sei D = d(T ) die Tiefe des tiefsten Blatts.
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
Alle so erzeugten Bitfolgen sind verschieden;
alle 2D Bitfolgen werden so erzeugt.
X
⇒
2D−d(l) = 2D .
l∈L
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
45
Beweis: Wie in einem Kodierungsbaum markiere in jedem
inneren Knoten die Kante zum linken Kind mit 0, die zum
rechten Kind mit 1.
Dem Blatt l entspricht dann eine Bitfolge wl = b1 · · · bd(l).
Sei D = d(T ) die Tiefe des tiefsten Blatts.
Jedes wl kann man auf 2D−d(l) Arten zu einer Bitfolge der
Länge D verlängern.
Alle so erzeugten Bitfolgen sind verschieden;
alle 2D Bitfolgen werden so erzeugt.
X
⇒
2D−d(l) = 2D .
l∈L
⇒ Behauptung.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
45
Proposition 3.3.5
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
FG KTuEA, TU Ilmenau
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
log(ai).
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
1
log( N l∈L 2−d(l))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l))
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l))
D.h.:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l))
X
P
2−d(l)
D.h.: TEPL(T ) = l∈L d(l) ≥ −N log N1
|l∈L {z
=1
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
}
46
Proposition 3.3.5
T hat N = n + 1 äußere Knoten ⇒ TEPL(T ) ≥ N log N .
Beweis: Die Logarithmusfunktion ist konkav :
log((1 − λ)a + λb)) ≥ (1 − λ) log a + λ log b, für alle λ ∈ [0,1].
Daraus:
1
log( M
P
1≤i≤M
ai) ≥
1
M
P
1≤i≤M
log(ai).
Anwenden auf M = N = n + 1 und al = 2−d(l), l ∈ L:
P
P
1
1
−d(l)
log( N l∈L 2
) ≥ N l∈L(−d(l))
X
P
2−d(l)
D.h.: TEPL(T ) = l∈L d(l) ≥ −N log N1
|l∈L {z
=1
Der letzte Term ist = −N log( N1 ) = N log(N ).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
}
46
Ergebnis:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
47
Ergebnis:
Mittlere äußere Weglänge ist ≥ log(Blattanzahl).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
47
Ergebnis:
Mittlere äußere Weglänge ist ≥ log(Blattanzahl).
Nach Proposition 3.3.3: TEPL(T ) = TIPL(T ) + 2n
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
47
Ergebnis:
Mittlere äußere Weglänge ist ≥ log(Blattanzahl).
Nach Proposition 3.3.3: TEPL(T ) = TIPL(T ) + 2n
Also:
TIPL(T ) ≥ TEPL(T )−2n ≥ (n+1) log(n+1)−2n > n(log n−2).
Mittlere innere Weglänge ist ≥ log(Knotenanzahl) − 2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
47
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
– Zeiger auf v an Liste anhängen;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
– Zeiger auf v an Liste anhängen;
– zu v gehörende Aktion ausführen
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
3.4 Durchläufe durch Binärbäume
(D, Z)-Binärbäume kann man systematisch durchlaufen, die
Knoten nacheinander besuchen und (anwendungsabhängige)
Aktionen an den Knoten ausführen.
Abstrakt gefasst: visit-Operation:
organisiere data-Teil der Knoten als Objekte einer Klasse;
visit(T ) löst Abarbeitung einer Methode von data(T ) aus.
Möglichkeiten für visit bei Knoten v:
– Daten data(v) ausgeben;
– laufende Nummer für v vergeben;
– Zeiger auf v an Liste anhängen;
– zu v gehörende Aktion ausführen
(z. B. arithmetische Operation durchführen) usw.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
48
Inorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
FG KTuEA, TU Ilmenau
(∗ besuche äußeren Knoten ∗)
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
49
Inorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
(∗ besuche äußeren Knoten ∗)
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
49
Inorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
(∗ besuche äußeren Knoten ∗)
falls T = (T1, x, T2):
Inorder-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
49
Inorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
(∗ besuche äußeren Knoten ∗)
falls T = (T1, x, T2):
Inorder-Durchlauf durch T1;
i-visit(x) ;
(∗ besuche inneren Knoten ∗)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
49
Inorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
(∗ besuche äußeren Knoten ∗)
falls T = (T1, x, T2):
Inorder-Durchlauf durch T1;
i-visit(x) ;
(∗ besuche inneren Knoten ∗)
Inorder-Durchlauf durch T2.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
49
Inorder-Durchlauf durch T
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
50
Inorder-Durchlauf durch T
b
c
7
b
37
FG KTuEA, TU Ilmenau
d
u
29
a
17
Ausgabe:
z
31
13
r
1
3
23
37, b, 17, a, 31, c, 7, b, 29, d, 1, r, 23, z, 13, u, 3
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
50
Inorder-Durchlauf durch T
b
c
z
7
b
37
u
29
a
17
d
31
13
r
1
3
23
Ausgabe: 37, b, 17, a, 31, c, 7, b, 29, d, 1, r, 23, z, 13, u, 3
Beobachte: Abwechselnd externe und interne Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
50
Präorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
51
Präorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
51
Präorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
51
Präorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
i-visit(x) ;
Präorder-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
51
Präorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
i-visit(x) ;
Präorder-Durchlauf durch T1;
Präorder-Durchlauf durch T2;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
51
Präorder-Durchlauf durch T
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
52
Präorder-Durchlauf durch T
b
c
7
b
37
FG KTuEA, TU Ilmenau
d
u
29
a
17
Ausgabe:
z
31
13
r
1
3
23
b, c, b, 37, a, 17, 31, 7, z, d, 29, r, 1, 23, u, 13, 3
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
52
Postorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
53
Postorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
53
Postorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
Postorder-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
53
Postorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
Postorder-Durchlauf durch T1;
Postorder-Durchlauf durch T2;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
53
Postorder-Durchlauf durch T
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
Postorder-Durchlauf durch T1;
Postorder-Durchlauf durch T2;
i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
53
Postorder-Durchlauf durch T
b
c
7
b
37
d
u
29
a
17
FG KTuEA, TU Ilmenau
z
31
13
r
1
3
23
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
54
Postorder-Durchlauf durch T
b
c
7
b
37
FG KTuEA, TU Ilmenau
d
u
29
a
17
Ausgabe:
z
31
13
r
1
3
23
37, 17, 31, a, b, 7, c, 29, 1, 23, r, d, 13, 3, u, z, b
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
54
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/
+
−
+
−
x2
x4
FG KTuEA, TU Ilmenau
x9
/
x7
x5
x5
−
x3
x1
−
x6
x6
x3
x1
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
55
Beispiel: Arithmetischer Ausdruck als Baum
D = {+, −, ·, /} und Z = {x1, x2, x3, . . .}.
/ −5
40
+
−
−30
+
3
−9
−7 −
−2
7
2
5
−
10
−
−7
−3
70
−21
10
/
−5
−8
7
5
10
−2
5
Ordne den Blättern konkrete Werte zu, z.B. x1 = 5, x2 = 3,
x3 = −2, x4 = −7, x5 = 7, x6 = 10, x7 = 5, x9 = −5.
Auswertungsprozedur ordnet jedem Knoten einen Wert zu.
Geeignete Reihenfolge: Postorder-Durchlauf.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
56
Auch möglich: Kombi-Durchlauf:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
Kombi-Durchlauf durch T2;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
Kombi-Durchlauf durch T2;
postord-i-visit(x) ;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Auch möglich: Kombi-Durchlauf:
falls T = (z): e-visit(z) ;
falls T = (T1, x, T2):
preord-i-visit(x) ;
Kombi-Durchlauf durch T1;
inord-i-visit(x) ;
Kombi-Durchlauf durch T2;
postord-i-visit(x) ;
Ermöglicht Datentransport von der Wurzel nach unten in den
Baum hinein und wieder zurück.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
57
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen,
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
Kosten pro Aufruf:
O(1) plus Kosten für i-visit/e-visit-Operation.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
Kosten pro Aufruf:
O(1) plus Kosten für i-visit/e-visit-Operation.
Insgesamt: (2n + 1) · (O(1) + Cvisit), wo Cvisit eine Schranke für die
Kosten der visit-Operationen ist.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Zeitanalyse für Durchlauf
Die Baumdurchläufe können mittels rekursiver Prozeduren
implementiert werden.
Beispiel: Inorder-Durchlauf. Prozedur: inorder(T)
Angewendet auf einen Baum T mit n inneren Knoten.
Für jeden inneren und äußeren Knoten wird die Prozedur inorder(.)
einmal aufgerufen, insgesamt (2n + 1)-mal.
Kosten pro Aufruf:
O(1) plus Kosten für i-visit/e-visit-Operation.
Insgesamt: (2n + 1) · (O(1) + Cvisit), wo Cvisit eine Schranke für die
Kosten der visit-Operationen ist.
Baumdurchläufe haben lineare Laufzeit.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
58
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
FG KTuEA, TU Ilmenau
e
d
c
c
d
b
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
d
f
59
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
59
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe: acdaccedbdf
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
59
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe: acdaccedbdf
zeilenweise von links nach rechts“
”
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
59
Levelorder-Durchlauf
a
0:
c
1:
a
2:
3:
e
d
c
c
d
b
d
f
Wunschausgabe: acdaccedbdf
zeilenweise von links nach rechts“
”
Benutze Queue Q, die Zeiger/Referenzen auf Binärbaumknoten speichern kann.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
59
Prozedur Leveldurchlauf (leere äußere Knoten)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; (∗ entdecke p∗)
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; (∗ entdecke p∗)
(16)
p.level ← w.level + 1;
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Prozedur Leveldurchlauf (leere äußere Knoten)
Eingabe: v: node; (∗ Wurzel ∗)
(1)
Q: Queue für node;
(2)
count ← 0;
(3)
if v <> NIL then (∗ entdecke v∗)
(4)
count++; v.lnum ← count;
(5)
v.level ← 0; enqueue(v);
(6)
while not Q.isempty repeat
(7)
w ← Q.first; Q.dequeue;
(8)
visit(w); (∗ bearbeite w∗)
(9)
p ← w.leftchild;
(10)
if p <> NIL then
(11)
count++; p.lnum ← count; (∗ entdecke p∗)
(12)
p.level ← w.level + 1; enqueue(p);
(13)
p ← w.rightchild;
(14)
if p <> NIL then
(15)
count++; p.lnum ← count; (∗ entdecke p∗)
(16)
p.level ← w.level + 1; enqueue(p);
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
60
Behauptung 3.4.2
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Behauptung 3.4.2
FG KTuEA, TU Ilmenau
Lineare Zeit, Korrektheit“
”
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
Jeder innere Knoten v des Binärbaums wird genau einmal
in die Queue eingefügt, genau einmal entnommen und im
Schleifenrumpf (7)-(16) bearbeitet.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
Jeder innere Knoten v des Binärbaums wird genau einmal
in die Queue eingefügt, genau einmal entnommen und im
Schleifenrumpf (7)-(16) bearbeitet.
Dabei wird die korrekte Levelnummer vergeben.
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Behauptung 3.4.2
Lineare Zeit, Korrektheit“
”
(a) Levelorder-Durchlauf benötigt Zeit
n · tvisit + O(n), wobei tvisit die Zeit für visit angibt.
(b) Der Levelorder-Durchlauf ordnet jedem
Binärbaumknoten v (in v.level) korrekt seine Tiefe zu.
Beweis: Man zeigt durch Induktion über das Level von v:
Jeder innere Knoten v des Binärbaums wird genau einmal
in die Queue eingefügt, genau einmal entnommen und im
Schleifenrumpf (7)-(16) bearbeitet.
Dabei wird die korrekte Levelnummer vergeben.
Weil Queue-Operationen Zeit O(1) benötigen, ist der restliche
Zeitbedarf O(n).
FG KTuEA, TU Ilmenau
Algorithmen und Datenstrukturen – SS12 – Kapitel 3
61
Herunterladen