Vorlesungsgrobstruktur: wo stehen wir, wie geht s weiter
Kapitel 7 Fortgeschrittene Datenstrukturen Motivation: Lineare Liste: Suchen eines Elements ist schnell O(log n) Einfügen eines Elements ist langsam O(n) Technische Universität München Verkettete Liste (nicht sortiert): Suchen eines Elements ist langsam O(n) Einfügen eines Elements ist schnell O(1) Ziel: Effiziente Datenstrukturen zur Speichern von Elementen Schnelles Suchen von Elementen: O(log n) Schnelles Einfügen von Elementen: O(log n) AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 2
7.1 Baumstrukturen Bäume sind eine zentrale Datenstruktur: Codebäume, Suchbäume, Syntaxbäume, Entscheidungsbäume, Dateibäume... Ein Baum ist eine verallgemeinerte Listenstruktur. Bäume bestehen aus Knoten unterschiedlichen Typs; die Verbindung zwischen zwei Knoten wird als Kante bezeichnet. Ein Element (Knoten) hat nicht nur einen Nachfolger (wie im Fall der Liste), sondern eine begrenzte Anzahl von Nachfolgern (Söhne). In der Informatik: idr Bäume mit oben liegender Wurzel AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 3
Beispiel: Bäume zur Speicherung von Datenbank-Einträgen AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 4
Oberster Knoten ist die Wurzel des Baums (kein Vorgänger oder Vater) Eine Folge p 0...p k von Knoten, für die gilt: p i+1 ist Sohn von p i, 0 i < k, heißt Pfad mit der Länge k Im Folgenden präzise Definitionen AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 5
Definition Ein Graph ist ein Tupel G = (E, V) mit V: Menge von Knoten (Vertices) E: Menge von Kanten (Edges) (v, w), mit v, w V Ein Graph G = (E, V) heißt gerichtet, wenn seine Kanten (v, w) gerichtete Kanten sind. Für (v, w) E heißt v Vorgänger von w, und w Nachfolger. Wenn (v, w) E eine gerichtete Kante ist, dann ist w adjazent zu v. Definition Ein Baum ist ein zusammenhängender, ungerichteter Graph, der keinen Kreis/Zyklus enthält. AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 6
Beispiel Graph-Datenstruktur Technische Universität München AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 7
Beispiel Graph und Baum-Strukturen Technische Universität München AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 8
Rekursive Definition eines Baumes Gegeben sei eine endliche Menge V von n 0 Knoten. Ein speziell ausgezeichneter Knoten ist die Wurzel. Die übrige Knoten werden in m 0 disjunkte Mengen V 1, V 2,..., V m aufgeteilt. Jedes V k definiert ein Menge von Knoten eines Baums T k = (E k, V k ) T 1, T 2,..., T m werden als die Unterbäume der Wurzel bezeichnet. AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 9
Wald Ein Wald ist eine Menge von n 0 disjunkten Bäumen. Entfernen der Wurzel eines Baums erzeugt einen Wald. Unterbaum A Wurzel T 1 T 2 T m AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 10
Definition Die Anzahl der Unterbäume eines Knoten v definiert den Grad deg(v) des Knoten v. Ein Endknoten oder ein Blatt v ist ein Knoten ohne Nachfahren. Ein Knoten, der kein Endknoten ist, hat den Grad deg(v) > 0. Die Tiefe d(v) des Knoten v ist die Länge des Pfades von der Wurzel zum Knoten v. Die Knoten gleicher Tiefen bilden ein Niveau. Die Höhe h(v) des Knoten v ist die Länge des längsten Pfades von v zu einem Blatt. Die Höhe des Baumes T ist die Höhe der Wurzel h(t) = h(root). AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 11
Beispiel 1 Baum mit 7 Knoten A A ist die Wurzel und hat Unterbäume { B } und { C,D,E,F,G } B C Der Baum { C,D,E,F,G } hat den Knoten C als seine Wurzel. D E F C hat die Unterbäume { D },{ E },{ F,G } C hat den Grad 3, deg(c) = 3 G Die Höhe von C, h(c) = 2 AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 12
AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 13 Beispiel 2 { B }, { D }, { E } und { G } sind Blätter F ist der einzige Knoten mit Grad 1 Der Baum hat die Höhe 3 Knoten D hat Tiefe 2 A B C D F G E A B C D F G E A B C D F G E A B C D F G E A B C D F G E A B C D F G E
Definition Gegeben sei ein Baum (E, V). Für jeden Knoten v V sei eine Ordnung auf den Nachfolgerknoten von v definiert. Dann heißt der Baum geordneter Baum. Definition Ein Binärbaum ist ein geordneter Baum und für alle v V gilt, deg(v) 2. D.h. kein Knoten hat mehr als 2 Nachfolgerknoten. Beim Binärbaum spricht man vom linken Sohn oder rechten Sohn. AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 14
Beispiele für Binärbäume 1 2 6 3 4 7 8 5 9 10 AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 15
Definition Gegeben sei ein Binärbaum (E, V). Der Baum heißt vollständig wenn jedes Niveau die maximale Anzahl an Knoten enthält. D.h. Jeder Knoten hat einen linken und einen rechten Sohn, oder er ist ein Endknoten Gegeben sei ein vollständiger, binärer Baum der Höhe k. Ein solcher Baum hat: 2 k+1 1 Knoten 2 k Blätter AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 16
Sei T = (E, V) ein vollständiger Binärbaum der Höhe k. Satz: T besitzt 2 k+1 1 Knoten und 2 k Blätter. Beweis Technische Universität München AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 17
Beispiel: Vollständiger Binärbaum Gegeben sei der unten abgebildete vollständige Baum mit der Höhe k = 3. Der Baum besitzt: 15 Knoten 8 Blätter 15 13 14 9 10 11 12 1 2 3 4 5 6 7 8 AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 18
7.2 Repräsentation von Bäumen: Darstellung eines Binärbaums mit einfach verketteten Listen: Attribut Schlüssel : bezeichnet den Wert des Elements Pro Knoten: Verweise auf linkes u. rechtes Kind Links Rechts 1 2 6 1 2 3 4 5 6 2 6 3 4 0 0 0 5 0 0 7 8 3 4 7 8 7 8 0 0 9 10 5 9 10 9 10 0 0 0 0 AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 19
Graphische Repräsentation wurzel Zeiger auf die Wurzel des Baums 1 Links Schlüssel Rechts 2 6 3 4 7 8 5 9 10 AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 20
Darstellung eines Baums mit doppelt verketteten Listen: Ein Knoten wird als Element einer Liste dargestellt Jedes Element wird durch Attribute beschrieben: Das Attribut Schlüssel beschreibt den Wert des Knoten x, schlüssel[x], (z.b., Zahl, Name, Adresse,...) Das Attribut wurzel[t] zeigt auf die Wurzel des Baumes Darstellung eines Binärbaums Technische Universität München Das Attribut p ist ein Verweis auf den Vaterknoten (Parent) im Baum, falls gilt: p[x] = NULL, dann ist x die Wurzel des Baumes Das Attribut links verweist auf das linke Kind des Knoten x, links[x] Das Attribut rechts verweist auf das rechte Kind, rechts[x] AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 21
Beispiel: Technische Universität München Vielfältige Varianten sind möglich: Beispielsweise die Verwendung zusätzlicher Zeiger, um auf den Bruder-Knoten (rechts oder links) zu verweisen. AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 22
Repräsentation in C typedef struct bnode { int key; struct bnode* left; struct bnode* right; } bin_node; void insert(bin_node **root, int val){ bin_node *newnode; newnode=(bin_node*)malloc(sizeof(bin_node)); newnode->right=null; newnode->left=null; if ((*root)==null) { *root=newnode; (*root)->key=val; return; } if (val<(*root)->key) insert((&root)->left,val); else insert((&root)->right,val); }//end Technische Universität München void inorder(bin_node *root) { if (root==null) return ; inorder(root->left); printf("%d ",root->key); inorder(root->right); }//end inorder AuD, Kapitel 7 Fortgeschrittene Datenstrukturen, WS10/11, C. Eckert 23