Kapitel 8 - Chair 11: ALGORITHM ENGINEERING

Werbung
Kapitel 8: Elementare Datenstrukturen
Inhalt
Wintersemester 2007/08
● Definition
Einführung in die Informatik für
● ADT Keller
Naturwissenschaftler und Ingenieure
● ADT Schlange
(alias Einführung in die Programmierung)
● ADT Liste
(Vorlesung)
● ADT Binärbaum
- Exkurs: Einfache Dateibehandlung
Prof. Dr. Günter Rudolph
… endlich! ☺
- Exkurs: Strings (C++)
Fakultät für Informatik
Lehrstuhl für Algorithm Engineering
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
Kapitel 8: Elementare Datenstrukturen
2
Kapitel 8: Elementare Datenstrukturen
ADT Binäre Bäume
ADT Binäre Bäume: Terminologie
Beispiel:
kleiner
: nach links
Zahlenfolge 17, 4, 36, 2, 8, 19, 40, 6, 7, 37
größer
: nach rechts
keine Wurzel und kein Blatt
⇒ innerer Knoten
Wurzel
17
4
36
2
8
19
6
40
L
R
linker
Unterbaum
rechter
Unterbaum
37
z.B. „Suche, ob 42 enthalten“
7
benötigt nur 3 Vergleiche bis
zur Entscheidung false
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
3
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
Blätter
4
1
Kapitel 8: Elementare Datenstrukturen
Kapitel 8: Elementare Datenstrukturen
ADT Binäre Bäume: Datenstruktur
struct BinTree {
T data;
BinTree *lTree, *rTree;
};
ADT Binäre Bäume: Einfügen
BinTree *Insert(int key, BinTree *tree) {
if (tree == 0) {
BinTree *b = new BinTree;
b->data = key;
b->lTree = b->rTree = 0;
return b;
}
else {
if (tree->data < key)
tree->rTree = Insert(key, tree->rTree);
else if (tree->data > key)
tree->lTree = Insert(key, tree->lTree);
return tree;
}
}
// Nutzdaten
// linker und rechter Unterbaum
Falls ein Unterbaum nicht existiert, dann zeigt der Zeiger auf 0.
bool IsElement(int key, BinTree *tree) {
if (tree == 0) return false;
if (tree->data == key) return true;
if (tree->data < key) return IsElement(key, tree->rTree);
return IsElement(key, tree->lTree);
}
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
5
Kapitel 8: Elementare Datenstrukturen
ADT Binäre Bäume
void Clear(BinTree *tree) {
if (tree == 0) return;
//
Clear(tree->lTree);
//
Clear(tree->rTree);
//
delete tree;
//
}
1
3
6
4
Rekursionsabbruch
linken Unterbaum löschen
rechten Unterbaum löschen
aktuellen Knoten löschen
20
u.s.w.
19
2
7
17
8
Höhe := Länge des längsten Pfades von der Wurzel zu einem Blatt.
16
9
Höhe(leerer Baum) = 0
10
5
15
12
11
6
Kapitel 8: Elementare Datenstrukturen
ADT Binäre Bäume: Aufräumen
18
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
Höhe(nicht leerer Baum) = 1 + max { Höhe(linker U-Baum), Höhe(rechter U-Baum) }
13
14
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
Anmerkung: rekursive Definition!
7
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
(U-Baum = Unterbaum)
8
2
Kapitel 8: Elementare Datenstrukturen
ADT Binäre Bäume
Kapitel 8: Elementare Datenstrukturen
ADT Binäre Bäume
1
1
2
2
3
3
4
4
● Ein vollständiger Baum der Höhe h besitzt 2h – 1 Knoten.
Auf Ebene k können jeweils zwischen 1 und 2k-1 Elemente gespeichert werden.
Man braucht maximal h Vergleiche, um Element (ggf. nicht) zu finden.
Bei n = 2h – 1 Elementen braucht man log2(n) < h Vergleiche!
⇒ In einem Baum der Höhe h können also zwischen h und
● Ein degenerierter Baum der Höhe h besitzt h Knoten (= lineare Liste).
Elemente gespeichert werden!
Man braucht maximal h Vergleiche, um Element (ggf. nicht) zu finden.
Bei n = h braucht man also n Vergleiche!
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
9
Rudolph: EINI (WS 2007/08) ● Kap. 8: Elementare Datenstrukturen
10
3
Herunterladen