5. Vorrangwarteschlangen - Priority Queues Priority Queues unterst¨ utzen die Operationen
Insert(), Delete(), ExtractMin(), FindMin(), DecreaseKey(), Merge().
Priority Queues per se sind
nichtf¨ ur IsElement()-Anfragen, also zum
Suchengeeignet. Falls ben¨ otigt, muss daf¨ ur eine passende W¨ orterbuch-Datenstruktur parallel mitgef¨ uhrt werden.
EADS 5 Vorrangwarteschlangen - Priority Queues 154/598
ľErnst W. Mayr
5.1 Binomial Queues (binomial heaps)
Binomialwarteschlangen (Binomial Queues/Binomial Heaps) werden mit Hilfe von
Binomialb¨aumenkonstruiert.
Definition 40
Die Binomialb¨ aume B
n, n
≥0, sind rekursiv wie folgt definiert:
Bn−1
Bn−1
B
0B
1B
2B
nAchtung:
Binomialb¨ aume sind offensichtlich
keineBin¨ arb¨ aume!
Lemma 41
Ein B
nl¨ asst sich wie folgt zerlegen:
B
n−1B
n−2B
n−3B
1B
0Erste Zerlegung von B
n:
der Breite nachEADS 156/598
ľErnst W. Mayr
Lemma 41
Ein B
nl¨ asst sich wie folgt zerlegen:
B
0B
0B
1B
n−3B
n−2B
n−1R¨ uckgrat
Zweite Zerlegung von B
n:
der Tiefe nachSatz 42
F¨ ur den Binomialbaum B
ngilt:
1
B
nhat 2
nKnoten.
2
Die Wurzel von B
nhat Grad n.
3
B
nhat H¨ ohe/Tiefe n.
4
B
nhat
niKnoten in Tiefe i.
EADS 5.1 Binomial Queues (binomial heaps) 157/598
ľErnst W. Mayr
Beweis:
zu 1: Induktion unter Verwendung der Definition zu 2: Siehe
erste Zerlegungvon Binomialb¨ aumen zu 3: Siehe
zweite Zerlegungvon Binomialb¨ aumen zu 4: Induktion ¨ uber n:
(I) n= 0:B0hat 1 Knoten in Tiefei= 0und0Knoten in Tiefe i >0, also 0i
Knoten in Tiefei.
(II) IstNin die Anzahl der Knoten in Tiefeiim Bn, so gilt unter der entsprechenden Induktionsannahme f¨urBn, dass
Nin+1=Nin+Ni−1n =
n
i
+
n
i−1
= n+ 1
i
, woraus wiederum per Induktion die Behauptung folgt.
Bemerkung:
Eine m¨ ogliche Implementierung von Binomialb¨ aumen ist das Schema
” Pointer zum
erstenKind und Pointer zum
n¨achstenGeschwister“.
EADS 5.1 Binomial Queues (binomial heaps) 159/598
ľErnst W. Mayr
Definition 43
Eine
Binomial Queuemit n Elementen wird wie folgt aufgebaut:
1
Betrachte die Bin¨ ardarstellung von n.
2
F¨ ur jede Position i mit einem 1-Bit wird ein Binomialbaum B
iben¨ otigt (der 2
iKnoten hat).
3
Verbinde die (Wurzeln der) Binomialb¨ aume in einer doppelt verketteten zirkul¨ aren Liste.
4
Beachte, dass innerhalb jedes Binomialbaums die
Heap-Bedingung erf¨ ullt sein muss. Dadurch enth¨ alt die Wurzel eines jeden Binomialbaums gleichzeitig sein minimales
Element.
5
Richte einen
Min-Pointerauf das Element in der Wurzel-Liste
mit minimalem Schl¨ ussel ein.
Beispiel 44
Beispiel: n = 11 = (1011)
2: B
32 3
4
8
B
11
5
11 9
10
6
B
07
min
EADS 5.1 Binomial Queues (binomial heaps) 161/598
ľErnst W. Mayr
Operationen f¨ ur Binomial Queues:
IsElement : Die Heap-Bedingung wirkt sich nur auf die Anordnung der Datenelemente innerhalb jedes einzelnen Binomialbaums aus, regelt aber nicht, in welchem Binomialbaum ein gegebenes Element gespeichert ist.
Tats¨ achlich kann ein Element in jedem der vorhandenen Binomialb¨ aume stehen. Das Suchen ist hier nicht effizient implementierbar, denn im worst-case m¨ usste jedes Element der Binomialb¨ aume angeschaut werden.
Also w¨ aren zum Suchen eines Elements schlimmstenfalls 2
0+ 2
1+
· · ·+ 2
blognc−1= Θ(n) Elemente zu betrachten.
Daher wird eine gesonderte Datenstruktur, etwa ein
Suchbaum, f¨ ur die IsElement-Operation verwendet. Damit ist
Suchen mit Zeitaufwand
O(logn) m¨ oglich.
Operationen f¨ ur Binomial Queues:
Merge: Das Vorgehen f¨ ur das Merge (disjunkte Vereinigung) zweier Binomial Queues entspricht genau der
Addition zweier Bin¨arzahlen: Ein einzelnesB
iwird ¨ ubernommen, aus zwei B
i’s wird ein B
i+1konstruiert. Damit die Heap-Bedingung erhalten bleibt, wird als Wurzel des entstehenden B
i+1die Wurzel der beiden B
imit dem kleineren Schl¨ ussel genommen.
Allerdings kann ein solcher
” Ubertrag“ dazu f¨ ¨ uhren, dass im n¨ achsten Verschmelzungsschritt drei B
i+1zu verschmelzen sind. Dann wird unter Beachtung obiger Regel ein B
i+2gebildet und einer der B
i+1unver¨ andert ¨ ubernommen.
EADS 5.1 Binomial Queues (binomial heaps) 163/598
ľErnst W. Mayr
Algorithmus:
for i := 0, 1, 2, 3, . . . do if (∃ genau 3 B
is) then
verbinde zwei der B
i’s zu einem B
i+1und behalte das dritte B
ielif (∃ genau 2 B
is) then verbinde sie zu einem B
i+1elif (∃ genau ein B
i) then
¨ ubernimm es fi
od
Zeitkomplexit¨ at:
O(log
n) =
O(log(n1+ n
2))
Operationen f¨ ur Binomial Queues:
Insert: Die Insert-Operation wird einfach durch eine Merge-Operation mit einem B
0implementiert.
Beispiel 45
1 0 0 1 0 1 1 1
(B
7) (B
4) (B
2) (B
1) (B
0) 1
1 0 0 1 1 0 0 0
Zeitkomplexit¨ at:
O(logn)
EADS 5.1 Binomial Queues (binomial heaps) 165/598
ľErnst W. Mayr
Operationen f¨ ur Binomial Queues:
Initialisierung einer BQ durch n sukzessive Insert-Operationen:
Hier erg¨ abe die obige Absch¨ atzung einen Gesamtaufwand von
O(nlog n), was allerdings schlecht abgesch¨ atzt ist.
Wir sind an den Kosten zum sukzessiven Aufbau einer Binomial Queue mit n Elementen interessiert, die ¨ ubrigens identisch sind zum Aufwand f¨ ur das bin¨ are Z¨ ahlen von 0 bis n, wenn jeder Z¨ ahlschritt und jeder ¨ Ubertrag jeweils eine Zeiteinheit kosten:
0 + 1
| {z }
1
+1
| {z }
2Schritte
+1
| {z }
1
+1
| {z }
3
+1
| {z }
1
Sei a
ndie Anzahl der Schritte (Einf¨ ugen des neuen Elements und anschließende Verschmelzungen) beim Mergen eines Knotens zu einer Queue mit n
−1 Elementen. Dann gilt f¨ ur a
n:
n a
n1 1 2 2 . . . 4 1 3 . . . 8 1 2 1 4
. . . 16 1 2 1 3 1 2 1 5
. . . 32 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 Man erkennt sofort, dass jede Zeile (außer den beiden ersten) doppelt so lange ist wie die vorhergehende und dabei die Folge aller vorhergehenden Zeilen enth¨ alt, wobei das letzte Element noch um eins erh¨ oht ist.
EADS 5.1 Binomial Queues (binomial heaps) 167/598
ľErnst W. Mayr
Damit ergibt sich f¨ ur den Gesamtaufwand der sukzessiven Erzeugung einer Binomial Queue mit n Elementen
T
n=
n
X
i=1
a
i≤
n +
jn 2
k+
jn 4
k+
jn 8
k+
· · ·≤
2n .
Operationen f¨ ur Binomial Queues:
FindMin: Diese Operation ist trivial ausf¨ uhrbar, denn es ist ein Pointer auf das minimale Element gegeben.
Zeitkomplexit¨ at:
O(1)EADS 5.1 Binomial Queues (binomial heaps) 169/598
ľErnst W. Mayr
Operationen f¨ ur Binomial Queues:
ExtractMin:Das Minimum ist auf Grund der Heapbedingung Wurzel eines Binomialbaums B
kin der Liste. Wird es gel¨ oscht, so zerf¨ allt der Rest in k Teilb¨ aume B
0, B
1, . . . , B
k−1:
B
k&
k Kinder B
0, B
1, . . . , B
k−1Die Teilb¨ aume B
0, B
1, . . . , B
k−1sind alle zur verbleibenden Queue zu mergen. Außerdem muss der Min-Pointer
aktualisiert werden.
Der Zeitaufwand f¨ ur die ExtractMin-Operation ist daher:
O(log
n)
Operationen f¨ ur Binomial Queues:
Delete : L¨ osche Knoten x:
1. Fall: xist Min-Wurzel: s.o.
2. Fall: xist eine andere Wurzel in der Wurzelliste. Analog zu oben, ohne den Min-Pointer zu aktualisieren.
3. Fall: xist nicht Wurzel eines Binomialbaumes.
EADS 5.1 Binomial Queues (binomial heaps) 171/598
ľErnst W. Mayr
Angenommen, x ist in einem B
kenthalten:
B
0B
i−1(I)
(B
i) B
i-
(III) (B
iohne x) B
i+1B
k−3(II) (B
i+1, . . . ,B
k−1)
B
k−2B
k−1B
kEs ergeben sich im 3. Fall folgende Unterf¨ alle:
(3a)
x ist Wurzel von B
i:
B
ix B
0,B
1, . . . ,B
i−1Verfahre wie im 2. Fall.
(3b)
x ist nicht Wurzel des B
i:
B
ix
Wiederhole rekursiv Fall 3, bis Fall (3a) eintritt.
EADS 5.1 Binomial Queues (binomial heaps) 173/598
ľErnst W. Mayr
Insgesamt muss die Binomial Queue ohne B
kmit einer aus einer Teilmenge von
{B0, . . . , B
k−1}bestehenden Binomial Queue vereinigt werden.
Zeitkomplexit¨ at:
O(logn)
Operationen f¨ ur Binomial Queues:
DecreaseKey : Verkleinere k(x)
1. Fall: xist die Min-Wurzel: keine Struktur¨anderung n¨otig
2. Fall: xist eine andere Wurzel: keine Struktur¨anderung n¨otig, ggf.
Aktualisierung des Min-Pointers
3. Fall: Sonst wieDelete(x), aber Einf¨ugen/Merge des Baumes mit Wurzelxund dem neuen reduzierten Schl¨ussel k(x)in die Wurzelliste.
Zeitkomplexit¨ at:
O(logn)
EADS 5.1 Binomial Queues (binomial heaps) 175/598
ľErnst W. Mayr
Satz 46
Binomial Queues haben f¨ ur die Operationen Insert, Delete, ExtractMin, FindMin, Merge und Initialize jeweils
worst-case-Kosten von
O(log
n) .
Die urspr¨ ungliche Literatur zu Binomial Queues:
Jean Vuillemin:
A data structure for manipulating priority queues,
Commun. ACM21(4), pp. 309–315 (1978) Mark R. Brown:Implementation and analysis of binomial queue algorithms,
SIAM J. Comput.7(3), pp. 298–319 (1978)EADS 5.1 Binomial Queues (binomial heaps) 177/598
ľErnst W. Mayr
5.2 Fibonacci-Heaps Vorbemerkungen:
1
Fibonacci-Heaps stellen eine Erweiterung der Binomial Queues und eine weitere M¨ oglichkeit zur Implementierung von Priority Queues dar. Die
amortisiertenKosten f¨ ur die Operationen Delete() und ExtractMin() betragen hierbei
O(logn), die f¨ ur alle anderen Heap-Operationen lediglich
O(1).Nat¨ urlich k¨ onnen die worst-case-Gesamtkosten f¨ ur n Insert und n ExtractMin nicht unter Ω(n log n) liegen, denn diese Operationen zusammengenommen stellen einen
Sortieralgorithmus mit unterer Schranke Ω(n log n) dar.
Vorbemerkungen:
2
Die Verwendung von Fibonacci-Heaps erlaubt eine
Verbesserung der Komplexit¨ at der Algorithmen f¨ ur
minimale Spannb¨aumesowie f¨ ur Dijkstra’s
k¨urzeste Wege-Algorithmus,denn diese verwenden relativ h¨ aufig die
DecreaseKey -Operation, welche durch Fibonacci-Heaps billig zu implementieren ist. Bei einem Algorithmus, bei dem die Delete - und ExtractMin-Operationen nur einen geringen Anteil der Gesamtoperationen darstellen, k¨ onnen Fibonacci-Heaps asymptotisch schneller als Binomial Queues sein.
EADS 5.2 Fibonacci-Heaps 178/598
ľErnst W. Mayr
5.2.1 Die Datenstruktur
Die Schl¨ ussel sind an den Knoten von B¨ aumen gespeichert.
Jeder Knoten hat folgende Gr¨ oßen gespeichert:
Schl¨ussel und Wert
Rang (= Anzahl der Kinder)
Zeiger zum ersten Kind, zum Vater (NIL im Falle der Wurzel), zu doppelt verketteter Liste der Kinder
Markierung∈ {0,1}(außer Wurzel)
Bemerkung: Die doppelte Verkettung der Kinder- bzw.
Wurzellisten in Heaps erlaubt das L¨ oschen eines Listeneintrages in
Zeit
O(1).Binomial-Queue vs. Fibonacci-Heap:
Beide sind W¨ alder von B¨ aumen, innerhalb derer die Heap-Bedingung gilt.
a priori keine Einschr¨ ankung f¨ ur die Topologie der B¨ aume, aber ohne Delete - oder DekreaseKey-Operationen (u.¨ a.) bleibt ein Binomialwald ein Binomialwald und ein Fibonacci-Heap ein Wald aus Binomialb¨ aumen.
Fibonacci-Heaps kennen keine Invariante der Form
” Nur B¨ aume verschiedenen Wurzel-Rangs“.
Fibonacci-Heaps:
lazy merge.Fibonacci-Heaps:
lazy delete.EADS 5.2 Fibonacci-Heaps 180/598
ľErnst W. Mayr