binomial queues, fibonacci...
TRANSCRIPT
![Page 1: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/1.jpg)
WS04/05
Fibonacci Heaps
Prof. Dr. S. Albers
![Page 2: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/2.jpg)
2WS04/05
Vorrangswarteschlangen:Operationen
Vorrangswarteschlange Q
Operationen:
Q.initialize(): erstellt die leere Schlange QQ.isEmpty(): liefert true gdw. Q ist leerQ.insert(e): fügt Eintrag e in Q ein und gibt einen Zeiger auf den
Knoten, der den Eintrag e enthält, zurückQ.deletemin(): liefert den Eintrag aus Q mit minimalen Schlüssel und
entfernt ihnQ.min(): liefert den Eintrag aus Q mit minimalen SchlüsselQ.decreasekey(v,k): verringert den Schlüssel von Knoten v auf k
![Page 3: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/3.jpg)
3WS04/05
Vorrangswarteschlangen:Operationen
Zusätzliche Operationen:
Q.delete(v) : entfernt Knoten v mit Eintrag aus Q (ohne v zu suchen)
Q.meld(Q´): vereinigt Q und Q´ (concatenable queue)
Q.search(k) : sucht den Eintrag mit Schlüssel k in Q (searchablequeue)
u.v.a., z.B. predecessor, successor, max, deletemax
![Page 4: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/4.jpg)
4WS04/05
Vorrangswarteschlangen Implementation
O(1)*O(log n)O(log n)O(1)decr.-key
O(1)O(log n)O(n) od.O(m log n)
O(1)meld (m≤n)
O(log n)*O(log n)O(log n)O(n)delete-min
O(1)O(log n)O(1)O(n)min
O(1)O(log n)O(log n)O(1)insert
Fib.-Hp.Bin. – Q.HeapListe
* = amortisierte KostenQ.delete(e) = Q.decreasekey(e, -∞ ) + Q.deletemin( )
![Page 5: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/5.jpg)
5WS04/05
Fibonacci - Heaps
„Lazy-Meld“ - Version von Binomialqueues:Vereinigung von Bäumen gleicher Ordnung wird bis zur nächsten deletemin-Operation aufgeschoben
DefinitionEin Fibonacci-Heap Q ist eine Kollektion heapgeordneter Bäume
VariablenQ.min: Wurzel des Baumes mit kleinstem SchlüsselQ.rootlist: zirkuläre, doppeltverkettete und ungeordnete Liste der Wurzeln der BäumeQ.size: Anzahl der Knoten in Q
![Page 6: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/6.jpg)
6WS04/05
Fibonacci-Heaps Bäume
Sei B heapgeordneter Baum in Q.rootlist:
B.childlist: zirkuläre, doppelverkettete und ungeordnete Listeder Söhne von B
Knotenformat
markchild
degreeentry
right
parent
leftVorteile zirkulärer, doppelverketteter Listen:
1. Entfernen eines Elementes in konstanter Zeit2. Vereinigen zweier Listen in konstanter Zeit
![Page 7: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/7.jpg)
7WS04/05
Fibonacci-Heaps Implementation: Beispiel
![Page 8: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/8.jpg)
8WS04/05
Fibonacci-Heaps Operationen
Q.initialize(): Q.rootlist = Q.min = null
Q.meld(Q´):1. verkette Q.rootlist und Q´.rootlist2. update Q.min
Q.insert(e): 1. Bilde einen Knoten für einen neuen Schlüssel ! Q´2. Q.meld(Q´)
Q.min():Gebe Q.min.entry zurück
![Page 9: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/9.jpg)
9WS04/05
Fibonacci-Heaps deletemin
Q.deletemin()/*Lösche den Knoten mit den kleinsten Schlüssel aus Q und gebe den
Eintrag des Knotens zurück*/1 m = Q.min()2 if Q.size() > 03 then entferne Q.min() aus Q.rootlist4 füge Q.min.childlist in Q.rootlist ein5 Q.consolidate
/* Verschmelze solange Knoten mit gleichem Grad, bis das nicht mehr geht und bestimme dann das minimale Element m */
6 return m
![Page 10: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/10.jpg)
10WS04/05
Fibonacci-Heaps: Maximaler Knotengrad
rang(v) = Grad eines Knotens v in Qrang(Q) = maximaler Rang eines Knotens in Q
Annahme :rang(Q) ≤ 2log n,
wenn Q.size = n.
![Page 11: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/11.jpg)
11WS04/05
Fibonacci-Heaps: Link-Operationrang(B) = Grad der Wurzel von BHeapgeordnete Bäume B,B´ mit rang(B) = rang(B´)
LinkB B´
1. rang(B) = rang(B) + 12. B´.mark = false
B
B´
![Page 12: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/12.jpg)
12WS04/05
Konsolidierung der Wurzelliste
![Page 13: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/13.jpg)
13WS04/05
Konsolidierung der Wurzelliste
![Page 14: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/14.jpg)
14WS04/05
Fibonacci-Heaps deleteminFinde Wurzel mit gleichem Rang:Array A:
0 1 2 log nQ.consolidate()
1 A = Array von Fibonacci-Heap Knoten der Länge 2 log n2 for i = 0 to 2 log n do A[i] = frei3 while Q.rootlist ≠ ∅ do4 B = Q.delete-first()5 while A[rang(B)] ist nicht frei do6 B´ = A[rang(B)]; A[rang(B)] = frei; B = Link(B,B´)7 end while8 A[rang(B)] = B 9 end while10 bestimme Q.min
![Page 15: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/15.jpg)
15WS04/05
Fibonacci-Heap Beispiel
![Page 16: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/16.jpg)
16WS04/05
Fibonacci-Heap Beispiel
![Page 17: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/17.jpg)
17WS04/05
Fibonacci-Heaps decrease-key
Q.decrease-key(v,k)1 if k > v.key then return2 v.key = k3 update Q.min4 if v ∈ Q.rootlist or k ≥ v.parent.key then return5 do /* cascading cuts */6 parent = v.parent7 Q.cut(v)8 v = parent9 while v.mark and v∉ Q.rootlist 10 if v ∉ Q.rootlist then v.mark = true
![Page 18: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/18.jpg)
18WS04/05
Fibonacci-Heaps: cuts
Q.cut(v)
1 if v ∉ Q.rootlist 2 then /* trenne v von seinem Vater */3 rang (v.parent) = rang (v.parent) – 14 v.parent = null5 entferne v aus v.parent.childlist6 füge v in Q.rootlist ein
![Page 19: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/19.jpg)
19WS04/05
Fibonacci-Heaps: delete
Q.delete(v)
1 if v = Q.min2 then return Q.delete-min3 Q.cut(v) und kaskadiere4 entferne v aus Q.rootlist5 füge v.childlist in Q.rootlist ein6 return v.key
![Page 20: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/20.jpg)
20WS04/05
Fibonacci-Heaps Markierung
Historie
v wird an einem Knoten angehängt v.mark = false
v verliert einen Sohn v.mark = true
v verliert zweiten Sohn v abtrennen
Die Markierung gibt also an, ob v bereits einen Sohn verloren hat,seitdem v zuletzt Sohn eines anderen Knoten geworden ist.
![Page 21: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/21.jpg)
21WS04/05
Rang der Söhne eines Knotens
Lemma
Sei v ein Knoten in dem Fibonacci-Heap Q. Ordnet man die Söhneu1,...,uk von v nach dem Zeitpunkt des Anhängens an v, dann gilt
rang (ui ) ≥ i - 2.Beweis:
Zeitpunkt des Anhängens von ui:
# Söhne von v (rang(v)): ≥ i - 1# Söhne von ui (rang(ui)): ≥ i - 1# Söhne, die ui in der Zwischenzeit verloren hat: 1
![Page 22: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/22.jpg)
22WS04/05
Maximaler Rang eines Knoten
SatzSei v ein Knoten in einem Fibonacci-Heap Q mit Rang k. Dann ist v dieWurzel eines Teilbaumes mit mindestens Fk+2 Knoten.
Die Anzahl der Nachkommen eines Knotens ist exponentiell in der Zahlseiner Söhne.
FolgerungFür den maximalen Rang k eines Knoten v in einem Fibonacci-Heap Qmit n Knoten gilt:
![Page 23: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/23.jpg)
23WS04/05
Maximaler Rang eines KnotensBeweis Sk = Mindestgröße eines Teilbaumes, dessen Wurzel k Söhne hatS0 = 1S1 = 2
Es gilt:
Fibonacci-Zahlen:
(1) + (2) + Induktion ! Sk ≥ Fk+2
∑−
=≥+≥
2
0(1) 2für 2
k
i ik kSS
k
k
iik
FFF
FF
+++=
+= ∑=
+
…10
02
1
(2) 1
![Page 24: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/24.jpg)
24WS04/05
Fibonacci-Heap Analyse
Potentialmethode zur Analyse der Kosten der Operationen derFibonacci-Heaps.
Potentialfunktion ΦQ für Fibonacci-Heap Q:
ΦQ = rQ + 2 mQ
mit:rQ = Anzahl der Knoten in Q.rootlistmQ= Anzahl der markierten Knoten in Q, die
sich nicht in der Wurzelliste befinden.
![Page 25: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/25.jpg)
25WS04/05
Amortisierte Analyse
Amortisierte Kosten ai der i-ten Operation:
ai = ti + Φi - Φi-1
= ti + (ri –ri-1) + 2(mi – mi-1)
![Page 26: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/26.jpg)
26WS04/05
Analyse: insert
insert
ti = 1
ri –ri-1 = 1
mi – mi-1 = 0
ai = 1 + 1 + 0 = O(1)
![Page 27: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/27.jpg)
27WS04/05
Analyse: Deletemin
deletemin:
ti = ri-1 + 2 log n
ri – ri-1 ≤ 2 log n - ri-1
mi – mi-1 ≤ 0
ai ≤ ri-1 + 2 log n + 2 log n – ri-1 + 0
= O(log n)
![Page 28: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/28.jpg)
28WS04/05
Analyse: Decrease-key
decrease-key:
ti = c + 2
ri – ri-1 = c + 1
mi – mi-1 ≤ - c + 1
ai ≤ c + 2 + c + 1 + 2 (- c + 1)
= O(1)
![Page 29: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/29.jpg)
29WS04/05
Analyse: Delete
delete:
ti = c + 4
ri – ri-1 ≤ c + 1 + 2 log n
mi – mi-1 ≤ - c + 1
ai ≤ c + 4 + (c + 1 + 2 log n) + 2 (- c + 1)
= O(log n)
![Page 30: Binomial Queues, Fibonacci Heapsac.informatik.uni-freiburg.de/.../Misc/Slides/08_Fibonacci_Heaps.pdf · Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung](https://reader035.vdokument.com/reader035/viewer/2022062913/5e18dd1533c76c119c7aad7a/html5/thumbnails/30.jpg)
30WS04/05
Vorrangwarteschlangen Vergleich
O(1)*O(log n)O(log n)O(1)decr.-key
O(1)O(log n)O(n) od.O(m log n)
O(1)meld (m≤n)
O(log n)*O(log n)O(log n)O(n)delete-min
O(1)O(log n)O(1)O(n)min
O(1)O(log n)O(log n)O(1)insert
Fib.-Hp.Bin. – Q.HeapListe
* = amortisierte Kosten