• Keine Ergebnisse gefunden

Rückblick „Bäume 1“

N/A
N/A
Protected

Academic year: 2022

Aktie "Rückblick „Bäume 1“"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1

Universität Bremen

Bäume 2

Thomas Röfer

Suchbäume Suchen, Einfügen, Löschen Balancierte Bäume (AVL-Bäume) B-Bäume

2 Universität Bremen

PI-2: Bäume 2

Rückblick „Bäume 1“

Begriffe

Durchlaufen von Bäumen

Eigene Züge Gegnerische Züge Eigene Züge Gegnerische Züge Eigene Züge

Spielprobleme

22 B 3 B 3 A 9 A 9

F 1 F 1 E 1 E 1 22 H 1 H 1 G 1 G 1

22 D 1 D 1 C 1 C 1

44 55

99 18 18 0 1 1 1

1 0 1 0 1 0

0 1 0

0 0 1 1 1

1 0 1 0 1 0

0 1 0

0 Huffman-Baum

3 Universität Bremen

PI-2: Bäume 2

Auf besonderen Wunsch…

PI-2 Newsgroup

news://news.informatik.uni-bremen.de/fb3.lv.pi2 Nur innerhalb der Universität zugreifbar Von außen ins interne Uni-Netz Tunneln Secure Shell (SSH)

Infos: http://www-rn.informatik.uni-bremen.de/lehre/ti2/news-via-ssh-tunnel.txt Nachteile

Jeder Dienst (IP-Port) muss explizit getunnelt werden

Auf dem eigenen System müssen die Dienste dann als „localhost“ angesprochen werden Virtual Private Network (VPN)

Wie Zugang zum WLAN der Uni (Nachteil: WLAN-Passwort erforderlich) Infos: http://wlan.informatik.uni-bremen.de

pptp.informatik.uni-bremen.destatt login.fb3.wlan Nicht gesamten Datenverkehr über die Uni leiten!

4 Universität Bremen

PI-2: Bäume 2

Suchbäume

Motivation

Ein Suchbaum dient zum schnellen Auffinden von Werten, möglichst in O(logn) Definition

Die Schlüssel aller linken Nachfolger sind kleiner als der Schlüssel eines Knotens, die Schlüssel aller rechten sind größer (oder gleich)

Ein natürlicher Baum wird durch zufälliges Einfügen von Schlüsseln erzeugt und ist nicht notwendigerweise balanciert Alternative Schreibweise

((( 1 ) 3 (( 14 ) 15 )) 27 ( 39 )) Sichtweise

Die Blätter repräsentieren Intervalle im Wertebereich der Schlüssel

-∞… 1 1 … 3 3 … 14 14 … 15

15 … 27 27 … 39 39 …

5 Universität Bremen

PI-2: Bäume 2

Normaler Suchbaum

Ansatz

Werte stehen in inneren Knoten Blätter sind leer

Suchalgorithmus

Fall 1: Knoten ist innerer Knoten Falls Schlüssel gleich gesuchtem Wert, dann gefunden Ansonsten abhängig von Vergleich zwischen Wert und Schlüssel links oder rechts weitersuchen Fall 2: Knoten ist Blatt Wert nicht gefunden

Aufwand

O(Höhe des Baumes)

6 Universität Bremen

PI-2: Bäume 2

Blattsuchbäume

Ansatz

Geordnet wie Suchbäume Werte stehen in Blättern Innere Knoten enthalten nur

„Wegweiser“

z.B. größten Wert des linken Teilbaums Suchalgorithmus

Fall 1: Knoten ist innerer Knoten Abhängig von Vergleich zwischen Wert und Wegweiser links oder rechts weitersuchen

Fall 2: Knoten ist Blatt Wenn Wert gleich Schlüssel, dann gefunden

Ansonsten nicht gefunden

(2)

2

7 Universität Bremen

PI-2: Bäume 2

Suchen in Suchbaum

Wenn gesuchter Wert gleich dem Schlüssel gefunden kleiner als Schlüssel weitersuchen in linkem Nachfolger ansonsten weitersuchen in rechtem Nachfolger

Comparable search(Comparable value) {

return search2(root, value);

}

private Comparable search2(

Node node, Comparable value) {

if(node == null) return null;

else {

int c = value.compareTo(node.data);

if(c < 0)

return search2(node.left, value);

else if(c > 0)

return search2(node.right, value);

else

return node.data;

} }

