Grundlagen: Algorithmen und Datenstrukturen

Werbung
Grundlagen: Algorithmen und Datenstrukturen
Prof. Dr. Hanjo Täubig
Lehrstuhl für Effiziente Algorithmen
(Prof. Dr. Ernst W. Mayr)
Institut für Informatik
Technische Universität München
Sommersemester 2010
H. Täubig (TUM)
GAD
SS’10
1 / 320
Suchstrukturen
Übersicht
1
Suchstrukturen
(a, b)-Bäume
H. Täubig (TUM)
GAD
SS’10
295 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
remove(k )
Abstieg wie bei locate(k ) bis Element e in Liste erreicht
falls key(e) = k , entferne e aus Liste (sonst return)
e’
H. Täubig (TUM)
e
GAD
e’’
∞
SS’10
296 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
remove(k )
Abstieg wie bei locate(k ) bis Element e in Liste erreicht
falls key(e) = k , entferne e aus Liste (sonst return)
e’
H. Täubig (TUM)
e’’
GAD
∞
SS’10
297 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
remove(k )
entferne Handle auf e und Schlüssel k vom Baumknoten v über e
(wenn e rechtestes Kind: Schlüsselvertauschung wie bei binärem
Suchbaum)
falls d(v) ≥ a, dann fertig
v
v
... x k y ...
... x y ...
x
k
y
x
y
e’
e
e’’
e’
e’’
H. Täubig (TUM)
GAD
SS’10
298 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
remove(k )
falls d(v) < a und ein direkter Nachbar v 0 von v hat Grad > a,
nimm Kante von v 0 (Bsp.: a = 2, b = 4)
u
k
t
y
r
u
y
t
v
x
y
H. Täubig (TUM)
r
s
s
x
t
x
GAD
r
y
r
s
s
t
SS’10
299 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
remove(k )
falls d(v) < a und kein direkter Nachbar von v hat Grad > a,
merge v mit Nachbarn (Bsp.: a = 3, b = 5)
u
y
t
u
t
y
r
v
x
x
r
y
H. Täubig (TUM)
r
s
s
x
t
x
GAD
y
r
s
s
t
SS’10
300 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
remove(k )
Veränderungen hoch bis Wurzel
falls Grad der Wurzel < 2: entferne Wurzel
neue Wurzel wird das einzige Kind der alten Wurzel
x
H. Täubig (TUM)
y
z
x
GAD
y
z
SS’10
301 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(10)
10 19
1
1
3
H. Täubig (TUM)
3
5
5
14
10
14
GAD
28
19
28
∞
SS’10
302 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(10)
10 19
1
1
3
H. Täubig (TUM)
3
5
5
14
10
14
GAD
28
19
28
∞
SS’10
303 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(10)
5
1
1
H. Täubig (TUM)
19
3
3
14
5
14
GAD
28
19
28
∞
SS’10
304 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(14)
5
1
1
H. Täubig (TUM)
19
3
3
14
5
14
GAD
28
19
28
∞
SS’10
305 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(14)
5
1
1
H. Täubig (TUM)
19
3
3
28
5
19
GAD
28
∞
SS’10
306 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(14)
3
5
1
1
H. Täubig (TUM)
19
3
5
28
19
GAD
28
∞
SS’10
307 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(3)
3
1
1
H. Täubig (TUM)
19
28
5
3
5
19
GAD
28
∞
SS’10
308 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(3)
1
19
5
1
H. Täubig (TUM)
5
28
19
GAD
28
∞
SS’10
309 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(3)
19
1
1
H. Täubig (TUM)
5
5
28
19
GAD
28
∞
SS’10
310 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(1)
19
1
1
H. Täubig (TUM)
5
5
28
19
GAD
28
∞
SS’10
311 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(1)
19
5
5
H. Täubig (TUM)
28
19
28
GAD
∞
SS’10
312 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(19)
19
5
5
H. Täubig (TUM)
28
19
28
GAD
∞
SS’10
313 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(19)
5
28
5
H. Täubig (TUM)
28
GAD
∞
SS’10
314 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(19)
5
5
H. Täubig (TUM)
28
28
GAD
∞
SS’10
315 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
a = 2, b = 4
remove(19)
5
5
H. Täubig (TUM)
28
28
GAD
∞
SS’10
316 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum / remove
Form-Invariante
durch remove erfüllt:
alle Blätter haben dieselbe Tiefe
Grad-Invariante
remove verschmilzt Knoten, die Grad a − 1 und a haben
wenn b ≥ 2a − 1, dann ist der resultierende Grad ≤ b
remove verschiebt eine Kante von Knoten mit Grad > a zu Knoten
mit Grad a − 1, danach sind beide Grade in [a, b]
wenn Wurzel gelöscht, wurden vorher die Kinder verschmolzen,
Grad vom letzten Kind ist also ≥ a (und ≤ b)
H. Täubig (TUM)
GAD
SS’10
317 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
Weitere Operationen:
min / max-Operation
verwende first / last-Methode der Liste, um das kleinste bzw.
größte Element auszugeben
Zeit:
O(1)
Bereichsanfragen
suche alle Elemente im Bereich [x, y]:
I
I
Zeit:
führe locate(x) aus und
durchlaufe die Liste, bis Element > y gefunden wird
O(log n + Ausgabegröße)
H. Täubig (TUM)
GAD
SS’10
318 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
Weitere Operationen:
Konkatenation
verknüpfe zwei (a, b)-Bäume T1 und T2 mit s1 und s2 Elementen
zu (a, b)-Baum T
(Schlüssel in T1 ≤ Schlüssel in T2 )
+
T1
H. Täubig (TUM)
=
T2
GAD
T
SS’10
319 / 320
Suchstrukturen
(a, b)-Bäume
(a, b)-Baum
Weitere Operationen:
Konkatenation
lösche in T1 das ∞-Dummy-Element
wenn danach dessen Vater-Knoten < a Kinder hat, behandle dies
wie bei remove
verschmelze die Wurzel des niedrigeren Baums mit einem
entsprechenden äußersten Knoten des anderen Baums, der sich
auf dem gleichen Level befindet
wenn dieser Knoten danach > b Kinder hat, behandle dies wie bei
insert
Zeit:
O(log max{s1 , s2 }) ∈ O(s1 + s2 )
wenn man die Höhe der Bäume explizit speichert, kann man
concatenate sogar mit Zeit O(1 + |h1 − h2 |) implementieren
H. Täubig (TUM)
GAD
SS’10
320 / 320
Herunterladen