Definition 176
Der Binomialbaum B
0besteht aus genau einem Knoten.
Den Binomialbaum B
k, k ≥ 1, erh¨ alt man, indem man die Wurzel eines B
k−1zu einem zus¨ atzlichen Kind der Wurzel eines zweiten B
k−1macht.
B
0B
1B
2B
3ADS-EI 4 Vorrangwarteschlangen (priority queues) 367/451
ľErnst W. Mayr
Rekursiver Aufbau des Binomialbaums B
k(rekursive Verfolgung des rechten Zweigs) B
kB
k−1B
k−1. . .
B
k−1B
k−2B
2B
1B
0B
kRekursiver Aufbau des Binomialbaums B
k(rekursive Verfolgung des linken Zweigs)
B
kB
k−1B
k−1B
kB
k−1B
k−2B
1B
0B
0ADS-EI 4 Vorrangwarteschlangen (priority queues) 369/451
ľErnst W. Mayr
Satz 177
F¨ ur den Binomialbaum B
k, k ≥ 0, gilt:
1
er hat H¨ ohe k und enth¨ alt 2
kKnoten;
2
er enth¨ alt genau
kiKnoten der Tiefe i, f¨ ur alle i ∈ {0, . . . , k};
3
seine Wurzel hat k Kinder, alle anderen Knoten haben < k Kinder.
Beweis:
Der Beweis ergibt sich sofort aus dem rekursiven Aufbau des B
kund der Rekursionsformel k
i
=
k − 1 i
+
k − 1 i − 1
f¨ ur Binomialkoeffizienten.
Definition 178
Ein Binomial Heap ist eine Menge H von Binomialb¨ aumen, wobei jedem Knoten v ein Schl¨ ussel key(v) zugeordnet ist, so dass folgende Eigenschaften gelten:
1
jeder Binomialbaum ∈ H erf¨ ullt die Heap-Bedingung und ist ein min-Heap:
(∀ Knoten v, w)[v Vater von w ⇒ key(v) ≤ key(w)]
2
H enth¨ alt f¨ ur jedes k ∈ N
0h¨ ochstens einen B
kADS-EI 4 Vorrangwarteschlangen (priority queues) 371/451
ľErnst W. Mayr
F¨ ur jeden Binomial Heap H gilt also
1
Enth¨ alt H n Schl¨ ussel, n ∈ N , so besteht H h¨ ochstens aus max{1, dld ne} Binomialb¨ aumen.
2
In jedem von H’s Binomialb¨ aumen ist ein kleinster Schl¨ ussel an der Wurzel gespeichert; verlinkt man daher die Wurzeln aller Binomialb¨ aume von H in einer zirkul¨ aren Liste, kann ein minimaler Schl¨ ussel in H durch einfaches Durchlaufen dieser Liste gefunden werden.
Korollar 179
In einem Binomial Heap mit n Schl¨ usseln ben¨ otigt FindMin Zeit
O(log n).
Wir betrachten nun die Realisierung der Union-Operation. Hierbei wird vorausgesetzt, dass die Objektmengen, zu denen die Schl¨ ussel in den beiden zu verschmelzenden Binomial Heaps H
1und H
2geh¨ oren, disjunkt sind. Es ist jedoch durchaus m¨ oglich, dass der gleiche Schl¨ ussel f¨ ur mehrere Objekte vorkommt.
1. Fall H
1und H
2enthalten jeweils nur einen Binomialbaum B
k(mit dem gleichen Index k):
In diesem Fall f¨ ugen wir den B
k, dessen Wurzel den gr¨ oßeren Schl¨ ussel hat, als neuen Unterbaum der Wurzel des anderen B
kein, gem¨ aß der rekursiven Struktur der Binomialb¨ aume. Es entsteht ein B
k+1, f¨ ur den per Konstruktion weiterhin die Heap-Bedingung erf¨ ullt ist.
ADS-EI 4 Vorrangwarteschlangen (priority queues) 373/451
ľErnst W. Mayr
2. Fall Sonst. Sei H
1= {B
i1; i ∈ I
1⊂ N
0} und sei H
2= {B
i2; i ∈ I
2⊂ N
0}.
Wir durchlaufen dann alle Indizes k ∈ [0, max{I
1∪ I
2}] in aufsteigender Reihenfolge und f¨ uhren folgende Schritte durch:
1
falls kein Binomialbaum mit Index k vorhanden ist: noop
2
falls genau ein Binomialbaum mit Index k vorhanden ist, wird dieser in den verschmolzenen Binomial Heap ¨ ubernommen
3
falls genau zwei Binomialb¨ aume mit Index k vorhanden sind, werden diese gem¨ aß dem 1. Fall verschmolzen; der
entstehende B
k+1wird im n¨ achsten Schleifendurchlauf wieder betrachtet. Dadurch kann auch der folgende Fall eintreten!
4
falls genau drei Binomialb¨ aume mit Index k vorhanden sind, wird einer davon in den verschmolzenen Binomial Heap
¨
ubernommen; die beiden anderen werden gem¨ aß dem 1. Fall
verschmolzen; der entstehende B
k+1wird im n¨ achsten
Schleifendurchlauf wieder betrachtet.
Man beachte, dass nie mehr als 3 Binomialb¨ aume mit gleichem Index auftreten k¨ onnen!
Bemerkung:
Es besteht eine einfache Analogie zur Addition zweier Bin¨ arzahlen, wobei das Verschmelzen zweier gleich großer Binomialb¨ aume dem Auftreten eines Ubertrags ¨ entspricht!
Lemma 180
Die Union-Operation zweier Binomial Heaps mit zusammen n Schl¨ usseln kann in Zeit O(log n) durchgef¨ uhrt werden.
ADS-EI 4 Vorrangwarteschlangen (priority queues) 375/451
ľErnst W. Mayr
Die Operation Insert(H, k):
1
erzeuge einen neuen Binomial Heap H
0= {B
0} mit k als einzigem Schl¨ ussel
2
H := Union(H, H
0)
Falls H n Schl¨ ussel enth¨ alt, betr¨ agt die Laufzeit der
Insert-Operation offensichtlich O(log n).
Die Operation ExtractMin(H):
1
durchlaufe die Liste der Wurzeln der Binomialb¨ aume in H und finde den/einen Baum mit minimaler Wurzel
2
gib den Schl¨ ussel dieser Wurzel zur¨ uck
3
entferne diesen Binomialbaum aus H
4
erzeuge einen neuen Binomial Heap H
0aus den Unterb¨ aumen der Wurzel dieses Baums
5
H := Union(H, H
0)
Falls H n Schl¨ ussel enth¨ alt, betr¨ agt die Laufzeit der ExtractMin-Operation offensichtlich O(log n).
ADS-EI 4 Vorrangwarteschlangen (priority queues) 377/451
ľErnst W. Mayr
Die Operation DecreaseKey(H, v, k) (diese Operation ersetzt, falls k < key(v), key(v) durch k):
1
sei B
ider Binomialbaum in H, der den Knoten v enth¨ alt
2
falls k < key(v), ersetze key(v) durch k
3
stelle, falls n¨ otig, die Heap-Bedingung auf dem Pfad von v zur Wurzel von B
iwieder her, indem, solange n¨ otig, der Schl¨ ussel eines Knotens mit dem seines Vaters ausgetauscht wird Falls H n Schl¨ ussel enth¨ alt, betr¨ agt die Laufzeit der
DecreaseKey-Operation offensichtlich O(log n).
5. Union/Find-Datenstrukturen
5.1 Motivation
'
&
$
% '
&
$
%
'
&
$
%
r r r
r r r r
r r r r
- 3 6
Union(T
1, T
2): Vereinige T
1und T
2T
1∩ T
2= ∅ Find(x): Finde den
Repr¨ asentanten der (gr¨ oßten) Teilmenge, in der sich x gerade befindet.
ADS-EI 5.1 Motivation 379/451
ľErnst W. Mayr
5.2 Union/Find-Datenstruktur 5.2.1 Intrees
1
Initialisierung: x → •x: Mache x zur Wurzel eines neuen (einelementigen) Baumes.
2
Union(T
1, T
2):
r
@ T
1@
r
@
T
2@ ⇒ r
@ T
2@
r
@ T
1@ 1
3
Find : Suche Wurzel des Baumes, in dem sich x befindet.
Bemerkung: Naive Implementation: worst-case-Tiefe = n Zeit f¨ ur Find = Ω(n)
Zeit f¨ ur Union = O(1)
5.2.2 Gewichtete Union (erste Verbesserung)
Mache die Wurzel des kleineren Baumes zu einem Kind der Wurzel des gr¨ oßeren Baumes. Die Tiefe des Baumes ist dann O(log n).
Zeit f¨ ur Find = O(log n) Zeit f¨ ur Union = O(1)
Es gilt auch: Tiefe des Baumes im worst-case:
Ω(log n)
ADS-EI 5.2 Union/Find-Datenstruktur 381/451
ľErnst W. Mayr
5.2.3 Pfad-Kompression mit gewichteter Union (zweite Verbesserung)
Wir betrachten eine Folge von k Find- und Union-Operationen auf
einer Menge mit n Elementen, darunter n − 1 Union.
Implementierung: Gewichtete Union f¨ ur Pfad-Kompression:
@
@ I
@
@ I
@
@ I
s s
s s
s s
s s
e c
b d a
y x
z
@
@ I
@
@ s I
s s
s s
s C
B D A
E
Union
⇒
@
@ I
@
@ I
@
@ I
s s
s s
s s
s s
e c
b d a
y z
x
@
@ I
@
@ I X X X X X X X X y
s s
s s
s C
B D A
E
ADS-EI 5.2 Union/Find-Datenstruktur 383/451
ľErnst W. Mayr
Implementierung: Find f¨ ur Pfad-Kompression:
@
@ @
@
@ @
Q Q Q Q
Q Q Q Q
@
@ @ I
@
@ @ I
@
@ @ I
3
A A A K
A A A K
Q Q Q Q k
t
t t
t t
t t
t
t t
t
t t
t t t
e
c d
a b
y z
x
a y
d
b z
e c x
Find(c)
(Pfadkompression) ⇒
Bemerkung:
Nach Definition ist
log
∗n = min{i ≥ 0; log log log . . . log n
| {z }
i log’s
≤ 1}
Beispiel 181
log
∗0 = log
∗1 = 0 log
∗2 = 1
log
∗3 = 2
log
∗16 = 3 da 16 = 2
22log
∗2
65536= 5 da 2
65536= 2
2222
ADS-EI 5.2 Union/Find-Datenstruktur 385/451
ľErnst W. Mayr
Satz 182
Bei der obigen Implementierung ergibt sich eine amortisierte Komplexit¨ at von O(log
∗n) pro Operation.
Beweis:
(der Vollst¨ andigkeit halber, geh¨ ort nicht zum Vorlesungsstoff!) Sei T
0der (endg¨ ultige) In-Baum, der durch die Folge der Union’s, ohne die Find ’s, entstehen w¨ urde (also keine Pfad-Kompression).
Ordne jedem Element x drei Werte zu:
rank(x):= H¨ ohe des Unterbaums in T
0mit Wurzel x class(x):=
i ≥ 1 falls a
i−1< rank(x) ≤ a
iist (i ≥ 1) 0 falls rank(x) = 0
Dabei gilt: a
0= 0, a
i= 2
2..2 i 20en
f¨ ur i ≥ 1.
Setze zus¨ atzlich a
−1:= −1.
* *
* *
* *
H H H Y
H H H Y
t
t t t t t t
t t
0 1
2 3
4 5
6 0
0
X X X y
X X X y
X X X y
XX X z class 1
class 2
class 3
class 0
p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p
p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p
p p p p p p p pp pp
p pp p pp pp pp p pp pp pp pp pp pp pp pp pp
ADS-EI 5.2 Union/Find-Datenstruktur 387/451
ľErnst W. Mayr
Beweis (Forts.):
dist(x) ist die Distanz von x zu einem Vorfahr y im
momentanen Union/Find-Baum (mit Pfad-Kompression), so dass class(y) > class(x) bzw. y die Wurzel des Baumes ist.
Definiere die Potenzialfunktion Potenzial := c X
x
dist(x), c eine geeignete Konstante > 0
Beweis (Forts.):
Beobachtungen:
i) Sei T ein Baum in der aktuellen Union/Find-Struktur (mit Pfad-Kompression), seien x, y Knoten in T, y Vater von x.
Dann ist class(x) ≤ class(y).
ii) Aufeinander folgende Find(x) durchlaufen (bis auf eine) verschiedene Kanten. Diese Kanten sind (im wesentlichen) eine Teilfolge der Kanten in T
0auf dem Pfad von x zur Wurzel.
ADS-EI 5.2 Union/Find-Datenstruktur 389/451
ľErnst W. Mayr
Beweis (Forts.):
Amortisierte Kosten Find(x):
Sei x
0→ x
1→ x
2. . . x
k= r der Pfad von x
0zur Wurzel. Es gibt h¨ ochstens log
∗n-Kanten (x
i−1, x
i) mit class(x
i−1) < class(x
i). Ist class(x
i−1) = class(x
i) und i < k (also x
i6= r), dann ist
dist(x
i−1) vor der Find(x)-Operation ≥ 2, nachher gleich 1.
Damit k¨ onnen die Kosten f¨ ur alle Kanten (x
i−1, x
i) mit class(x
i−1)
= class(x
i) aus der Potenzialverringerung bezahlt werden. Es ergeben sich damit amortisierte Kosten
O(log
∗n)
Beweis (Forts.):
Amortisierte Gesamtkosten aller (n − 1)-Union’s:
ppppp ppppp ppppp pppppp
pppppp ppp s s r
x ppppp ppppp ppppp pppppp
pppppp ppp s r
0ppppp ppppp ppppp pppppp
pppppp ppp s s r
x pppppp
pppppp ppp s r
0⇒ T1 < T
2
T
1T
2c g
c g c g
c g c g c g
Die gesamte Potenzialerh¨ ohung durch alle Union’s ist nach oben durch das Potenzial von T
0beschr¨ ankt (Beobachtung ii).
ADS-EI 5.2 Union/Find-Datenstruktur 391/451
ľErnst W. Mayr
Beweis (Forts.):
Potenzial(T
0) ≤ c ·
log∗n
X
i=0
ai
X
rank(x)=j=ai−1+1
dist(x)
≤ c ·
log∗n
X
i=0
ai
X
rank(x)=j=ai−1+1
n 2
ja
i≤ c · n
log∗n
X
i=0
a
i1
2
ai−1= c · n
log∗n
X
i=0
1
= O(n log
∗n) .
Die zweite Ungleichung ergibt sich, da alle Unterb¨ aume, deren
Wurzel x rank(x) = j hat, disjunkt sind und jeweils ≥ 2
jKnoten
enthalten.
6. Traversierung von Graphen
Sei G = (V, E) ein ungerichteter Graph. Anhand eines Beipiels betrachten wir die zwei Algorithmen DFS (Tiefensuche) und BFS (Breitensuche).
ADS-EI 6 Traversierung von Graphen 393/451
ľErnst W. Mayr
6.1 DFS-Algorithmus
while ∃ unvisited v do
r := pick (random) unvisited node push r onto stack
while stack 6= ∅ do v := pop top element if v unvisited then
mark v visited
push all neighbours of v onto stack perform operations DFS Ops(v) fi
od
od
Beispiel 183
A A
A
A @
@
@
@
A
A A
A @
@
@
@
A A
A A
U - 6
@
@
@
@ I
? * 1 g
2 g
3 g
4 g 5 g 6 g
7 g
8 g
9 g 1 t
2 t
3 t
4 t 5 t
t 6 t 7 8 t
9 t B
B B
B B
B Q
Q Q
Q Q
Q B
B B
B B
B Q
Q Q
Q Q
Q
H H H H
ADS-EI 6.1 DFS-Algorithmus 395/451
ľErnst W. Mayr
Beobachtung: Die markierten Kanten bilden einen Spannbaum:
A A
A
A @
@
@
@
A A
A
A @
@
@
@
A A
A A
U - 6
@
@
@
@ I
? * 1 g
2 g
3 g
4 g 5 g 6 g
7 g
8 g
9 g 1 t
2 t
3 t
4 t 5 t
t 6 t 7 8 t
9 t B
B B
B B
B Q
Q Q
Q Q
Q B
B B
B B
B Q
Q Q
Q Q
Q H H H H
R¨ uckw¨ artskante
9 g 8 g 6 g 7 g
5 g 4 g 3 g 2 g
1 g
@
@
s s
s s
s
s
s
s
s
Folge der Stackzust¨ ande
1 2
8 7
3 9 8 1 8 7
4 9 2 9 8 1 8 7
5 3 9 2 9 8 1 8 7
9 8 6 4 3 9 2 9 8 1 8 7
2 3 5 8 6 4 3 9 2 9 8 pp ppppp 1
7 6 5 2 1 6 4 3 9 2 9 pp ppppp 8
6 8 1 6 5 2 1 6 4 3 9 pp ppppp 2
7 8 5 8 1 6 5 2 1 6 4 pp ppppp 3 h h
h
h h h h h h h h h h h h 6 6
h
? ? ? ? ? ? ? ? ? visited visited
Stack:
: oberstes Stackelement : schon besuchte Knoten
: Nachbarn Zustand:
a) b) c) d) e) f)
g)
h) i) j)
ADS-EI 6.1 DFS-Algorithmus 397/451
ľErnst W. Mayr