Übersicht Datenstrukturen und Algorithmen. Übersicht. Datentypen. Vorlesungen 4-5: Datenstrukturen (K10) Prof. Dr. Erika Ábrahám

Ähnliche Dokumente
Informatik II, SS 2014

Informatik II, SS 2016

12. Dynamische Datenstrukturen

Datenstrukturen. einfach verkettete Liste

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

11. Elementare Datenstrukturen

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Vorlesung Datenstrukturen

Informatik II Prüfungsvorbereitungskurs

1 Abstrakte Datentypen

Datenstrukturen & Algorithmen

Übung Algorithmen und Datenstrukturen

Kapitel 12: Induktive

Übung Algorithmen und Datenstrukturen

Einführung in die Informatik 2

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Einführung in die Informatik 2

Algorithmen und Datenstrukturen (für ET/IT)

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

Algorithmen und Datenstrukturen

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Übung Algorithmen und Datenstrukturen

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Graphdurchmusterung, Breiten- und Tiefensuche

Bäume. Listen und Bäume, Graphen und Bäume, elementare Eigenschaften von Binärbäumen, Implementierung, Generische Baumdurchläufe

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

8 Elementare Datenstrukturen

Motivation Binäre Suchbäume

Informatik II Übung 2

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Logische Datenstrukturen

Algorithmen und Datenstrukturen (für ET/IT)

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Motivation. Vorlesung 10: Binäre Suchbäume

ContainerDatenstrukturen. Große Übung 4

Algorithmen und Datenstrukturen Kapitel 4 Neue Datenstrukturen, besseres (?) Sortieren

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen 1

Datenstrukturen. Mariano Zelke. Sommersemester 2012

13. Bäume: effektives Suchen und Sortieren

13. Binäre Suchbäume

Tutoraufgabe 1 (2 3 4 Bäume):

Wintersemester 2004/ Dezember 2004

Informatik II Vorlesung am D-BAUG der ETH Zürich

Minimale Spannbäume. Übersicht. 1 Spannbäume. 2 Minimale Spannbäume. 3 Greedy Algorithmen. 4 Die Algorithmen von Kruskal und Prim

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Datenstrukturen. Mariano Zelke. Sommersemester 2012

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Technische Universität München. Vorlesungsgrobstruktur: wo stehen wir, wie geht s weiter

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

3 Dynamische Datenstrukturen