Comparable search(Comparable value) {

returnsearch2(root, value);

}

privateComparable search2(

Node node, Comparable value) {

if(node == null) returnnull;

else {

intc = value.compareTo(node.data);

if(c < 0)

returnsearch2(node.left, value);

else if(c > 0)

returnsearch2(node.right, value);

else

returnnode.data;

} }

8 Universität Bremen

PI-2: Bäume 2

Suchbaum mit Wächter/Stopper

Ansatz

Wie beim Suchen in Listen/Arrays mit Wächter/Stopper

Test auf „nicht gefunden“ entfällt, da Wert garantiert gefunden wird Könnte in Java auch durch Ausnahmebehandlung ersetzt werden

Implementierung

In einem Suchbaum sind alle Blätter identisch (ist somit eigentlich kein Baum mehr)

In dieses einzige Blatt wird der gesuchte Wert geschrieben

9 Universität Bremen

PI-2: Bäume 2

Einfügen in einen Suchbaum

insert(17)

10 Universität Bremen

PI-2: Bäume 2

Einfügen in einen Suchbaum

Algorithmus

Suche nach dem einzufügenden Wert, wobei selbst dann weitergesucht wird, wenn er gefunden wurde

Es sei denn, man will jeden Wert nur einmal im Suchbaum repräsentieren

Dadurch wird auf jeden Fall ein externer Knoten gefunden Dieser wird durch ein neues Blatt mit dem einzufügenden Wert ersetzt

void insert(Comparable value) {

if(root == null) root = new Node(value);

else

insert2(root, value);

}

private void insert2(Node node, Comparable value) {

if(value.compareTo(node.data) < 0) if(node.left == null)

node.left = new Node(value);

else

insert2(node.left, value);

else

if(node.right == null) node.right = new Node(value);

else

insert2(node.right, value);

}

voidinsert(Comparable value) {

if(root == null) root = newNode(value);

else

insert2(root, value);

}

privatevoidinsert2(Node node, Comparable value) {

if(value.compareTo(node.data) < 0) if(node.left == null)

node.left = newNode(value);

else

insert2(node.left, value);

else

if(node.right == null) node.right = newNode(value);

else

insert2(node.right, value);

}

11 Universität Bremen

PI-2: Bäume 2

Löschen aus einem Suchbaum

3

1 5 7

6 4 2

8

3

1 7

6 5 2

8

remove(4) 1×

12 Universität Bremen

PI-2: Bäume 2

Löschen aus einem Suchbaum

Suche den zu löschenden Knoten

Merke unterwegs jeweils den Elternknoten

Wenn er gefunden wurde Falls einer seiner Nachfolger leer ist, ersetze ihn in seinem Elternknoten durch den jeweils anderen Nachfolger

Ansonsten suche den Knoten kmit dem nächst größeren Wert, überschreibe im zu löschenden Knoten den Wert mit dem Wert von kund lösche danach k

void remove(Comparable value) {

remove2(root, null, value);

}

private void remove2(Node node, Node parent, Comparable value) {

if(node != null) {

int c = value.compareTo(node.data);

if(c < 0)

remove2(node.left, node, value);

else if(c > 0)

remove2(node.right, node, value);

else

removeNode(node, parent);

} }

voidremove(Comparable value) {

remove2(root, null, value);

}

privatevoidremove2(Node node, Node parent, Comparable value) {

if(node != null) {

intc = value.compareTo(node.data);

if(c < 0)

remove2(node.left, node, value);

else if(c > 0)

remove2(node.right, node, value);

else

removeNode(node, parent);

} }

(3)

3

13 Universität Bremen

PI-2: Bäume 2

Löschen aus einem Suchbaum

private void removeNode(Node node, Node parent) {

if(node.right == null) replaceChild(parent, node,

node.left);

else if(node.left == null) replaceChild(parent, node,

node.right);

else if(node.right.left == null) {

node.right.left = node.left;

replaceChild(parent, node, node.right);

} else {

Node pon = getParentOfNext(node);

node.data = pon.left.data;

pon.left = pon.left.right;

} }

