13 (2-4)

Werbung
13
(2-4)-Bäume
(2-4)-Bäume sind durch folgende Eigenschaften deniert:
1. Alle Äste sind gleich lang
2. Die Ordnung (maximale Anzahl der Söhne eines Knotens) ist gleich 4
3. Innere Knoten haben
≥
2 Söhne
4. Die Blätter enhalten von links nach rechts die Werte aufsteigend sortiert
5. Jeder innere Knoten mit
tionen
x1 , ..., xt−1
wobei
t Söhnen (2 ≤ t ≤ 4) speichert t − 1 Hilfsinformaxi = gröÿter Wert im Teilbaum des i-ten Sohnes
von links
Dadurch kann eine logarithmische Höhe garantiert werden (13.2).
Beispiel eines (2,4)-Baums:
Weiters wird die Ordnung
α(k)
eines Knotens
k
als die Anzahl der Söhne de-
niert.
13.1
Implementierbare Funktionen
Die Funktionen SUCHEN, EINFÜGEN und ENTFERNEN entsprechen dem
Wörterbuchproblem. Man kann mithilfe von (2,4)-Bäumen das Wörterbuchproblem bestehende aus
n
Elementen in
O(log n)
pro Funktion und
S(n) = Θ(n)
Speicher lösen.
13.1.1
Suchen in (2-4)-Bäumen
Mit Hilfe der Information in den inneren Knoten kann von der Wurzel ausgehend
nach unten der entsprechende Wert gesucht werden. Pro Knoten benötigt der
O(1). Die gesamte
T (n) = Θ(h) = Θ(log n)
Suchprozess eine konstante Zeit
der Höhe des Baumes ab:
1
Laufzeit hängt direkt von
13.1.2
Einfügen in (2-4)-Bäumen
Zuerst wird der richtige Knoten gesucht und dort das neue Element eingefügt.
Dabei müssen zwei Fälle unterschieden werden:
1. Fall:
α(k) ≤ 4
nach dem Einfügen: Ergebnis ist wieder ein (2-4)-Baum
2. Fall:
α(k) = 5
nach dem Einfügen: Es liegt
kein
(2,4)-Baum vor. Es muss
eine sog. SPALT -Operation durchgeführt werden, um wieder einen (2,4)Baum zu erhalten.
SPALTEN: Der Knoten
k.
von
k erhält einen Bruderknoten k 0
unmittelbar rechts
Dabei werden die zwei rechtesten (gröÿten) Söhne von
k
auf
k0
umgehängt.
Bemerkung: Dabei muss die SPALT -Operation auch potentiell öfters durchgeführt werden (siehe
v, v 0 ),
maximal aber nur logarithmisch oft:
T (n) = O(h) =
O(log n).
13.1.3
Entfernen in (2-4)-Bäumen
Auch hier wird zuerst der entsprechende Knoten gesucht. Nach dem Entfernen
muss man wieder zwei Fälle unterscheiden:
1. Fall:
α(k) ≥ 2
2. Fall:
α(k) = 1
nach dem Entfernen: Ergebnis ist wieder ein (2-4)-Baum.
nach dem Entfernen: Es liegt nun
kein
(2,4)-Baum mehr
vor. Es muss entweder eine STEHL- oder eine VERSCHMELZUNGS Operation durchgeführt werden, um wieder einen (2,4)-Baum zu erhalten.
Sei
k0
(a)
(b)
ein direkter Bruder von
α(k 0 ) ≥ 3,
0
α(k ) = 2,
k
dann muss man einen Sohn von
dann muss
k
mit
k
2
0
k0
STEHLEN
VERSCHMOLZEN werden
Bemerkung: Auch hier muss die VERSCHMELZUNGS -Operation auch potentiell öfters durchgeführt werden, maximal aber nur logarithmisch oft:
T (n) =
O(h) = O(log n).
13.2
Beweis der logarithmischen Höhe
Alle erwähnten Funktionen können im schlimmsten Fall mit
O(h)
durchgeführt
werden. Die Datenstruktur (2-4)-Bäume garantiert eine logarithmische Höhe
(d.h. die Höhe hängt logarithmisch von der Datenmenge
n
h
ab).
Beweis:
2h ≤
≤ 4h = 22h
n
h ≤ log2 n
Also kann man die Höhe
h
≤ 2h
abschätzen mit
log2 n
≤ h ≤ log2 n
2
was der Denition der
13.3
Θ-Notation
entspricht:
h = Θ (log n).
Beweis des linearen Speichers
Im Unterschied zum Binärbaum, bei dem jeder Knoten (auch innere Knoten)
einen Wert speichert, sind in (2-4)-Bäumen die Werte blattorientiert, d.h. ausschlieÿlich in den Blättern gespeichert, während die inneren Knoten nur Hilfsinformationen speichern. Trotz dieses zusätzlichen Speicheraufwands ist der Speicherverbrauch linear in der Anzahl der Werte (Blätter). Die maximale Anzahl
an inneren Knoten in einem (2-4)-Baum tritt auf, wenn jeder Knoten nur 2 Söhne hat. Dann gilt für den Speicherverbrauch eines (2-4)-Baumes mit
n
(Blättern)
# Knoten
≤n+
∞
X 1
X
n n
1
+ + ... + 1 = n
<
n
= 2n.
i
2
4
2
2i
i=0
i≥0
Es gilt also
S(n) = Θ(n).
3
Werten
13.4
Anwendung: Mischbare Warteschlangen
Eine Anwendung der (2-4)-Bäume sind sogenannte mischbare Warteschlangen,
die im Gegensatz zu den Warteschlangen mit Prioritäten (siehe Kapitel Halde ), zu den drei Funktionen EINFÜGEN(S,x), MAXIMUM(S) und ENTFERNE_MAX(S) auch noch die Funktion MISCHE(S,S') implementiert.
Die Struktur des (2-4)-Baums für mischbare Warteschlangen ist die folgende: Die
Blätter speichern
S
in beliebiger Reihenfolge und jeder innere Knoten speichert
das Maximum seines Teilbaums, plus einen Zeiger, der auf das entsprechende
Maximum-Blatt zeigt.
Alle 4 Funktionen EINFÜGEN, MAXIMUM, ENTFERNE_MAX und MISCHEN
können damit in
13.5
O(log n)
1
implementiert werden .
Sortieren mit (2-4)-Bäumen
Sortieren mit (2-4)-Bäumen besitzt den Vorteil sowohl worst-case optimal als
auch adaptiv zu sein. Die inneren Knoten des (2-4)-Baums besitzen dabei nur die
Information des Maximums des jeweiligen Teilbaums. Die Idee beruht darauf in
einen anfangs leeren (2-4)-Baum die Werte einzufügen. Folgende Schritte werden
durchgeführt (bottom-up):
•
Man startet mit dem Blatt ganz links (das aktuelle Minimum)
•
Man läuft bis zur Wurzel
der
•
w0
des Teilbaums
T 0 (w0
x
und man macht
Man läuft von
w0
zu Blatt
ai
wählt immer den ersten Teilbaum von links mit
1 Eine
O(n)
ist der erste Knoten,
> ai )
Implementierung mit der Datenstruktur
möglich machen.
4
Halde
zum linken Bruder (man
w(T B) > ai )
würde das Mischen nur teuer mit
Bemerkung: Es sind potentiell logarithmisch viele SPALT -Operationen durchzuführen. Wie aber gezeigt werden kann, amortisieren sich diese im Laufe des
Sortiervorgangs.
13.5.1
Analyse des Sortierens mit (2,4)-Bäumen
Dazu benötigt man ein Maÿ für die Unsortierheit einer Folge ( 'Die Anzahl der
Fehlstände), welches folgendermaÿen deniert ist:
Sei
ai
a1 , a2 , ..., an
eine (unsortierte) Zahlenfolge.
, d.h. Anzahl der Zahlen die rechts von
ai
fi
= Anzahl der Fehlstände für
stehen und aber kleiner als
ai
sind.
fi = |{aj | j > i , aj < ai }|
Die Summe aller Fehlstände
F
ist dann ein Maÿ der Unsortiertheit der Zahlen-
folge:
F =
n
X
fi
i=1
Die Laufzeit
T (n)
beim Einfügen des
beträgt mit
i-ten
si = Anzahl
ai :
der nötigen SPALT -Operationen
Elements
T (n) = O
n
X
!
(log fi + si )
i=1
Mit der obigen Denition, der Abschätzung aus der Amoritisierungsanalyse
Pn
n
3
i=1 si ≤ 2 n und der Abschätzung
· log Fn erhält man für die Laufzeit:
Pn
i=1
log fi = log Πni=1 fi ≤ log
F
T (n) = O n · log + n
n
5
F n
n
=
Herunterladen