(2-4)-Baum

Werbung
Datenstrukturen und
Algorithmen
VO 708.031
(2-4)-Bäume
[email protected]
1
7. Bäume
•
•
•
•
•
Bäume als Datenstruktur
WH Binärbäume
Balancierte Bäume
(2-4)-Bäume
Anwendung: Mischbare Warteschlangen
(2-4)-Bäume
[email protected]
2
WH - Binärbäume
• Jeder Knoten hat maximal zwei Nachfolger
Existiert ein Sohn- oder ein Vaterknoten nicht,
wird nil zurückgeliefert
(2-4)-Bäume
[email protected]
3
Sortierte Binärbäume können
entarten!
• Aufbau eines sortierten Binärbaumes:
– durch wiederholtes Einfügen (⇒ natürliche Bäume)
– Binärbaum hängt von der Reihenfolge der Elemente ab
T(n) = O(n*h)
= Θ(n2), wenn h = Θ(n)
Einige wenige
Reihenfolgen
liefern entartete
Bäume (= Listen)
Fügt man randomisiert ein, ist E[h] klein
(2-4)-Bäume
[email protected]
4
Binärbäume - online
Durch Update-Operation
(Löschen, Einfügen)
1
9
Höhe ≠ log(n)
8
Entartet!
3
Höhe = O(n)
Umstrukturieren
O(n)
(fast) ausgeglichen
= gut, da minimale
Höhe = O( log n)
11.12.2008
teuer!
7
4
5
[email protected]
Zusammenfassung - Sortierte
Binärbäume
• Zusammenfassung:
–
–
–
–
–
–
–
Minimum
Maximum
Vorgänger
Nachfolger
Einfügen
Löschen
Suchen
Alle Operationen in O(h) Zeit
h … Baumhöhe
• Vorteil: dynamische Lösung des Wörterbuchproblems
• Nachteil: Zeiten bis zu Θ(n) wenn Baum entartet ist, Bsp.:
online Elemente hinzufügen
(2-4)-Bäume
[email protected]
6
7. Bäume
•
•
•
•
•
Bäume als Datenstruktur
WH Binärbäume
Balancierte Bäume
(2-4)-Bäume
Anwendung: Mischbare Warteschlangen
(2-4)-Bäume
[email protected]
7
Balancierte Bäume
• Bedingungen zum Erhalten einer logarithmischen Baumhöhe:
1. Höhenbedingung:
h(B) = Höhe von B
Für jeden Knoten gilt:
2. Gewichtsbedingung:
g(B) = #Blätter von B
Für jeden Knoten gilt:
h( Blinks )  h( Brechts )  k
1
z.B.: AVL-Bäume (1962)


g ( Blinks )

