Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Sortieren mit Binären Bäumen

Ähnliche Präsentationen


Präsentation zum Thema: "Sortieren mit Binären Bäumen"—  Präsentation transkript:

1 Sortieren mit Binären Bäumen
Richard Göbel

2 Speichere alle Studierenden Beantworte folgende Anfragen
Beispielanwendung Speichere alle Studierenden Beantworte folgende Anfragen Student/Studentin mit gegebener Matrikelnummer finden Studierende im 4. Semester finden Studierende zwischen 3. und. 6. Semester finden

3 Klassendefinition für Student
public class Student extends Person { static ArrayList<Person> studenten; int matrikelnummer; Vorlesung[] vorlesungen int anzVorlesungen; int semester, static studenten = new ArrayList<Person>(); } Student ( … ) studenten.add(this);

4 Suchfunktionen public class Student extends Person { …
static Student search(int matrikel) } static Student search(int semester) static Student search(int minSem, int maxSem)

5 Analyse des Zeitaufwands
Suchen bei unsortierter Liste sortierter Liste Sortierkriterium? Aufwand für weitere Operationen bei sortierten Listen Einfügen Ändern Löschen Hilft die Datenstruktur LinkedList? Alternative Datenstruktur: Bäume

6 Sortierte Binäre Bäume
Jeder Knoten hat höchsten zwei Nachfolger Alle Knoten im linken Teilbaum sind kleiner als die Wurzel Alle Knoten im rechten Teilbaum sind größer als die Wurzel Gleiche Elemente?

7 Binärer Baum: Definition eines Knotens
class Node { int value; Node left = null; Node right = null; }

8 Binärer Baum: Suche nach Werten
Node search(int v) { if (v == value) return this; if (v < value) if (left == null) return null; else return left.search(v); else // v >= value if (right == null) return null; else return right.search(v); }

9 Binärer Baum: Einfügen von Werten
void insert(int v) { if (v == value) // neuen Eintrag einfuegen else if (v < value) if (left == null) left = new Node(); left.value = v; } else left.insert(v) else // v > n.value if (n.right == null) right = new Node(); right.value = v; else right.insert(v);

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

11 Binärer Baum: Löschen eines Knotens - Code I
Node delete(int v) { if (v == 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(); . . .

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

13 Implementierung von deleteMin?
int deleteMin(Node n) { . . . }

14 Binärer Baum – Kapselung
Klasse für den Einstieg class BinTree { Node content = null; int size = 0; } Entsprechende Funktionen definieren Node search(int v) … void insert(int v) … void delete(int v) … Klasse "Node" ist nur lokal wichtig

15 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

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

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

18 Binärer Baum - Einträge in einem Bereich I
void printBetween(int min,int max) { if (value < min) // nur rechts suchen if (right != null) right.printBetween(min,max); } else if (value > max) // nur links suchen if (left != null) left.printBetween(min, max); else // value zwischen min und max if (left != null) left.printAbove(min); println(root.value); if (right != null) right.printBelow(max);

19 Problem - Bäume mit langen Ästen

20 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

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

22 Transformationen des AVL-Baumes - Teil1

23 Transformationen des AVL-Baumes - Teil 2


Herunterladen ppt "Sortieren mit Binären Bäumen"

Ähnliche Präsentationen


Google-Anzeigen