fh-hof sortieren mit binären bäumen richard göbel

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

Upload: erna-zibell

Post on 05-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

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

FH-Hof

Sortieren mit Binären Bäumen

Richard Göbel

Page 2: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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

Page 3: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Klassendefinition für Student

public class Student extends Person{

static ArrayList<Person> studenten;

int matrikelnummer;Vorlesung[] vorlesungenint anzVorlesungen;int semester,

static{

studenten = new ArrayList<Person>();}

Student ( … ){

studenten.add(this);…

}}

Page 4: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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){

… }

…}

Page 5: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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

Page 6: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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?

8

4 10

6 9 11

5 7 12

Page 7: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Binärer Baum: Definition eines Knotens

class Node

{

int value;

Node left = null;

Node right = null;

}

Page 8: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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);

}

Page 9: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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);}

Page 10: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Binärer Baum: Löschen eines Knotens - Fälle

Knoten ohne Nachfolger

Knoten mit einem

Nachfolger

Knoten mit zwei

Nachfolgern

8

4 10

6 9 11

5 7 12

Page 11: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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;}

} . . .

Page 12: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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;

}

}

Page 13: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Implementierung von deleteMin?

int deleteMin(Node n)

{

. . .

}

Page 14: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Binärer Baum – Kapselung

Klasse für den Einstiegclass BinTree

{

Node content = null;

int size = 0;

}

Entsprechende Funktionen definierenNode search(int v) …

void insert(int v) …

void delete(int v) …

Klasse "Node" ist nur lokal wichtig

Page 15: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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

Page 16: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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();

}

Page 17: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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();

}

}

Page 18: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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);

}}

Page 19: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Problem - Bäume mit langen Ästen

1

2

3

4

5

6

1

2

3

4

5

6

Page 20: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

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

Page 21: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Lokale Transformation eines binären Baumes

X

YA

B C

X

Y

A B

C

Page 22: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Transformationen des AVL-Baumes - Teil1

x

y

z

A

B

C D

n

n n+1

n+2

x

y

z

A B C Dn n

n+1

n+2

n+1

x

y

z

A

D

B C

n

nn+1

n+2

x

z

y

A B C Dn n

n+1

n+2

n+1

n n

Page 23: FH-Hof Sortieren mit Binären Bäumen Richard Göbel

FH-Hof

Transformationen des AVL-Baumes - Teil 2

x

y

z

D

C

A B

n

nn+1

n+2

z

y

x

A B C D

n+1

n+2

n+1

nn

x

y

z

D

A

B C

n

n n+1

n+2

y

z

x

A B C Dn n

n+1

n+2

n+1

n n