privatevoidremoveNode(Node node, Node parent) {

if(node.right == null) replaceChild(parent, node,

node.left);

else if(node.left == null) replaceChild(parent, node,

node.right);

else if(node.right.left == null) {

node.right.left = node.left;

replaceChild(parent, node, node.right);

} else {

Node pon = getParentOfNext(node);

node.data = pon.left.data;

pon.left = pon.left.right;

} }

private void replaceChild(Node node, Node oldNode, Node newNode) {

if(node == null) root = newNode;

else if(node.left == oldNode) node.left = newNode;

else

node.right = newNode;

}

private Node getParentOfNext(Node node) {

node = node.right;

while(node.left.left != null) node = node.left;

return node;

}

privatevoidreplaceChild(Node node, Node oldNode, Node newNode) {

if(node == null) root = newNode;

else if(node.left == oldNode) node.left = newNode;

else

node.right = newNode;

}

privateNode getParentOfNext(Node node) {

node = node.right;

while(node.left.left != null) node = node.left;

returnnode;

}

14 Universität Bremen

PI-2: Bäume 2

Balancierte Bäume

Motivation

Durch degenerierte Bäume kann die Suchdauer stark ansteigen

AVL-Baum (Adelson-Velskij und Landis) Definition

Ein Baum ist AVL-ausgeglichenoder höhenbalanciert, wenn für jeden Knoten des Baumes gilt, dass sich die Höhe seines linken Teilbaums von der des rechten Teilbaums um maximal 1 unterscheidet Algorithmus-Idee

Jedes Einfügen oder Löschen kann die Balanciertheit des Baumes zerstören.

Daher wird der Baum jeweils rebalanciert, sobald die Höhen des linken und rechten Teilbaums um zwei auseinander liegen

15 Universität Bremen

PI-2: Bäume 2

Balanciertheit, Höhe, Rotieren

Baum Leerer Baum:

Sonst: (t1, x, t2) Balanciertheit

heightbal( ) = true

heightbal((t1, x, t2)) = | height(t1) - height(t2) | ≤1 /\ heightbal(t1) /\ heightbal(t2) Höhe

height( ) = 0

height((t1, x, t2)) = max(height(t1), height(t2)) + 1 Baum rotieren

rotr(((t1, y, t2), x, t3)) = (t1, y, (t2, x, t3)) rotl((t1, y, (t2, x, t3))) = ((t1, y, t2), x, t3)

y t1 t2

t3

x y

t1 t2 t3

x rotr

rotl x t1 t2

16 Universität Bremen

PI-2: Bäume 2

Einfügen in AVL-Baum

Einfügen insert(x, ) = ( , x, )

rebal((insert(x, t1), y, t2)) falls x < y insert(x, (t1, y, t2)) =

rebal((t1, y, insert(x, t2))) sonst Neigung eines Knotens

slope( ) = 0

slope((t1, x, t2)) = height(t1) - height(t2) Kann im Baum gespeichert werden und braucht nicht immer wieder neu ausgerechnet zu werden Rebalancieren

shiftr(t) falls slope(t) = 2 rebal(t) = shiftl(t) falls slope(t) = -2

t sonst

+

+ -

-1

17 Universität Bremen

PI-2: Bäume 2

(Doppel-)Rotieren in AVL-Baum

rotr((rotl(t1), x, t2)) falls slope(t1) = -1 shiftr((t1, x, t2)) =

rotr((t1, x, t2)) sonst

rotl((t1, x, rotr(t2))) falls slope(t2) = 1 shiftl((t1, x, t2)) =

rotl((t1, x, t2)) sonst rotr((t1, x, t2))

y t3 t4

t2

x y

t3 t4 t2

x 2

t1 0, 1

0 1, 0

rotr((rotl(t1), x, t2)) t1 y

t3 t2

x z

t5 t2 x 2

-1 z t4 t5

t3 t4

y 1, 0 0, -1

0

18 Universität Bremen

PI-2: Bäume 2

Löschen aus einem AVL-Baum

Löschen remove(x, ) = remove(x, (t1, x, )) = t1 remove(x, ( , x, t2)) = t2 remove(x, (t1, x, t2)) = rebal(t1, y, t)

wobei (y, t) = leftest(t2) remove(x, (t1, y, t2)) = rebal((remove(x, t1), y, t2)) falls x < y remove(x, (t1, y, t2)) = rebal((t1, y, remove(x, t2))) falls x ≥y Finden des nächsten Elements

