Binäre Suchbäume

Werbung
Binäre Suchbäume
Mengen, Funktionalität, Binäre
Suchbäume, Heaps, Treaps
Mengen
n
Ziel: Aufrechterhalten einer Menge (hier: ganzer Zahlen) unter folgenden Operationen:
Mengen
n
Ziel: Aufrechterhalten einer Menge (hier: ganzer Zahlen) unter folgenden Operationen:
n
n
Einfügen eines Elements
Löschen eines Elements
Mengen
n
Ziel: Aufrechterhalten einer Menge (hier: ganzer Zahlen) unter folgenden Operationen:
n
n
n
Einfügen eines Elements
Löschen eines Elements
Suchen eines Elements
Mengen
n
Ziel: Aufrechterhalten einer Menge (hier: ganzer Zahlen) unter folgenden Operationen:
n
n
n
n
Einfügen eines Elements
Löschen eines Elements
Suchen eines Elements
Anforderung: effizient auch bei grossen Mengen!
Mengen: Anwendungen (I)
n
Telefonbuch (Menge von Namen mit
zugehörigen Telefonnummern)
n
n
n
Einfügen: Neue Telefonanschlüsse
Löschen: Aufgegebene Telefonanschlüsse
Suchen: Telefonnummer einer Person
Mengen: Anwendungen (II)
n
Nutzerverwaltung (Menge von Nutzern
mit Passwörtern und/oder weiteren
Informationen)
n
n
n
Einfügen: Neue Nutzer
Löschen: Ex-­Nutzer
Suchen: Einloggen
Mengen: Anwendungen (II)
n
Nutzerverwaltung (Menge von Nutzern
mit Passwörtern und/oder weiteren
Informationen)
n
n
n
n
Einfügen: Neue Nutzer
Löschen: Ex-­Nutzer
Suchen: Einloggen
Effizienz: Keine Wartezeit beim Ein-­
loggen, auch bei Millionen von Nutzern. Mengen: Lösung mit Listen ?
n
Menge wird als Liste gespeichert.
0
1
6
5
8
9
7
3
Mengen: Lösung mit Listen ?
n
Menge wird als Liste gespeichert.
n
Einfügen: zum Beispiel vorne anfügen
(effizient)
2
1
6
5
8
0
9
7
3
Mengen: Lösung mit Listen ?
n
Menge wird als Liste gespeichert.
n
Einfügen: zum Beispiel vorne anfügen
(effizient)
2
1
6
5
8
0
9
7
3
Mengen: Lösung mit Listen ?
n
Menge wird als Liste gespeichert.
n
Löschen: Durchlaufen der Liste bis zum
Element (oder bis zum Ende, falls nicht
vorhanden), Zeiger umhängen.
2
1
6
5
8
0
9
7
3
Mengen: Lösung mit Listen ?
n
Menge wird als Liste gespeichert.
n
Suchen: Durchlaufen der Liste bis zum
Element (oder bis zum Ende, falls nicht
vorhanden).
2
1
6
5
8
0
9
7
3
Mengen: Lösung mit Listen ?
n
Falls die Menge n Elemente enthält, so ist der Aufwand fürs Suchen eines
Elements im schlimmsten Fall pro-­
portional zu n.
Mengen: Lösung mit Listen ?
n
n
Falls die Menge n Elemente enthält, so ist der Aufwand fürs Suchen eines
Elements im schlimmsten Fall pro-­
portional zu n.
Soziales Netzwerk: Zeit zum Einloggen
wäre proportional zur Anzahl der Nutzer.
Mengen: Lösung mit Listen ?
n
Beispiel: Suche nach den letzten 100 Elementen in einer Liste von 10,000,000 Elementen
Mengen: Lösung mit Listen ?
n
Beispiel: Suche nach den letzten 100 Elementen in einer Liste von 10,000,000 Elementen
List l;
for (int i=0; i<10000000; ++i)
l.push_front(i);
// ...and search for i = 0..99
for (int i=0; i<100; ++i)
l.find(i);
Mengen: Lösung mit Listen ?
n
Beispiel: Suche nach den letzten 100 Elementen in einer Liste von 10,000,000 Elementen
List l;
for (int i=0; i<10000000; ++i)
l.push_front(i);
// ...and search for i = 0..99
for (int i=0; i<100; ++i)
6.5 Sekunden
l.find(i);
Mengen: Lösung mit Listen ?
n
Beispiel: Suche nach den letzten 100 Elementen in einer Liste von 10,000,000 Elementen
Facebook hat 1,400,000,000 List l;
for (int i=0; i<10000000; ++i) Nutzer, eine
Suche würde
l.push_front(i);
10 Sekunden
dauern!
// ...and search for i = 0..99
for (int i=0; i<100; ++i)
6.5 Sekunden
l.find(i);
Mengen: Lösung mit
Binären Suchbäumen.
n
n
Falls die Menge n Elemente enthält, so ist der Aufwand fürs Suchen eines
Elements im schlimmsten Fall pro-­
portional zu log2 n.
Facebook: Zeit zum Einloggen ist
proportional zum Logarithmus der
Anzahl der Nutzer.
Mengen: Lösung mit
Binären Suchbäumen.
n
n
Falls die Menge n Elemente enthält, so ist der Aufwand fürs Suchen eines
Elements im schlimmsten Fall pro-­
portional zu log2 n.
Facebook: Zeit zum Einloggen ist
proportional zum Logarithmus der
Anzahl der Nutzer.
log2 (1,400,000,000) ≈ 30.
Mengen: Lösung mit
Binären Suchbäumen.
n
n
Falls die Menge n Elemente enthält, so ist der Aufwand fürs Suchen eines
Elements im schlimmsten Fall pro-­
portional zu log2 n.
Auch Einfügen und Löschen geht in Zeit
proportional to log2 n.
Binärbäume, Definition und Terminologie
n
Ein binärer Baum ist entweder leer,...
Binärbäume, Definition und Terminologie
n
n
Ein binärer Baum ist entweder leer,...
oder er besteht aus einem Knoten
(Kreis) n
mit einem Schlüssel (hier: ganze Zahl),...
3
Binärbäume, Definition und Terminologie
n
n
Ein binärer Baum ist entweder leer,...
oder er besteht aus einem Knoten
(Kreis) n
n
mit einem Schlüssel (hier: ganze Zahl),...
und einem linken und rechten
Teilbaum, die jeweils Binärbäume sind. 3
Binärbäume, Definition und Terminologie
n
n
Ein binärer Baum ist entweder leer,...
oder er besteht aus einem Knoten
(Kreis) n
n
mit einem Schlüssel (hier: ganze Zahl),...
und einem linken und rechten
Teilbaum, die jeweils Binärbäume sind. 3
Linker Teilbaum
Wurzel des Baums
Rechter Teilbaum
Binäre Suchbäume
n
Ein Binärbaum heisst binärer Suchbaum, wenn er leer ist, oder wenn folgende Bedingungen gelten:
n
n
Sowohl der linke als auch der rechte Teilbaum sind binäre Suchbäume.
Der Schlüssel der Wurzel ist
n
n
> alle Schlüssel im linken Teilbaum, und
≦ alle Schlüssel im rechten Teilbaum.
Binäre Suchbäume:
Beispiel
4
3
8
1
6
2
5
9
7
Binäre Suchbäume:
Beispiel
4
3
8
1
6
2
5
9
7
Blätter des Baums
Binäre Suchbäume:
Suchen nach einem Schlüssel
5 ?
4
3
8
1
6
2
5
9
7
Binäre Suchbäume:
Suchen nach einem Schlüssel
4 = 5 ?
3
8
1
6
2
nein
5
9
7
Binäre Suchbäume:
Suchen nach einem Schlüssel
4 > 5 ?
3
8
1
6
2
Nein, also muss die 5 rechts sein.
5
9
7
Binäre Suchbäume:
Suchen nach einem Schlüssel
4
3
8
1
6
2
5
= 5 ?
nein
9
7
Binäre Suchbäume:
Suchen nach einem Schlüssel
4
3
Ja, also muss die 5 links sein.
1
6
2
5
8
> 5 ?
9
7
Binäre Suchbäume:
Suchen nach einem Schlüssel
4
3
8
1
6
2
5
= 5 ?
7
nein
9
Binäre Suchbäume:
Suchen nach einem Schlüssel
4
3
1
8
Ja, also muss die 5 links sein.
2
5
6
> 5 ?
7
9
Binäre Suchbäume:
Suchen nach einem Schlüssel
4
3
8
1
6
2
5
= 5 ?
9
7
Ja, Schlüssel gefunden!
Binäre Suchbäume:
Suchen nach einem Schlüssel
0?
4
3
8
1
0 müsste links von der 1 sein, Teilbaum ist aber leer ⇒
0 nicht da.
6
2
5
9
7
Mengen: Lösung mit binären Suchbäumen
n
Speichere die Elemente der Menge als Schlüssel in einem binären Suchbaum!
Mengen: Lösung mit binären Suchbäumen
n
n
Speichere die Elemente der Menge als Schlüssel in einem binären Suchbaum!
Suchzeit ist proportional zur Höhe des Baums (Länge des längsten Pfades von der Wurzel bis zu einem Blatt).
Mengen: Lösung mit binären Suchbäumen
4
3
8
1
6
2
5
9
7
Höhe 3
Mengen: Lösung mit binären Suchbäumen
n
n
n
Speichere die Elemente der Menge als Schlüssel in einem binären Suchbaum!
Suchzeit ist proportional zur Höhe des Baums (Länge des längsten Pfades von der Wurzel bis zu einem Blatt).
Einfügen und Löschen von Elementen?
Binäre Suchbäume:
Einfügen
n
Neues Element suchen und als Blatt an der passenden Stelle anhängen! Binäre Suchbäume:
Einfügen
0 einfügen
4
3
8
1
0 müsste links von der 1 sein, Teilbaum ist aber leer ⇒
neues Blatt
6
2
5
9
7
Binäre Suchbäume:
Einfügen
0 einfügen
4
3
8
1
0
6
2
5
9
7
Binäre Suchbäume:
Einfügen
n
n
Neues Element suchen und als Blatt an der passenden Stelle anhängen!
Auch die Einfügezeit ist proportional zur Höhe des Baums. Binäre Suchbäume:
Löschen
n
Element suchen, seinen Knoten durch Rotationen zu einem Blatt machen, Blatt löschen!
Binäre Suchbäume:
Löschen
n
n
Element suchen, seinen Knoten durch Rotationen zu einem Blatt machen, Blatt löschen!
Rotation: lokale Operation, welche die Positionen von Knoten verändert, nicht
jedoch die Suchbaumeigenschaften. Rotation eines Teilbaums
s
t
B
A
B
Rotation eines Teilbaums
s
t
C
A
B
A < t ≦ B < s ≦ C Rotation eines Teilbaums
Rechtsrotation
s
t
t
s
C
A
A
B
A < t ≦ B < s ≦ C B
=
C
A < t ≦ B < s ≦ C Rotation eines Teilbaums
Rechtsrotation
s
t
Linksrotation
t
s
C
A
A
B
A < t ≦ B < s ≦ C B
=
C
A < t ≦ B < s ≦ C Binäre Suchbäume:
Löschen
8 löschen
4
3
8
1
6
2
5
9
7
Binäre Suchbäume:
Löschen
8 löschen
4
3
8
1
6
2
5
A
C
7
9
B
Rechtsrotation (Linksrotation wäre auch möglich) Binäre Suchbäume:
Löschen
8 löschen
4
3
1
6
5
8
A
B
2
C
7
9
Binäre Suchbäume:
Löschen
8 löschen
4
3
1
6
5
B und C sind leere Bäume
8
A
2
Linksrotation (Rechtsrotation wäre auch möglich) 7
9
B
C
Binäre Suchbäume:
Löschen
8 löschen
4
3
1
6
B und C sind leere Bäume
5
2
9
C
8
A
B
7
Binäre Suchbäume:
Löschen
8 löschen
4
3
1
6
A, B, C sind leere Bäume
5
9
8
C
2
Rechtsrotation (Linksrotation wäre nicht möglich) 7
A
B
Binäre Suchbäume:
Löschen
8 löschen
4
3
1
6
A, B, C sind leere Bäume
5
9
7
2
A
8
B
C
Binäre Suchbäume:
Löschen
8 löschen
4
3
1
6
5
9
7
2
delete
8
Binäre Suchbäume:
Löschen
n
n
n
Element suchen, seinen Knoten durch Rotationen zu einem Blatt machen, Blatt löschen!
Rotation: lokale Operation, welche die Positionen von Knoten verändert, nicht
jedoch die Suchbaumeigenschaften. Auch die Löschzeit ist proportional zur Höhe des Baums (nicht mehr ganz so offensichtlich)
Die Höhe eines binären Suchbaums...
n
bestimmt die Laufzeit des
n
n
n
Suchens,
Einfügens,
Löschens.
Die Höhe eines binären Suchbaums...
n
bestimmt die Laufzeit des
n
n
n
n
Suchens,
Einfügens,
Löschens.
kann aber bereits bei einer ungünstigen Einfügereihenfolge sehr gross werden! Die Höhe eines binären Suchbaums...
n
bestimmt die Laufzeit des
n
n
n
n
n
Suchens,
Einfügens,
Löschens.
kann aber bereits bei einer ungünstigen Einfügereihenfolge sehr gross werden!
Laufzeit im schlimmsten Fall nicht besser als bei einer Liste!
Die Höhe eines binären Beispiel: Einfügen in Suchbaums... sortierter Reihenfolge
1
Die Höhe eines binären Beispiel: Einfügen in Suchbaums... sortierter Reihenfolge
1
2
Die Höhe eines binären Beispiel: Einfügen in Suchbaums... sortierter Reihenfolge
1
2
3
Die Höhe eines binären Beispiel: Einfügen in Suchbaums... sortierter Reihenfolge
1
2
3
n
Höhe = n-­1, Baum sieht aus und verhält sich wie eine Liste.
Abhilfe: Balancierung
n
Beim Einfügen und Löschen stets darauf achten, dass der Baum „balanciert“ ist, (d.h. keine grossen Höhenunterschiede zwischen linken und rechten Teil-­
bäumen)
Abhilfe: Balancierung
n
n
Beim Einfügen und Löschen stets darauf achten, dass der Baum „balanciert“ ist, (d.h. keine grossen Höhenunterschiede zwischen linken und rechten Teil-­
bäumen)
Verschiedene Möglichkeiten (mehr oder weniger kompliziert):
n
AVL-­Bäume, Rot-­Schwarz-­Bäume,...
Abhilfe: Balancierung
n
n
Beim Einfügen und Löschen stets darauf achten, dass der Baum „balanciert“ ist, (d.h. keine grossen Höhenunterschiede zwischen linken und rechten Teil-­
bäumen)
Verschiedene Möglichkeiten (mehr oder weniger kompliziert):
n
n
AVL-­Bäume, Rot-­Schwarz-­Bäume,...
Hier: Treaps (randomisierte Suchbäume)
Treap = Tree + Heap
n
Ein Binärbaum heisst Heap, wenn er leer ist, oder wenn folgende Bedingungen gelten:
n
n
Sowohl der linke als auch der rechte Teilbaum sind Heaps.
Der Schlüssel der Wurzel ist
n
das Maximum aller Schlüssel.
Heap: Schlüssel heissen
Prioritäten
n
Ein Binärbaum heisst Heap, wenn er leer ist, oder wenn folgende Bedingungen gelten:
n
n
Sowohl der linke als auch der rechte Teilbaum sind Heaps.
Die Priorität der Wurzel ist
n
das Maximum aller Prioritäten.
Heap:
Beispiel
9
7
8
4
6
3
2
5
1
Treaps
n
Ein Binärbaum heisst Treap, wenn jeder Knoten einen Schlüssel und eine Priorität hat, so dass folgende Eigen-­
schaften gelten:
n
n
Der Baum ist ein binärer Suchbaum bzgl. der Schlüssel.
Der Baum ist ein Heap bzgl. der Prioritäten.
Treap:
Beispiel
Schlüssel
Prioritäten
4, 9
3, 7
8, 8
1, 4
6, 6
2, 3
5, 2
9, 5
7, 1
Treaps: Eindeutigkeit
n
Satz: Für n Knoten mit verschiedenen Schlüsseln und Prioritäten gibt es genau einen Treap mit diesen Knoten.
Treaps: Eindeutigkeit
n
n
Satz: Für n Knoten mit verschiedenen Schlüsseln und Prioritäten gibt es genau einen Treap mit diesen Knoten.
Beweis: Die Wurzel ist der Knoten mit der höchsten Priorität;; im linken Teilbaum sind alle Knoten mit kleineren und im rechten Teilbaum alle Knoten mit grösseren Schlüsseln. Mit Induktion sind die Teilbäume auch eindeutig.
Treaps mit zufälligen
Prioritäten
n
Wir benutzen einen Treap als binären Suchbaum.
Treaps mit zufälligen
Prioritäten
n
n
Wir benutzen einen Treap als binären Suchbaum.
Beim Einfügen eines neuen Schlüssels wird seine Priorität zufällig gewählt.
Treaps mit zufälligen
Prioritäten
n
n
n
Wir benutzen einen Treap als binären Suchbaum.
Beim Einfügen eines neuen Schlüssels wird seine Priorität zufällig gewählt.
Wie bei normalen binären Suchbäumen: neuer Knoten wird neues Blatt.
Treaps mit zufälligen
Prioritäten
n
n
n
n
Wir benutzen einen Treap als binären Suchbaum.
Beim Einfügen eines neuen Schlüssels wird seine Priorität zufällig gewählt.
Wie bei normalen binären Suchbäumen: neuer Knoten wird neues Blatt.
Zusätzlich muss die Treap-­Eigenschaft wieder hergestellt werden!
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
3, 7
8, 8
1, 4
6, 6
2, 3
5, 2
9, 5
7, 1
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
3, 7
8, 8
1, 4
0, 7.5
Neues Blatt
6, 6
2, 3
5, 2
9, 5
7, 1
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
3, 7
8, 8
1, 4
6, 6
9, 5
Heap-­Eigenschaft verletzt: 4 < 7.5
0, 7.5
2, 3
5, 2
7, 1
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
3, 7
8, 8
1, 4
0, 7.5
6, 6
2, 3
5, 2
Rechtsrotation!
9, 5
7, 1
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
3, 7
8, 8
0, 7.5
6, 6
9, 5
1, 4
2, 3
5, 2
7, 1
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
3, 7
0, 7.5
8, 8
Heap-­Eigenschaft verletzt: 7 < 7.5
6, 6
9, 5
1, 4
2, 3
5, 2
7, 1
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
3, 7
8, 8
0, 7.5
6, 6
9, 5
1, 4
2, 3
5, 2
Rechtsrotation!
7, 1
Treaps: Einfügen
4, 9
0 einfügen, mit zufälliger Priorität 7.5
0, 7.5
8, 8
3, 7
6, 6
9, 5
1, 4
2, 3
5, 2
7, 1
Treaps: Einfügen
4, 9
0, 7.5
0 einfügen, mit zufälliger Priorität 7.5
Heap-­Eigenschaft ok, wir haben wieder einen Treap!
3, 7
6, 6
9, 5
1, 4
2, 3
5, 2
8, 8
7, 1
Treaps: Löschen
n
Element suchen, seinen Knoten durch Rotationen zu einem Blatt machen, Blatt löschen!
Treaps: Löschen
n
n
Element suchen, seinen Knoten durch Rotationen zu einem Blatt machen, Blatt löschen!
Stets so rotieren, dass der Knoten mit seinem Nachfolger höherer Priorität vertauscht wird. Das erhält die Heap-­
Eigenschaft.
Treaps: Löschen
n
n
n
Element suchen, seinen Knoten durch Rotationen zu einem Blatt machen, Blatt löschen!
Stets so rotieren, dass der Knoten mit seinem Nachfolger höherer Priorität vertauscht wird. Das erhält die Heap-­
Eigenschaft.
Suchbaum-­Eigenschaft gilt wieder nach Löschen des Blatts.
Treaps: Laufzeit
n
Satz (Seidel, Aragon 1996): In einem Treap über n Knoten mit zufälligen Prioritäten ist der zeitliche Aufwand für eine Einfüge-­, Lösch-­ oder Suchopera-­
tion im Erwartungswert proportional zu log2n.
Treaps: Laufzeit
Mengen: Lösung mit Treaps
n
Zur Erinnerung: Suche nach den letzten
100 Elementen in einer Liste von 10,000,000 Elementen
List l;
for (int i=0; i<10000000; ++i)
l.push_front(i);
// ...and search for i = 0..99
for (int i=0; i<100; ++i)
6.5 Sekunden
l.find(i);
Mengen: Lösung mit Treaps
n
Neu: Suche nach den gleichen 100 Elementen in einem Treap von 10,000,000 Elementen
Treap t;
for (int i=0; i<10000000; ++i)
t.insert(i);
// ...and search for i = 0..99
for (int i=0; i<100; ++i)
0.017 Sekunden
t.find(i);
Sortieren mit Treaps
n
Folgerung: Durch Einfügen einer Folge von n Zahlen in einen Treap mit zufäl-­
ligen Prioritäten kann die Folge in Zeit proportional zu n log2n sortiert werden.
Sortieren mit Treaps
n
n
Folgerung: Durch Einfügen einer Folge von n Zahlen in einen Treap mit zufäl-­
ligen Prioritäten kann die Folge in Zeit proportional zu n log2n sortiert werden.
Sortierte Reihenfolge: Elemente des Treaps „von links nach rechts“ (in-­
order-­Reihenfolge)
Sortieren mit Treaps
4, 9
In-­Order-­Reihenfolge (Baum) =
3, 7
8, 8
1, 4
6, 6
2, 3
5, 2
9, 5
7, 1
1,2,3
Sortieren mit Treaps
4, 9
In-­Order-­Reihenfolge (Baum) =
(Baum):
3, 7
8, 8
1, 4
6, 6
2, 3
5, 2
In-­Order-­Reihenfolge (linker Teil Baum)
9, 5
7, 1
1,2,3,4
Sortieren mit Treaps
4, 9
3, 7
In-­Order-­Reihenfolge (Baum) =
(Baum):
8, 8
Wurzel
1, 4
6, 6
2, 3
5, 2
9, 5
7, 1
1,2,3,4,5,6,7,8,9
Sortieren mit Treaps
4, 9
In-­Order-­Reihenfolge (Baum) =
(Baum):
3, 7
8, 8
1, 4
6, 6
2, 3
5, 2
9, 5
7, 1
In-­Order-­Reihenfolge (rechter Teil Baum)
Sortieren mit Treaps
n
n
Folgerung: Durch Einfügen einer Folge von n Zahlen in einen Treap mit zufäl-­
ligen Prioritäten kann die Folge in Zeit proportional zu n log2n sortiert werden.
Das Treap-­basierte Verfahren ist im wesentlichen äquivalent zu Quicksort. 
Herunterladen