C. Komusiewicz 7.1 Fibonacci-Heaps: Überblick 117 Mergeable Heaps Erweiterung von Standardheaps, die die folgenden fünf Operationen unterstützen. Make-Heappq liefert neuen, leeren Heap. InsertpH, xq fügt Element x in Heap ein. MinimumpHq findet das Element in H mit kleinstem Schlüssel. Extract-MinpHq findet das Element in H mit kleinstem Schlüssel und entfernt es. UnionpH 1, H 2 q vereinigt Heaps H 1 und H 2 zu neuem Heap H, H 1 und H 2 werden dabei gelöscht.
C. Komusiewicz 7.1 Fibonacci-Heaps: Überblick 118 Fibonacci-Heaps vs. Binärheaps Fibonacci-Heaps sind Mergeable Heaps und unterstützen 2 weitere Operationen: Decrease-KeypH, x, kq DeletepH, x q Diese Operationen werden auch von Binärheaps unterstützt. Vergleich der Laufzeiten: Operation Binärheap Fibonacci-Heap Make-Heap Insert Minimum Extract-Min Union Decrease-Key Delete
C. Komusiewicz 7.2 Fibonacci-Heaps: Definition 119 Fibonacci-Heaps: Struktur Definition Ein Fibonacci-Heap ist eine Menge von gewurzelten Bäumen, die die Min-Heap-Eigenschaft erfüllen. Min-Heap-Eigenschaft: Fibonacci-Heaps sind keine Suchbäume: es besteht keine Beziehung zwischen den Teilbäumen die an den Kindern gewurzelt sind. Jeder Knoten hat zwei zusätzliche Attribute:
C. Komusiewicz 7.2 Fibonacci-Heaps: Definition 120 Fibonacci-Heaps: Zeigerstruktur Ein Fibonacci-Heap wird wie folgt dargestellt: Die Wurzelliste ist eine doppelt verkettete Liste, die alle Wurzeln enthält. Für jeden Knoten gibt es eine doppelt verkettete Liste, die seine Kinder enthält. Jeder Knoten hat Zeiger auf seinen Vater und auf ein Kind. H. min : Zeiger auf Wurzel eines Baums in H, der den minimalen Schlüssel enthält. H. size : Anzahl der aktuell gespeicherten Knoten
C. Komusiewicz 7.2 Fibonacci-Heaps: Definition 121 Potentialfunktion Für die amortisierte Analyse der Kosten der einzelnen Operationen benutzen wir die Potentialfunktion wobei Beispiel
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 122 Make-Heap und Minimum Make-Fib-Heappq 1 H. size 0 2 H. min NIL 3 return H Es gilt: Amortisierte Kosten: MinimumpHq 1 return H.min Tatsächliche Kosten: Veränderung des Potentials: Amortisierte Kosten:
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 123 Einfügen Fib-Heap-InsertpH, x q 1 x. deg : 0 2 prxs : NIL 3 childrxs : NIL 4 leftrxs : x 5 rightrxs : x 6 x. label : False
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 123 Einfügen Fib-Heap-InsertpH, x q 1 x. deg : 0 2 prxs : NIL 3 childrxs : NIL 4 leftrxs : x 5 rightrxs : x 6 x. label : False 7 verkette Wurzelliste von x mit Wurzelliste von H 8 if H. min NIL oder x. key ă H. min. key then 9 H. min : x 10 H. size : H. size `1 Amortisierte Kosten:
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 124 Vereinigung Fib-Heap-UnionpH 1, H 2 q 1 H : Make-Fib-Heappq 2 H. min : H 1. min
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 124 Vereinigung Fib-Heap-UnionpH 1, H 2 q 1 H : Make-Fib-Heappq 2 H. min : H 1. min 3 verkette Wurzelliste von H mit Wurzelliste von H 2
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 124 Vereinigung Fib-Heap-UnionpH 1, H 2 q 1 H : Make-Fib-Heappq 2 H. min : H 1. min 3 verkette Wurzelliste von H mit Wurzelliste von H 2 4 if H. min NIL oder H 2. min NIL und H 2. min. key ă H 1. min. key then 5 H. min : H 2. min
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 124 Vereinigung Fib-Heap-UnionpH 1, H 2 q 1 H : Make-Fib-Heappq 2 H. min : H 1. min 3 verkette Wurzelliste von H mit Wurzelliste von H 2 4 if H. min NIL oder H 2. min NIL und H 2. min. key ă H 1. min. key then 5 H. min : H 2. min 6 H. size : H 1. size `H 2. size 7 return H Amortisierte Kosten:
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 125 Extract-Min Nach Entfernen des Minimums muss neues Minimum bestimmt werden. Problem: Idee: Fib-Heap-Extract-MinpHq 1 z : H. min 2 if z NIL then 3 foreach Kind x von z do 4 füge x zur Wurzelliste von H hinzu 5 prxs : NIL
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 125 Extract-Min Nach Entfernen des Minimums muss neues Minimum bestimmt werden. Problem: Idee: Fib-Heap-Extract-MinpHq 1 z : H. min 2 if z NIL then 3 foreach Kind x von z do 4 füge x zur Wurzelliste von H hinzu 5 prxs : NIL 6 Entferne z aus Wurzelliste von H 7 if z rightrzs then 8 H. min : NIL
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 125 Extract-Min Nach Entfernen des Minimums muss neues Minimum bestimmt werden. Problem: Idee: Fib-Heap-Extract-MinpHq 1 z : H. min 2 if z NIL then 3 foreach Kind x von z do 4 füge x zur Wurzelliste von H hinzu 5 prxs : NIL 6 Entferne z aus Wurzelliste von H 7 if z rightrzs then 8 H. min : NIL 9 else 10 H. min : rightrzs 11 ConsolidatepHq 12 H. size : H. size 1 13 return z
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 126 Konsolidierung Ziel: Reduziere Anzahl der Bäume im Heap Strategie: Suche nach Bäumen mit Wurzeln x und y, sodass x. deg y. deg und x. key ď y. key Mache y zu Kind von x mittels Fib-Heap-Link.
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 126 Konsolidierung Ziel: Reduziere Anzahl der Bäume im Heap Strategie: Suche nach Bäumen mit Wurzeln x und y, sodass x. deg y. deg und x. key ď y. key Mache y zu Kind von x mittels Fib-Heap-Link. Fib-Heap-LinkpH, y, xq 1 Entferne y aus Wurzelliste von H 2 Mache y zu Kind von x 3 x. deg x. deg `1 4 y. label : False
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 126 Konsolidierung Ziel: Reduziere Anzahl der Bäume im Heap Strategie: Suche nach Bäumen mit Wurzeln x und y, sodass x. deg y. deg und x. key ď y. key Mache y zu Kind von x mittels Fib-Heap-Link. Fib-Heap-LinkpH, y, xq 1 Entferne y aus Wurzelliste von H 2 Mache y zu Kind von x 3 x. deg x. deg `1 4 y. label : False Wie findet man schnell Paare von Wurzeln mit gleichem Grad? Verwenden Hilfsarray Ar0... DpnpHqqs wobei DpnpHqq Aris y :ô
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 127 Konsolidierung: Pseudocode ConsolidatepHq 1 for i : 0 to DpnpHqq do 2 Aris : NIL
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 127 Konsolidierung: Pseudocode ConsolidatepHq 1 for i : 0 to DpnpHqq do 2 Aris : NIL 3 foreach Knoten w in Wurzelliste von H do 4 x : w; x. deg d 5 while Ards NIL do 6 y : Ards 7 if x. key ą y. key then 8 vertausche x und y 9 Fib-Heap-LinkpH, y, x q 10 Ards : NIL; d : d ` 1 11 Ards : x
Konsolidierung: Pseudocode ConsolidatepHq 1 for i : 0 to DpnpHqq do 2 Aris : NIL 3 foreach Knoten w in Wurzelliste von H do 4 x : w; x. deg d 5 while Ards NIL do 6 y : Ards 7 if x. key ą y. key then 8 vertausche x und y 9 Fib-Heap-LinkpH, y, x q 10 Ards : NIL; d : d ` 1 11 Ards : x 12 H. min NIL 13 for i : 0 to DpnpHqq do 14 if Aris NIL then 15 Füge Aris zur Wurzelliste von H hinzu 16 if H. min NIL oder Aris. key ă H. min. key then 17 H. min : Aris C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 127
C. Komusiewicz 7.3 Fibonacci-Heaps: Operationen 128 Konsolidierung: Analyse Es gilt: nach Beendung von Consolidate haben alle Knoten in der Wurzelliste verschiedene Knotengrade Lemma Consolidate hat amortisierte Kosten OpDpnqq wobei Dpnq der maximale Knotengrad in H ist. Beweis Ñ Tafel Satz Sei H ein Fibonacci-Heap mit n Knoten und Dpnq sein maximaler Knotengrad. Auf H kosten Insert, Minimum und Union amortisiert Op1q Zeit und Extract-Min amortisiert OpDpnqq Zeit.