leftest(( , x, t)) = (x, t) leftest((t1, x, t2)) = (y, rebal((t, x, t2)))

wobei (y, t) = leftest(t1) Aufwand

Rebalancieren eines Knotens passiert in konstanter Zeit Bei Einfügen und Löschen wird auf dem Pfad von der Wurzel zu einem Knoten pro Knoten einmal rebalanciert Also ist der Aufwand O(Höhe des Baumes)

Da der Baum balanciert ist, ist der Aufwand also O(log n), auch im schlechtesten Fall 3

1 7

6 5 2

8

3

1 7

6 5 2

8 3

1 5 7

6 4 2

8

(4)

4

19 Universität Bremen

PI-2: Bäume 2

B-Bäume

Motivation

AVL-Bäume eignen sich nicht gut für die Verwaltung von Daten auf Massenspeichern (Festplatten)

Auf Daten auf Festplatten wird in Form von Sektoren zugegriffen Der Wechsel zwischen Sektoren kostet Zeit (Kopfbewegung) Daher: Daten linear, Baumstruktur als Index (ein Blattsuchbaum)

Index ist auch ein Baum, aber ein B-Baum, bei dem ein Knoten in einen Sektor passt B-Baum der Ordnung m

Alle Blätter habe die gleiche Tiefe Jeder Knoten mit Ausnahme der Wurzel und der Blätter hat wenigstens m/2 Kinder Die Wurzel hat mindestens 2 Kinder Jeder Knoten hat höchstens mKinder Jeder Knoten mit i Kindern hat i-1 Schlüssel

20 Universität Bremen

PI-2: Bäume 2

Einfügen und Suchen in B-Baum

Suchen

Binäre Suche in den Schlüsseln eines Knotens Dann zum nächsten Knoten, so lange, bis Blatt erreicht Einfügen

Suche nach Einfügeposition (ein Blatt) Fall 1: Übergeordneter Knoten ist noch nicht voll

Füge Schlüssel in Knoten ein

Erzeuge neues Blatt und referenziere dieses aus dem Knoten

insert(x)

21 Universität Bremen

PI-2: Bäume 2

Einfügen in einen B-Baum

Fall 2: Übergeordneter Knoten ist voll

Füge Schlüssel in Knoten ein (ist zu groß)

Teile Knoten in der Mitte Füge hinzugekommenen Knoten dem Elternknoten hinzu Falls dieser zu voll ist, teile ihn auch Falls die Wurzel geteilt wird, schaffe eine neue Wurzel und hänge die beiden Hälften der alten Wurzel als Nachfolger daran

22 Universität Bremen

PI-2: Bäume 2

Beispiel: Einfügen in B-Baum

insert(14)

Referenzen

ÄHNLICHE DOKUMENTE

Zwei Bäume eines solchen Paares sind potenziell unifizierbar, wenn einer der beiden Bäume ein Blatt (also ein Knoten ohne Unterbäume) ist und dieses Blatt im anderen Baum

Ein Knoten ist ein einfacher(d.h., dass alle Ecken von einander verschieden sind und 2 verschiedene Kanten nur in Ecken den selben Wert annehmen), geschlossener Polygonzug..

Normaler Suchbaum Ansatz Werte stehen in inneren Knoten Blätter sind leer Suchalgorithmus Fall 1: Knoten ist innerer Knoten Falls Schlüssel gleich gesuchtem Wert, dann

Bescheidwerte Januar Februar März April Mai Juni Juli August September Oktober November Dezember Summen bzw. Fracht1) Anzahl der Überschreitungen.

Welche Stoffe produzieren Bäume und Pflanzen aus Wasser, Licht und Kohlenstoffdioxid3. Welchen Nährstoff brauchen Bäume

Ein paar bunte Blumen vor dem Haus oder in Blumenkästen am Balkon oder am Fenster sind nicht nur eine Zierde für das eigene Grundstück, es prägt auch die Ansicht des Stadt-

Bestimme die Fälle und schreibe das passende Fragewort darunter. Das Haus meiner Freundin hat eine

Der Berg 1 Fall Der Berg wird vom Satz heruntergeschnitten und auf den oberen Teil des Kreuzes daraufgelegt... Wessen 2