public interface Stack<E> { public void push(e e); public E pop();

Keller, Schlangen und Listen. Elementare Datenstrukturen Keller, Schlangen und Listen 1 / 14

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Feld. Feld als sequentielle Liste

Implementierung eines Baumes (in Python)

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 10, Donnerstag 8.

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Abstrakte Datentypen und Datenstrukturen

Informatik I 2. Kapitel. Elementare Datenstrukturen. Datenstrukturen. Datenstrukturen. Rainer Schrader. 28. Mai 2008

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele.

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Bäume, Suchbäume und Hash-Tabellen

Stand der Vorlesung. Vergleich verkettete Liste und sequentielle Liste

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Technische Universität München

Informatik II, SS 2014

Wiederholung. Datenstrukturen und. Bäume. Wiederholung. Suchen in linearen Feldern VO

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

6. Verkettete Strukturen: Listen

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Verkettete Datenstrukturen: Bäume

Algorithmen und Datenstrukturen

C- Kurs 09 Dynamische Datenstrukturen

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Schnittstellen, Stack und Queue

Informatik II, SS 2014

Kapitel 9 Suchalgorithmen

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Inhaltsverzeichnis. Teil 1 Grundlagen 23

Advanced Programming in C

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

Bäume. Listen und Bäume, Graphen und Bäume, elementare Eigenschaften von Binärbäumen, Implementierung, Generische Baumdurchläufe

ALP II Dynamische Datenmengen Datenabstraktion

13 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

NAME, VORNAME: Studiennummer: Matrikel:

Übung Algorithmen I

Kapitel 5: Graphen und Graphalgorithmen

Transkript:

Übersicht und Algorithmen Vorlesungen 4-5: (K10) 1 Theorie Hybrider Systeme nformatik 2 http://ths.rwth-aachen.de/teaching/ss-14/ datenstrukturen-und-algorithmen/ Diese Präsentation verwendet in Teilen Folien von Joost-Pieter Katoen. 25. April 2014 und 02. Mai 2014 2 3 Der abstrakte Datentyp Liste Einfach verkettete Doppelt verkettete 4 Traversierungen und Algorithmen 1/54 und Algorithmen 2/54 Übersicht Datentypen 1 2 3 Der abstrakte Datentyp Liste Einfach verkettete Doppelt verkettete 4 Traversierungen Definition (Abstrakte und konkrete Datentypen) Ein Datentyp definiert Wertebereiche und Operationen darauf (Signatur). Ein abstrakter Datentyp (ADT) formalisiert eine Spezifikation der Eigenschaften, die die Wertebereiche und die Operationen aufweisen. Ein konkreter Datentyp implementiert einen abstrakten Datentyp in einer Programmiersprache. und Algorithmen 3/54 und Algorithmen 4/54

Datentypen Bemerkungen Ein abstrakter Datentyp kann mehrere konkrete Datentypen als mplementierung haben. Die Operationen sind Algorithmen. Datenkapselung (data encapsulation) Kein direkter Datenzugriff auf die Daten, nur über die Operationen. Die Menge der Operationen bezeichnet man als Schnittstelle. Beispiel Abstrakter Datentyp Person: Wertebereich: [A Z][a z] N (Paare Name und Alter) Operation aging: Eingabevariablen: Person p = (name, age), natürliche Zahl n Vorbedingung: keine Ausgabevariable: Person p = (name, age ) Nachbedingung: name = name age = age + n Konkreter Datentyp der Person implementiert: class Person{ string name; unsigned int age; } void aging(unsigned int n){ age = age + n; } (Ein- und Ausgabe des Objektes vom Typ Person geschieht implicit durch this.) und Algorithmen 5/54 und Algorithmen 6/54 Effizienz von mplementierungen Elementare Datentypen Die Effizienz einer ADT-mplementierung ist entscheidend. 1. Die Platzkomplexität der internen Datenrepräsentation 2. Die Zeitkomplexität der Operationen Üblicherweise ein Kompromiss zwischen Zeit- und Platzeffizienz: Schnelle Operationen benötigen in der Regel zusätzlichen Speicherplatz. Platzsparende Repräsentationen führen oft zu langsameren Operationen. Elementare (primitive) Datentypen Elementare Datentypen sind durch die Programmiersprache oder sogar vom Rechnerarchitektur vorgegeben: bool, & : bool bool bool,... int, + : int int int,... float, + : float float float,...... und Algorithmen 7/54 und Algorithmen 8/54

Der Datentyp Zeiger (pointer) Zeiger (pointer) Ein Zeiger speichert eine Speicheradresse. Referenzierung: Adresse eines Objektes De-referenzierung: Objekt bei der Adresse Beispiel Referenzierung p o Der Datentyp Array (Feld) Array (Feld) N Daten eines Datentyps t werden so im Speicher abgelegt, dass ein Zugriff auf die Daten über ndizes möglich ist (Startindex meistens 0). Zur Speicherung wird meistens ein zusammenhängender Speicherblock mit Startadresse d start verwendet (statische Größe). i-tes Element a[i] eines eindimensionalen Arrays a: Speicheradresse d start + i datasize(t) (Laufzeit in Θ(1)) Beispiel datasize(t) De-referenzierung p d start a[0] a[1] a[2] a[i] d start + i datasize(t) und Algorithmen 9/54 und Algorithmen 10/54 Übersicht 1 sind Datentypen, die andere Datentypen kombinieren: Stapel (Kellerspeicher, Stack) Warteschlange (queue) Liste Baum... 2 3 Der abstrakte Datentyp Liste Einfach verkettete Doppelt verkettete 4 Traversierungen und Algorithmen 11/54 und Algorithmen 12/54

Lineare Datenstruktur Stapel (stack) ADT Stapel Stapel (stack) Stapel (Kellerspeicher, Stack) Ein Stapel (Kellerspeicher, Stack) der Größe N speichert eine Ansammlung von Elementen und bietet folgende Operationen: bool isempty(stack s) gibt true zurück, wenn s leer ist und andernfalls false. void push(stack s, int e) fügt das Element e in den Stapel s ein; der Stapel muss weniger als N Elemente enthalten. Quellen: flickr.com by Pierre, pieter musterd, superscheeli, Marjon Kruik, Marcel Grieder int pop(stack s) entfernt das zuletzt eingefügte Element und gibt es zurück; pop(s) benötigt einen nicht-leeren Stapel s. Schreib-Operationen: Last-in first-out (LFO) Vorne/oben einfügen Zuletzt eingefügtes Element (vorne/oben) entfernen und Algorithmen 13/54 und Algorithmen Stapelimplementierung Stapelimplementierung 1 2 3 push(41) push(11) pop() class Stack{ int content[n]; int top = -1; bool isempty() { return (top == -1); } 5 6 7 34 3 11 top 41 34 3 11 top 11 41 34 3 11 top void push(int e) { top = top + 1; content[top] = e; } 9 41 34 3 11 top 10 11 12 int pop() { top = top - 1; return content[top + 1]; } 14 15 16 17 18 14/54 und Algorithmen 15/54 Die Laufzeit ist jeweils Θ(1). n pop muss der Fall eines leeren Stapels nicht berücksichtigt werden (siehe Vorbedingung). Auch in push muss der Fall eines vollen Stapels nicht berücksichtigt werden. Eine mplementierung als verkettete Liste vermeidet eine a priori Festlegung der Arraygröße. } und Algorithmen 16/54

Stapel: Anwendungen Lineare Datenstruktur Warteschlange (queue) Warteschlange (queue) Anwendungen sender message queue receiver Funktionsaufrufe (Elemente: Parameter/lokale Variablen von Funktionen) Rekursive Auswertung von Termen Syntax Parsing Backtracking... producer user1 user2 user3 task queue print queue worker1 worker2 worker3 printer Quellen: flickr.com by iko, Alexandre Duret-Lutz Schreib-Operationen: First-in first-out (FFO) Vorne/oben einfügen Zuerst eingefügtes Element (hinten/unten) entfernen und Algorithmen 17/54 und Algorithmen 18/54 ADT Warteschlange Warteschlangenimplementierung Warteschlange (queue) Eine Warteschlange der Größe N speichert eine Ansammlung von Elementen und bietet folgende Operationen: bool isempty() gibt true zurück, wenn die Schlange leer ist, andernfalls false. 17 12 0 17 12 0 17 12 0 17 0 void enqueue(int e) fügt das Element e in die Warteschlange ein; die Schlange darf nicht voll sein. enq(0) enq(9) deq() deq() int dequeue() entfernt das schon am längsten in der Warteschlange vorhandene Element und gibt es zurück; benötigt daher eine nicht-leere Warteschlange. Ein Stapel bietet LFO (last-in first-out) Semantik, eine Warteschlange FFO (first-in first-out). 9 9 9 und Algorithmen 19/54 und Algorithmen 20/54

Warteschlangenimplementierung Warteschlangen: Anwendungen 1 class Queue{ 2 int content[n]; 3 int = 0, = 0; 5 bool isempty() { 6 return ( == ); 7 } 9 void enqueue(int e) { 10 content[] = e; 11 = ( + 1) mod N; 12 } 14 int dequeue() { 15 int e = content[]; 16 = ( + 1) mod N; 17 return e; 18 } 19 } Arraygröße N. Die Laufzeit ist jeweils Θ(1). Der Einfachheit halber werden Überläufe nicht abgefangen. Die Queue ist voll gdw. q. == (q. + 1) mod N. Anwendungen Algorithmen zur Vergabe von Ressourcen an Verbraucher Prozessverwaltung (Ressource: Rechenzeit, Elemente: Prozesse) Druckerverwaltung (Ressource: Drucker, Elemente: Druckaufträge) Message Queues in graphischen Benutzeroberflächen Kommunikation zwischen asynchronen Prozessen (channel)... und Algorithmen 21/54 und Algorithmen 22/54 Die Prioritätswarteschlange Betrachte Elemente, die mit einem Schlüssel (key) versehen sind. Jeder Schlüssel sei höchstens an ein Element vergeben. Schlüssel werden als Priorität betrachtet. Die Elemente werden nach ihrer Priorität sortiert. Prioritätswarteschlange (priority queue) Eine Prioritätswarteschlange der Größe N speichert eine Ansammlung von Elementen und bietet folgende Operationen: bool isempty() gibt true zurück, wenn die Schlange leer ist, andernfalls false. void insert(int e, int k) fügt das Element e mit dem Schlüssel k in die Schlange ein; Schlange darf nicht voll sein. int getmin() gibt das Element in der Schlange mit dem kleinsten Schlüssel zurück; benötigt eine nicht-leere Schlange. und Algorithmen 23/54 Die Prioritätswarteschlange Prioritätswarteschlange (priority queue) (Forts.) void delmin() entfernt das Element mit dem kleinsten Schlüssel aus der Schlange; benötigt eine nicht-leere Schlange. int getelt(int k) gibt das Element e mit dem Schlüssel k aus der Schlange zurück; k muss in der Schlange enthalten sein. void decrkey(int e, int k) setzt den Schlüssel von Element e auf k; e muss in der Schlange enthalten sein. k muss außerdem kleiner als der bisherige Schlüssel von e sein. Wichtige Datenstruktur für Greedy-Algorithmen, Diskrete-Event-Simulationen,... und Algorithmen 24/54

Prioritätswarteschlange, unsortiert Prioritätswarteschlange, sortiert 17 4 0 12 17 4 0 12 17 4 3 7 0 12 17 4 0 12 17 4 3 7 17 4 3 7 ins(0,12) ins(3,7) delmin() getelt(12) ins(0,12) ins(3,7) delmin() getelt(12) 3 7 0 12 0 12 schwarz = Element; rot = Schlüssel und Algorithmen 25/54 und Algorithmen 26/54 Zwei Prioritätswarteschlangenimplementierungen Übersicht mplementierung Operation unsortiertes Array sortiertes Array isempty(pq) Θ(1) Θ(1) insert(pq,e,k) Θ(1) Θ(n) getmin(pq) Θ(n) Θ(1) delmin(pq) Θ(n) Θ(1) getelt(pq,k) Θ(n) Θ(log n) decrkey(pq,e,k) Θ(n) Θ(n) Später werden wir eine weitere mplementierung kennenlernen. 1 2 3 Der abstrakte Datentyp Liste Einfach verkettete Doppelt verkettete 4 Traversierungen Beinhaltet das Verschieben aller Elemente rechts von k. Mittels binärer Suche. und Algorithmen 27/54 und Algorithmen 28/54

Lineare Datenstruktur Liste, ihre Elemente und Operationen Liste (list) Füge FügeElement Element mit mitschlüssel Schlüsselke210k13am hinter Anfang der Liste e2 ein ein Entferne Element aus der Element Liste Element e2 Element e32 Element e10 Element e0 Schlüssel k2 Schlüssel k32 Schlüssel k01 Schlüssel k0 Schreib-Operationen: Ein Element an einer gegebenen Position einfügen Ein gegebenes Element entfernen Sortieren... und Algorithmen 29/54 ADT Liste und Algorithmen Liste (Forts.) Eine Liste speichert eine Ansammlung von Elementen mit fester Reihenfolge und bietet (z.b.) folgende Operationen: Element insert(key k) fügt ein Element mit Schlüssel k am Anfang einer nicht-leeren Liste zurück und null wenn die Liste leer ist. void remove(element x) entfernt das Element x aus der Liste. Element search(key k) gibt das (erste) Element aus der Liste mit Schlüssel k zurück und null falls es kein derartiges Element gibt. Element maximum() gibt ein Element mit dem größten Schlüssel aus Element successor(element x) gibt das Nachfolgerelement von Element x in der Liste zurück. Vorbedingung: x ist in der Liste. Element predecessor(element x) gibt das Vorgängerelement von Element x n der Liste zurück. Vorbedingung: x ist in der Liste. void reverse() dreht die Reihenfolge in der Liste um. Vorbedingung: x ist in der Liste. Element minimum() gibt ein Element mit dem kleinsten Schlüssel aus einer nicht-leeren Liste zurück und null wenn die Liste leer ist. der Liste ein. 30/54 ADT Liste Liste und Algorithmen 31/54 und Algorithmen 32/54

Einige Aspekte von Vorteile dynamische Datenstruktur sehr große Sammlungen möglich Weitere Aspekte Nachteile kein Direktzugriff auf i-tes Element Was passiert, wenn der gleiche Schlüssel zweimal eingefügt wird? Die Liste wird zwei unterschiedliche Elemente mit dem gleichen Schlüssel enthalten. st eine Liste auch ein Stapel / eine Schlange? Nein, da sie eine unterschiedliche Schnittstelle hat. Aber: können zur mplementierung von Stapeln (stacks) und Schlangen (queues) verwendet werden. Wie arbeitet man eine Liste ab? teration vs Rekursion mplementierung: Einfach verkettete Liste Einfach verkettete Liste Eine einfach verkettete Liste implementiert den ADT Liste. Ein Zeiger zeigt auf das erste Element der Liste Jedes Element hat einen Zeiger next auf das nachfolgende Element next 48 34 2 25 und Algorithmen 33/54 und Algorithmen 34/54 Einfach verkettete Liste umdrehen Einige Aspekte von einfach verketteten 1 void reverse() { 2 Element last = ; 3 Element pos = last.next; 4 Element last.next = null; 6 while(pos!= null){ 7 Element tmp = pos.next; 8 pos.next = last; 9 last = pos; 10 pos = tmp; 11 } 13 = last; 14 } last pos tmp Einige Aspekte Wir sieht eine leere Liste aus? Ein zusätzliches (dummy) Element representiert den kopf Wie kann der Vorgänger eines Elementes bestimmt werden? Zurücklaufen nur durch nochmaliges Hinlaufen möglich und Algorithmen 35/54 und Algorithmen 36/54

mplementierung: Doppelt verkettete Laufzeiten mplementierung Doppelt verkettete Liste Eine doppelt verkettete Liste erweitert die einfach verkettete Liste. Zusätzlicher Zeiger zeigt auf das letzte Element der Liste Elemente haben einen weiteren Zeiger pre auf das vorherige Element. next 48 34 2 25 prev Operation einfach verkette Liste doppelt verkettete Liste insert(x) Θ(1) Θ(1) remove(x) Θ(n) Θ(1) search(k) Θ(n) Θ(n) minimum() Θ(n) Θ(n) maximum() Θ(n) Θ(n) search(k) Θ(n) Θ(n) minimum() Θ(n) Θ(n) maximum() Θ(n) Θ(n) successor(x) Θ(1) Θ(1) predecessor(x) Θ(n) Θ(1) Suchen eines Schlüssels erfordert einen Durchlauf der gesamten Liste. Gibt es andere Möglichkeiten, die Daten zu organisieren? und Algorithmen 37/54 und Algorithmen 38/54 Übersicht 1 Graphen Skill Graph (ungerichtet, ungewichtet) 2 3 Der abstrakte Datentyp Liste Einfach verkettete Doppelt verkettete 4 Traversierungen und Algorithmen 39/54 B D A C E Gerichteter Graph A 10 15 B C Gewichteter Graph und Algorithmen 40/54 0 2 42 23 D E

Graphen Bäume Graph Baum Ein Baum ist ein zusammenhängender azyklischer gerichteter Graph. Ein Graph ist ein Tupel (V, E) mit einer menge V von Knoten und einer Menge E V V von Kanten. Ein ungericheter Graph hat eine symmetrische Kantenmenge. Sonst heißt der Graph gerichtet. Ein Graph ist zusammenhängend wenn es zwischen allen zwei Knoten einen Pfad (Folgen von aneinanderliegenden Kanten) gibt. Eine Schleife ist ein Pfad der im gleichen Knoten anfängt und endet. Ein Graph ist azyklisch wenn er keine Schleifen hat. Quelle: Wikipedia und Algorithmen 41/54 und Algorithmen 42/54 Bäume Bäume: Notationen Wurzel (root) Ebene 0 Ebene 1 nnere Knoten (inner nodes) Tiefe eines Knotens Baum nformatik- Baum nformatik-wald Ebene 2 Ebene 3 Ebene 4 Höhe des Baumes Ein Baum ist ein zusammenhängender Wald. Quelle: http://nurderechteshit.com/2014/01/31/ Ebene 5 Blätter (leafs) und Algorithmen 43/54 und Algorithmen 44/54

Bäume: Notationen Binärbäume Notationen für Bäume Es gibt genau einen Knoten, die Wurzel (root), ohne eingehenden Kanten. Ausnahme: Baum mit V = E =. Ein Knoten mit mindestens einer ausgehenden Kante heißt innerer Knoten (inner node). Ein Knoten ohne ausgehenden Kanten heißt Blatt (leaf). Die Tiefe (depth) (Ebene, level) eines Knotens ist sein Abstand, d. h. die Pfadlänge, von der Wurzel. Die Höhe (level) eines Baumes ist die maximale Tiefe seiner Blätter. Definition (Binärbaum) Ein Binärbaum (binary tree) ist ein Baum, in dem jeder Knoten höchstens zwei ausgehenden Kanten hat, die geordnet sind. und Algorithmen 45/54 und Algorithmen 46/54 Binärbäume: mplementierung mplementierung eines Binärbaumes Binärbäume: Vorteile Es gibt eine eindeutige Wurzel (root) Jedes Element bekommt zwei Zeiger (left und right) zu den nachfolgenden Elementen. NB: Azyklisch Linkes Kind von A Vater/Mutter von B und C B 6 left A 12 right C 225 Schlüssel Rechtes Kind von A Beispiel (Vorteile von binären Bäumen) Angenommen, man möchte 31 Elemente vorhalten: Ebene 0 (Wurzel) enthält 1 Element Gesamt: Ebene 1 enthält 2 Elemente 3 Ebene 2 enthält 4 Elemente 7 Ebene 3 enthält 8 Elemente 15 Ebene 4 enthält 16 Elemente 31 Ein Element kann in 5 Schritten (statt 31) erreicht werden. Es gibt auch andere mplementierungen, aber diese Art ist die häufigste. und Algorithmen 47/54 und Algorithmen 48/54

Einige Fakten über binäre Bäume Traversierung Traversierung Lemma (Übung) Ebene d enthält höchstens 2 d Knoten. Ein Binärbaum mit Höhe h kann maximal 2 h+1 1 Knoten enthalten. Enthält er n Knoten, dann hat er mindestens Höhe log(n + 1) 1 (log log 2 ). Definition (vollständig) Ein Binärbaum heißt vollständig, wenn er bei Höhe h alle 2 h+1 1 Knoten enthält. Eine Traversierung ist ein Baumdurchlauf mit folgenden Eigenschaften: 1. Die Traversierung beginnt und endet an der Wurzel. 2. Die Traversierung folgt den Kanten des Baumes. Jede Kante wird genau zweimal durchlaufen: Einmal von oben nach unten und danach von unten nach oben. 3. Die Teilbäume eines Knotens werden in festgelegter Reihenfolge (zuerst linker, dann rechter Teilbaum) besucht. 4. Unterschiede bestehen darin, bei welchem Durchlauf man den Knoten selbst (bzw. das dort gespeicherte Element) besucht. und Algorithmen 49/54 und Algorithmen 50/54 norder-traversierung + / 3 5 8 4 1 void inorder(node node) { 2 if (node!= null) { 3 "(" 4 inorder(node.left); 5 print(node); 6 inorder(node.right); 7 ")" 8 } 9 } Preorder, norder, Postorder / + 8 4 3 5 1 void inorder(node node) { 2 if (node!= null) { 3 inorder(node.left); 4 print(node); 5 inorder(node.right); 6 } 7 } Beispiel (( (8/4)) + (3 5)) Beispiel (norder) 8 / 4 + 3 5 Beispiel (Preorder) + / 8 4 3 5 Linearisierung Eine Aufzählung aller Elemente eines Baumes in der Reihenfolge einer bestimmten Traversierung (ohne Klammern) nennt man Linearisierung. und Algorithmen 51/54 Beispiel (Postorder Umgekehrte Polnische Notation (RPN)) 8 4 / 3 5 + neg und Algorithmen 52/54

Preorder, norder, Postorder-Traversierung 1 void preorder(node node) { 2 if (node!= null) { 3 visit(node); 4 preorder(node.left); 5 preorder(node.right); 6 } 7 } 9 void inorder(node node) { 10 if (node!= null) { 11 inorder(node.left); 12 visit(node); 13 inorder(node.right); 14 } 15 } 16 void postorder(node node) { 17 if (node!= null) { 18 postorder(node.left); 19 postorder(node.right); 20 visit(node); 21 } 22 } Preorder, norder, Postorder Satz st von einem (unbekannte) Binärbaum mit eindeutigen Werten sowohl die norder-linearisierung als auch entweder die Preorder- oder die Postorder-Linearisierung gegeben, dann ist der Baum eindeutig bestimmt. Beispiel (Rekonstruktion aus norder- und Preorder-Linearisierung) norder: 5 2 7 9 Preorder: 5 7 2 9 5 7 2 9 Komplexität Θ(n), wobei n die Anzahl der Knoten ist. und Algorithmen 53/54 und Algorithmen 54/54