Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FH-Hof Sortieren mit Binären Bäumen Richard Göbel.

Ähnliche Präsentationen


Präsentation zum Thema: "FH-Hof Sortieren mit Binären Bäumen Richard Göbel."—  Präsentation transkript:

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

2 FH-Hof 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 FH-Hof Klassendefinition für Student public class Student extends Person { static ArrayList studenten; intmatrikelnummer; Vorlesung[]vorlesungen intanzVorlesungen; intsemester, static { studenten = new ArrayList (); } Student ( … ) { studenten.add(this); … }

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

5 FH-Hof 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 FH-Hof 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 FH-Hof Binärer Baum: Definition eines Knotens class Node { intvalue; Nodeleft = null; Noderight = null; }

8 FH-Hof 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 FH-Hof 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 FH-Hof Binärer Baum: Löschen eines Knotens - Fälle Knoten ohne Nachfolger Knoten mit einem Nachfolger Knoten mit zwei Nachfolgern

11 FH-Hof 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(); return this; }...

12 FH-Hof 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 FH-Hof Implementierung von deleteMin? int deleteMin(Node n) {... }

14 FH-Hof 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 FH-Hof 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 FH-Hof 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 FH-Hof 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 FH-Hof 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 FH-Hof Problem - Bäume mit langen Ästen

20 FH-Hof 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 FH-Hof Lokale Transformation eines binären Baumes X Y A BC X Y AB C

22 FH-Hof Transformationen des AVL-Baumes - Teil1

23 FH-Hof Transformationen des AVL-Baumes - Teil 2


Herunterladen ppt "FH-Hof Sortieren mit Binären Bäumen Richard Göbel."

Ähnliche Präsentationen


Google-Anzeigen