g ( Brechts )
BB-Bäume (bounded balance)
3. Strukturbedingung:
Alle Blätter haben die gleiche Tiefe,
aber Ordnung der Knoten (# Söhne) ist variabel
(a-b)-Bäume, B-Bäume, Bruder-Bäume
(2-4)-Bäume
[email protected]
8
(2-4)-Bäume
• Balancierung ist leichter aufrechtzuerhalten, wenn die Werte
blattorientiert statt knotenorientiert gespeichert werden.
Innere Knoten enthalten nur Hilfsinformationen.
• Ein (2-4)-Baum ist ein Baum mit folgenden Eigenschaften:
(1) Alle Äste sind gleich lang.
(2) Die max. Anzahl der Söhne eines Knotens ist 4.
(3) Innere Knoten haben  2 Söhne.
(4) Die Blätter enthalten v.l.n.r. die Werte aufsteigend sortiert.
(5) Jeder innere Knoten mit t Söhnen (2  t  4) speichert t-1
Hilfsinformationen x1, …, xt-1, wobei
xi = größter Wert im Teilbaum des i-ten Sohnes von links.
2 ≤ α(k) ≤ 4 … Anzahl der Söhne des Knotens k
(2-4)-Bäume
[email protected]
9
(2-4)-Bäume
• Beispiel:
Innere Knoten speichern
Hilfsinformationen
(z.B.: Max. der linken t-1 Unterbäume)
4,6
1,2
1
Höhe h=Θ(log n)
(2-4)-Bäume
2
10,11
5
4
5
6
10
11
24
Daten werden in den Blättern gespeichert
(v.l.n.r. aufsteigend sortiert)
[email protected]
10
(2-4)-Bäume: Suchen
• Suchen: pro Knoten wird der relevante Teilbaum in O(t) = O(1)
Zeit pro Knoten selektiert ⇒ Θ(h) = Θ(log n) Zeit
8
2
2
(2-4)-Bäume
4
4
10
5
5
11
8
10
12
11
[email protected]
12
24
24
31
11
(2-4)-Bäume: Einfügen
2 ≤ α(k) ≤ 4 … Anzahl der Söhne des Knotens k
• Einfügen: Suchen, Blatt an Knoten k anhängen
– α(k) ≤ 4: Resultierender Baum ist wieder ein (2-4)-Baum
– α(k) = 5: Resultierender Baum ist kein (2-4)-Baum
SPALTEN von k: Gib k einen Bruder k' rechts von k. Hänge die 2 rechtesten
Söhne von k auf k' um ⇒ α(k) = 3, α(k') = 2
SPALTEN muss evtl. für übergeordnete Knoten wiederholt werden
(evt. bis zur Wurzel. Diese wird dann Sohn einer neuen Wurzel mit α(w)=2)
⇒ O(h) = O(log n) Zeit
(2-4)-Bäume
[email protected]
12
(2-4)-Bäume: Entfernen
• Entfernen: Suchen, Blatt von Knoten k entfernen
– α(k) ≥ 2: Resultierender Baum ist wieder ein (2-4)-Baum
– α(k) = 1: Resultierender Baum ist kein (2-4)-Baum
Sei k' ein direkter Bruder von k:
– α(k') ≥ 3: STEHLEN eines Sohnes von k' ⇒ α(k) = 2, α(k') ≥ 2
– α(k') =2: VERSCHMELZEN von k mit k' ⇒ α(k) = 3
Verschmelzen evt. für
übergeordnete Knoten
wiederholen
(Wurzel wird durch
einzigen Sohn ersetzt)
⇒ O(h) = O(log n) Zeit
(2-4)-Bäume
[email protected]
13
Zusammenfassung (2-4)-Bäume
• Der (2-4)-Baum ist eine Datenstruktur, die das
Wörterbuchproblem (Suchen, Einfügen, Entfernen) auf einer
Menge von n Elementen in O(log n) Zeit pro Operation löst,
und O(n) Speicher belegt.
• Dies ist worst-case optimal (auch bzgl. statischer Suche!).
• Einfügen und Entfernen erfordert Umstrukturierungen
(Spalten, Stehlen, Verschmelzen)
• Bereits vorgenommene Umstrukturierungen amortisieren
sich jedoch später
(2-4)-Bäume
[email protected]
14
Anwendung: Mischbare
Warteschlangen
4 Operationen:
• EINFÜGE(S, x)
• MAXIMUM(S)
• ENTFERNE_MAX(S)
• MISCHE(S, S‘)
Die Datenstruktur Halde unterstützt die ersten 3 Operationen in
O(log n) Zeit.
Mischen von Halden ist aber teuer, O(n) Zeit.
Bäume sind flexibel genug um Mischen in O(log n) Zeit zu ermöglichen.
(2-4)-Bäume
[email protected]
15
Mischbare Warteschlangen
Mischbare Warteschlange mittels unsortiertem (2-4)-Baum:
• Die Blätter speichern S in beliebiger Reihenfolge.
• Jeder Knoten speichert das Maximum in seinem Teilbaum,
sowie einen Zeiger auf das entsprechende Blatt.
(2-4)-Bäume
[email protected]
16
Mischbare Warteschlangen
MAXIMUM(S): trivial, berichte Hilfsinfo in Wurzel.
ENTFERNE_MAX(S):
• Wurzel zeigt auf Blatt k mit größtem Wert.
• Entfene k wie in (2-4)-Bäumen üblich
• Berechne für die inneren Knoten auf dem Ast von k bis zur
Wurzel die Info neu.
• Aufwand: O(log n).
(2-4)-Bäume
[email protected]
17
Mischbare Warteschlangen
MAXIMUM(S): trivial, berichte Hilfsinfo in Wurzel.
ENTFERNE_MAX(S):
• Wurzel zeigt auf Blatt k mit größtem Wert.
• Entfene k wie in (2-4)-Bäumen üblich
• Berechne für die inneren Knoten auf dem Ast von k bis zur
Wurzel die Info neu.
• Aufwand: O(log n).
(2-4)-Bäume
[email protected]
18
Mischbare Warteschlangen
EINFÜGE(S, x): Wie einfügen in (2-4)-Baum (aber unsortiert).
MISCHE(S, S‘):
• Fall h = h‘:
Neue Wurzel mit entsprechender Info.
O(1) Zeit.
(2-4)-Bäume
[email protected]
19
Mischbare Warteschlangen
MISCHE(S, S‘):
• Fall h > h‘ (h < h‘ analog):
Sei k der rechteste Knoten von T mit Höhe h‘.
Anhängen von w‘ and Vater von v von k.
Wenn α(v) = 5: SPALTEN von v, evt. weiter nach oben spalten wie
beim Einfügen in (2-4)-Baum (+ Info updaten).
Aufwand: O(log n)
(2-4)-Bäume
[email protected]
20
Herunterladen