Binäre Bäume Richard Göbel.

Slides:



Advertisements
Ähnliche Präsentationen
M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Advertisements

der Universität Oldenburg
Klassen - Verkettete Liste -
Suchbäume unterstützen alle unten angegebenen Operationen für dynamische Mengen K effizient: Search(K ,k) ---- Suche ein Element x von K mit Schlüssel.
Design by Contract with JML - Teil 2
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
FH-Hof Reversi: Erweiterungen für den AutoClient Richard Göbel.
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
JTree Richard Göbel.
Java: Referenzen und Zeichenketten
Baumstrukturen Richard Göbel.
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
IF-ELSE-IF-Ketten Weiter mit PP..
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
Diskrete Mathematik I Vorlesung 6 Binärer Suchbaum II.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Thema: Fibonacci-Zahlen
Verzweigung.
Informatikunterricht mit Java
Kapitel 2: Datenstrukturen
FH-Hof Sortieren mit Binären Bäumen Richard Göbel.
Rekursion Richard Göbel.
Template Pattern Richard Göbel.
FH-Hof Singleton Pattern Richard Göbel. FH-Hof Motivation Bestimmte Klassen sollen nur ein Objekt haben Nur ein Fabrikobjekt für eine Fabrikklasse Zentraler.
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Algorithmen und Datenstrukturen Übungsmodul 6
Aufruf einer Methode eines Objektes vom Typ „Bruch“
CuP - Java Zwölfte Vorlesung Klassen – Komposition und Vererbung Freitag, 15. November 2002.
Kapitel 6: Suchbäume und weitere Sortierverfahren
Kapitel 6: Suchbäume und weitere Sortierverfahren
AVL-Trees (according to Adelson-Velskii & Landis, 1962) In normal search trees, the complexity of find, insert and delete operations in search.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
9.3 Suchbäume = Repräsentation linear geordneter Mengen durch Bäume (applikativ) bzw. baumartige Geflechte (imperativ) Garantierte Komplexität ist durchweg.
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Praktische Informatik 1
Schleifen mit der Turtle
Heapsort-Algorithmus
 Präsentation transkript:

Binäre Bäume Richard Göbel

Binäre Bäume Jeder Knoten hat höchsten zwei Nachfolger Anwendung: Verwaltung von Daten im Hauptspeicher

Binärer Baum: Definition eines Knotens public class Node { private int value; private Node left; private Node right; // Konstruktoren und Methoden . . . }

Binärer Baum: Ausgabe der Knoten public static void print(Node root, int depth) { for (int i = 0; i < depth; i++) { System.out.print(" "); } if (root == null) { System.out.println("<EMPTY>"); } else { System.out.println("Value: " + root.value); print(root.left, depth+1); print(root.right, depth+1);} } public static void print(Node root) { print(root, 0);

Binärer Baum: Suche nach Werten public Node search(int nValue) { if (newValue == value) return this; if (newValue < value) { if (left == null) { return null; } else { return left.search(newValue); } } if (right == null) { return right.search(newValue);} }}

Binärer Baum: Einfügen von Werten public void insert(int newValue) { if (newValue == value) { // hier Eintrag hinzufuegen } else if (newValue < value) { if (left == null) { left = new Node(newValue); } else { m_left.insert(newValue); }} else // newValue > value { if (right == null) { right = new Node(newValue); } right.insert(newValue);}} }

Binärer Baum: Löschen eines Knotens - Fälle Knoten ohne Nachfolger Knoten mit einem Nachfolger Knoten mit zwei Nachfolgern

Binärer Baum: Löschen eines Knotens - Code I public Node delete(int oldValue) { if (oldValue == value) { if (left == null) return right; if (right == null) return left; if (right.left == null) { value = right.value; right = right.right; return this; } else { value = right.deleteMin(); return this; } . . .

Binärer Baum: Löschen eines Knotens - Code II . . . if (oldValue < value) { if (left != null) { left = left.delete(oldValue); } return this; else { // oldValue > value if (right != null) { right = right.delete(oldValue);

Binärer Baum - Hauptklasse public class BinTree { private Node content = null; private int size = 0; . . . public Node search(int nValue) { . . . } public void insert(int nValue) { . . . } public void delete(int nValue) { . . . } public static void print(BinTree tree) { Node.print(tree.content(), 0); }

Binärer Baum - Weitere Dienstleistungen Sortierte Ausgabe aller Einträge Sortierte Ausgabe aller Einträge größer (kleiner) als ein vorgegebener Wert Sortierte Ausgabe aller Einträge zwischen zwei Werten

Binärer Baum - Sortierte Ausgabe aller Einträge public static void printAll(Node root) { if (root.left != null) { printAll(root.left); } System.out.println(root.value); if (root.right != null) { printAll(root.right);

Binärer Baum - Einträge größer als ein Wert public static void printAbove(Node root, int min) { if (root.value < min) { if (root.right != null) { printAbove(root.right(), min); } else { if (root.left != null) { printAbove(root.left, min); System.out.println(root.value); printAll(root.right); }}

Binärer Baum - Einträge in einem Bereich I public static void printBetween(Node root, int min,int max) { if (root.value < min) { if (root.right != null) { printBetween(root.right, min, max); } else if (root.value > max) { if (root.left != null) { printBetween(root.left, min, max); . . .

Binärer Baum - Einträge in einem Bereich II . . . else { if (root.left != null) { printAbove(root.left, min); } System.out.println(root.value); if (root.right != null) { printBelow(root.right, max);

Problem - Bäume mit langen Ästen

Lösung: (fast) balancierte Bäume Höhendifferenz des linken und rechten Teilbaums für jeden Knoten ist maximal k (k in der Regel 1) Beispiele: Rot-Schwarz-Baum AVL-Baum (G. M. Adel'son-Vel'skii und Y. M. Landis) Idee: Lokale Reorganisation des Baumes möglich

Lokale Transformation eines binären Baumes X Y A B C X Y A B C

Transformationen des AVL-Baumes - Teil1

Transformationen des AVL-Baumes - Teil 2