5. Vorrangwarteschlangen (priority queues)
Definition 200
Eine Vorrangwarteschlange (priority queue) ist eine Datenstruktur, die die folgenden Operationen effizient unterst¨ utzt:
1
Insert
2
ExtractMin Extrahieren und L¨ oschen des Elements mit dem kleinsten Schl¨ ussel
3
DecreaseKey Verkleinern eines Schl¨ ussels
4
Union (meld) Vereinigung zweier (disjunkter) Priority Queues
Wir besprechen die Implementierung einer Vorrangwarteschlange als Binomial Heap. Diese Implementierung ist (relativ) einfach, aber asymptotisch bei weitem nicht so gut wie modernere
Datenstrukturen f¨ ur Priority Queues, z.B. Fibonacci Heaps (die in der weiterf¨ uhrenden Vorlesung EA1 besprochen werden).
Hier ist ein kurzer Vergleich der Zeitkomplexit¨ aten:
BinHeap FibHeap
Insert O(log n) O(1)
ExtractMin O(log n) O(log n) DecreaseKey O(log n) O(1)
Union O(log n) O(1)
worst case amortisiert
Definition 201
Der Binomialbaum B 0 besteht aus genau einem Knoten.
Den Binomialbaum B k , k ≥ 1, erh¨ alt man, indem man die Wurzel eines B k−1 zu einem zus¨ atzlichen Kind der Wurzel eines zweiten B k−1 macht.
B 0 B 1 B 2 B 3
Rekursiver Aufbau des Binomialbaums B k (rekursive Verfolgung des rechten Zweigs)
B k
B k−1
B k−1
. . .
B k−1 B k−2 B 2 B 1 B 0
B k
Rekursiver Aufbau des Binomialbaums B k (rekursive Verfolgung des linken Zweigs)
B k
B k−1
B k−1
B k
B k−1
B k−2
B 1
B 0
B 0
Satz 202
F¨ ur den Binomialbaum B k , k ≥ 0, gilt:
1
er hat H¨ ohe k und enth¨ alt 2 k Knoten;
2
er enth¨ alt genau k i
Knoten 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 k
und der Rekursionsformel
k
i
=
k − 1 i
+
k − 1 i − 1
f¨ ur Binomialkoeffizienten.
Definition 203
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 0 h¨ ochstens einen B k
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 204
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 1 und H 2 geh¨ oren, disjunkt sind. Es ist jedoch durchaus m¨ oglich, dass der gleiche Schl¨ ussel f¨ ur mehrere Objekte vorkommt.
1. Fall H 1 und H 2 enthalten 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 k
ein, 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.
2. Fall Sonst. Sei H 1 = {B i 1 ; i ∈ I 1 ⊂ N 0 } und sei H 2 = {B i 2 ; 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+1 wird 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+1 wird 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 205
Die Union-Operation zweier Binomial Heaps mit zusammen n
Schl¨ usseln kann in Zeit O(log n) durchgef¨ uhrt werden.
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 0 aus den Unterb¨ aumen der Wurzel dieses Baums
5