höhere datenstrukturen
DESCRIPTION
Höhere Datenstrukturen. Binomial Heaps Fibonacci Heaps. Neven Santrac Heiko Ehrig SoSe 2005 Seminar über Algorithmen Prof. Helmut Alt. Inhalt. Binomial Heap Binomial Trees Definition, Beispiel, Eigenschaften Binomial Heap Definition, Beispiel, Implementierung Operationen - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/1.jpg)
Höhere Datenstrukturen
Neven SantracHeiko Ehrig
SoSe 2005 Seminar über AlgorithmenProf. Helmut Alt
Binomial HeapsFibonacci Heaps
![Page 2: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/2.jpg)
Inhalt
• Binomial Heap– Binomial Trees
• Definition, Beispiel, Eigenschaften– Binomial Heap
• Definition, Beispiel, Implementierung– Operationen
• Make-Binomial-Heap• Binomial-Heap-Min• Binomial-Heap-Union• Binomial-Heap-Insert• Binomial-Heap-Extract-Min• Binomial-Decrease-Key• Binomial-Heap-Delete
![Page 3: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/3.jpg)
Inhalt
• Amortisierte Analyse: Potentialmethode• Fibonacci Heap
– Definition, Beispiel, Implementierung– Operationen
• Make-Fib-Heap• Fib-Heap-Min• Fib-Heap-Union• Fib-Heap-Insert• Fib-Heap-Extract-Min• Fib-Heap-Decrease-Key• Fib-Heap-Delete
![Page 4: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/4.jpg)
![Page 5: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/5.jpg)
Binomial Trees
• Rekursive Definition
Bk-1
Bk-1Bk :=
B0 :=
![Page 6: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/6.jpg)
Beispiel
![Page 7: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/7.jpg)
Beispiel
![Page 8: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/8.jpg)
Beispiel
![Page 9: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/9.jpg)
Beispiel
![Page 10: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/10.jpg)
Beispiel
![Page 11: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/11.jpg)
Beispiel
#
1
4
6
4
1
0
1
2
3
4
![Page 12: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/12.jpg)
„Binomial“-Baum
1 4 6 4 11 3 3 11 2 11 11
![Page 13: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/13.jpg)
Eigenschaften eines Bino-Baums
• 1) hat 2k Knoten• 2) die Höhe ist k
• 3) es gibt genau (ki) Knoten auf
Tiefe i = 0, 1, …, k• 4) die Wurzel hat Grad k, dieser ist größer als
jeder andere in diesem Baum• weiterhin, wenn man die Kinder von links nach
rechts mit i = k-1, k-2, …, 0 numeriert,dann ist das i-te Kind die Wurzel des Unterbaums Bi
![Page 14: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/14.jpg)
Korrolar
• Max. Grad von einem bel. Knoten in einem n-Knoten binom. Baum ist log(n) – Folgt aus Eigenschaften 1-4
![Page 15: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/15.jpg)
Binomial Heap
• Definition:• Menge von Binomialbäumen mit:
1. Jeder Baum erfüllt (Min-) Heap-Eigenschaft2. Für ein Integer k0 gibt es höchsten ein
Baum B mit deg(B)=k
1. Die Wurzel eines Binomialbaums enthält den kleinsten Wert.2. n Knoten-BinomialHeap besteht aus höchstens logn +1 Binominalbäumen.
![Page 16: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/16.jpg)
Beispiel |H|=13
Head(H) 10 5
69
11
6
99912
2077
88
19
1310 = 110121310 = |B3|+ |B2|+ |B0|
Aufsteigender Grad
![Page 17: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/17.jpg)
Make-Binomial-Heap
• Trivial, in
Make-Binomial-Heap()head[H]=NIL;return H;
![Page 18: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/18.jpg)
Binomial-Heap-MinimumBINOMIAL-HEAP-MINIMUM(H)1 y ← NIL2 x ← head[H]3 min ← ∞4 while x ≠ NIL5 do if key[x] < min6 then min ← key[x]7 y ← x8 x ← sibling[x]9 return y
• Laufzeit in logn
![Page 19: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/19.jpg)
Binomial-Heap-Union
• Hilfsfunktion Binomial-Link
BINOMIAL-LINK(y, z)
1 p[y] ← z
2 sibling[y] ← child[z]
3 child[z] ← y
4 degree[z] ← degree[z] + 1
![Page 20: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/20.jpg)
![Page 21: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/21.jpg)
Beispiele
• Für die 4 Fälle -> siehe Tafel
• Für einen Ablauf -> siehe Tafel
![Page 22: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/22.jpg)
Binomial-Heap-Union
• Prinzip der binären Addition
|H1| = 23 = 10111 (B4 B2 B1 B0)
|H2| = 19 = 10011 (B4 B1 B0)
42 = 101010 (B5 B3 B1 )
Laufzeit in logn
![Page 23: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/23.jpg)
Binomial-Heap-Insert
BINOMIAL-HEAP-INSERT(H, x)
1 H′ ← MAKE-BINOMIAL-HEAP()
2 p[x] ← NIL
3 child[x] ← NIL
4 sibling[x] ← NIL
5 degree[x] ← 0
6 head[H′] ← x
7 H ← BINOMIAL-HEAP-UNION(H, H′)
Laufzeit in logn
![Page 24: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/24.jpg)
Binomial-Heap-Extract-Min
BINOMIAL-HEAP-EXTRACT-MIN(H)
1 find the root x with the minimum key in the root list of H,
and remove x from the root list of H
2 H′ ← MAKE-BINOMIAL-HEAP()
3 reverse the order of the linked list of x's children,
and set head[H′] to point to the head of the resulting list
4 H ← BINOMIAL-HEAP-UNION(H, H′)
5 return x
Laufzeit in logn
![Page 25: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/25.jpg)
Binomial-Decrease-KeyBINOMIAL-HEAP-DECREASE-KEY(H, x, k) 1 if k > key[x] 2 then error "new key is greater than current key" 3 key[x] ← k 4 y ← x 5 z ← p[y] 6 while z ≠ NIL and key[y] < key[z] 7 do exchange key[y] ↔ key[z] 8 If ▸ y and z have satellite fields, exchange them, too. 9 y ← z10 z ← p[y]
Zeile 6-10 wird nach Lemma 1 maximal logn mal ausgeführtLaufzeit daher logn
![Page 26: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/26.jpg)
Binomial-Heap-Delete
BINOMIAL-HEAP-DELETE(H, x)
1 BINOMIAL-HEAP-DECREASE-KEY(H, x, -∞)
2 BINOMIAL-HEAP-EXTRACT-MIN(H)
Laufzeit logn
![Page 27: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/27.jpg)
Amortisierte Analyse: Idee
• In einer amortisierten Analyse wird die Laufzeit für eine Sequenz von Operationen über alle beteiligten Operationen im worst case betrachtet, da es zu einer besseren obere Schranke führt, da die besonders „teuren“ Fälle besonders selten, besonders „billige“ aber recht oft auftreten. Im Unterschied zur average case Lauftzeitanalyse wird dabei nicht mit der Wahrscheinlichkeit gerechnet.
![Page 28: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/28.jpg)
Amortisierte Analyse
• Es können drei prinzipiell unterschiedliche Methoden angewendet:
– Account-Methode– Aggregat-Methode– Potentialmethode
![Page 29: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/29.jpg)
Amortisierte Analyse - Beispiel
• Betrachten Stack S neben push und pop die Operation multipop(S,k), die maximal k Elemente in S nacheinander ausgibt.
MULTIPOP(S, k)
1 while not STACK-EMPTY(S) and k ≠ 0
2 do POP(S)
![Page 30: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/30.jpg)
Amortisierte Analyse -Beispiel
Für eine Sequenz von n push, pop und multipop Operationen auf einem anfangs leeren Stack benötigt man im worst case:
Multipop: O(n) (der Stack könnte ja n Elemente haben)
n Sequenzen von Operationen würde dann n*O(n) = O(n2) bedeuten
![Page 31: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/31.jpg)
Amortisierte Analyse
• Durch die amortisierte Laufzeitanalyse bekommt man aber eine viel genauere obere Schranke für Sequenzen von n push, pop und multipop: O(n)
• Jedes gepushte Element kann nämlich nur maximal einmal gepoppt/multipoppt werden => max #pops(incl.Multipop) = n.
• => amortisierte kosten einer Operation ist O(n)/n=O(1)
![Page 32: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/32.jpg)
Potentialmethode
• Potentialfunktion: D->R• Amortisierte Kosten:
• ci : wirkliche Kosten der i-ten Operation
• Di: Datenstruktur nach der i-ten Operation auf Di-1
• Für n Operationen:
Wenn Di)>= (D0) für alle i, dann findet man damit eine obere Schranke
![Page 33: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/33.jpg)
Potentialmethode Push, Pop, Multipop
• Potentialfunktion: D->N, (Di) = Anzahl s der Elemente im Stack
• Sei i-te Operation ein Push auf einem Stack mit s Elementen
• Amortisierte Kosten für dieses Push ist
![Page 34: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/34.jpg)
Potentialmethode Push, Pop, Multipop
• Potentialfunktion: D->N, (Di) = Anzahl s der Elemente im Stack
• Sei i-te Operation ein Multipop(S,k) auf einem Stack mit s Elementen
(Di) - (Di-1) = -k‘ mit k‘=min(k,s)
• Amortisierte Kosten für dieses Multipop ist
= k‘-k‘ = 0
Die amortisierten Kosten für jede Operation ist O(1)
![Page 35: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/35.jpg)
Fibonacci-Heaps
• Definition– Ein Fibonacci Heap ist eine Menge von min-Heap geordneten
Bäumen, mit Wurzelknoten in einer zirkulären doppelt verketten Liste. Einer der Wurzelknoten ist ausgezeichnet als Minimalknoten. Alle Knoten sind markiert oder unmarkiert.
Beispiel
18 3852
41
23 17
30
24
35
7 3
39
26 46
min[H]
![Page 36: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/36.jpg)
Fibonacci-Heaps
Implementierung
![Page 37: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/37.jpg)
Fibonacci-Heaps
• Die #Knoten im Fibo-Heap H wird immer mit n(H) aufrechterhalten
• deg[x] Grad eines Knotens
• Die Bäume sind ROOTED aber UNGEORDNET (nicht nach Grad)
![Page 38: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/38.jpg)
Potentialfunktion Fib-Heap H
(H) =t(H) + 2m(H)
• t(H) Anzahl der Bäume im Heap• m(H) Anzahl der markierten Knoten im Heap
Bem: Hi)(H0)=0
Bsp:
18 3852
41
23 17
30
24
35
7 3
39
26 46
min[H]
(H)=5 +2*3=11
![Page 39: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/39.jpg)
Fibonacci-Heaps
• D(n) = max. Grad eines Knotens in einem n-Knoten Fibo-Heap
![Page 40: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/40.jpg)
Fibonacci-Heaps
• Wenn man nur die mergeable-heap (MAKE, INSERT, MIN, EXTR-MIN, UNION) Operationen auf ein Fibo-Heap ausführt, dann sind alle Bäume Ungeordnete Binomialbäume (UBB)
![Page 41: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/41.jpg)
Ungeordnete Binomialbäume
• Ähnlich wie Binomalbäume• U0 := O (ein Knoten)• Uk := Uk-1 wird irgendein Kind von Uk-1
• Die Eigenschaften 1-3 von BB gelten,• Nur 4 => 4‘: die Wurzel hat den max. Grad
k, und die Kinder Uk-1, ..., U0 sind in irgendeiner Reihenfolge mit der Wurzel verbunden
• In diesem Fall D(n) = O(log n)
![Page 42: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/42.jpg)
Make-Fib-Heap
• MAKE-FIB-HEAP()
1 n[H]=0
2 min[H]=NIL
• Laufzeit amortisiert: wegen (H)=0 O(1)
![Page 43: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/43.jpg)
FIB-HEAP-INSERT
• FIB-HEAP-INSERT(H, x)1 degree[x] ← 02 p[x] ← NIL3 child[x] ← NIL4 left[x] ← x5 right[x] ← x6 mark[x] ← FALSE7 concatenate the root list containing x with root list H8 if min[H] = NIL or key[x] < key[min[H]]9 then min[H] ← x10 n[H] ← n[H] + 1• Potentialänderung: ((t(H)+1)+2m(H)) – (t(H) +2m(H)) = 1• Laufzeit amortisiert: O(1)+1=O(1)
![Page 44: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/44.jpg)
Fib-Heap-Min
• Ganz einfach durch den Zeiger auf den Minimal(wurzel)knoten
![Page 45: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/45.jpg)
Fib-Heap-Union• FIB-HEAP-UNION(H1, H2)
1 H ← MAKE-FIB-HEAP()2 min[H] ← min[H1]3 concatenate the root list of H2 with the root list of H4 if (min[H1] = NIL) or (min[H2] ≠ NIL and min[H2] < min[H1])5 then min[H] ← min[H2]6 n[H] ← n[H1] + n[H2]7 free the objects H1 and H28 return H
![Page 46: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/46.jpg)
Fib-Heap-Extract-Min• FIB-HEAP-EXTRACT-MIN(H)1 z ← min[H]2 if z ≠ NIL3 then for each child x of z4 do add x to the root list of H5 p[x] ← NIL6 remove z from the root list of H7 if z = right[z]8 then min[H] ← NIL9 else min[H] ← right[z]10 CONSOLIDATE(H)11 n[H] ← n[H] - 112 return z
![Page 47: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/47.jpg)
![Page 48: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/48.jpg)
Fib-Heap-Extr-Min Beispiel
• Bsp siehe OH-Folie
![Page 49: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/49.jpg)
![Page 50: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/50.jpg)
Laufzeitanalyse Fib-Heap-Extract-Min
• Tafel
![Page 51: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/51.jpg)
Fib-Heap-Decrease-Key
FIB-HEAP-DECREASE-KEY(H, x, k)
1 if k > key[x]2 then error "new key is greater than current key"3 key[x] ← k4 y ← p[x]5 if y ≠ NIL and key[x] < key[y]6 then CUT(H, x, y)7 CASCADING-CUT(H, y)8 if key[x] < key[min[H]]9 then min[H] ← x
![Page 52: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/52.jpg)
Fib-Heap-Decrease-Key cut cascading cut
CUT(H, x, y)1 remove x from the child list of y, decrementing degree[y]2 add x to the root list of H3 p[x] ← NIL4 mark[x] ← FALSE
CASCADING-CUT(H, y)1 z ← p[y]2 if z ≠ NIL3 then if mark[y] = FALSE4 then mark[y] ← TRUE5 else CUT(H, y, z)6 CASCADING-CUT(H, z)
![Page 53: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/53.jpg)
Bsp Fib-Heap-Decrease-Key
• Folie oder Tafel
![Page 54: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/54.jpg)
Laufzeitanalyse
• Tafel
![Page 55: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/55.jpg)
FIB-HEAP-DELETE
FIB-HEAP-DELETE(H, x)
1 FIB-HEAP-DECREASE-KEY(H, x, -∞)
2 FIB-HEAP-EXTRACT-MIN(H)
• O(1) +O(D(n)) = O(D(n))
![Page 56: Höhere Datenstrukturen](https://reader036.vdokument.com/reader036/viewer/2022081603/56814073550346895dabf3e3/html5/thumbnails/56.jpg)
Obere Schranke für D(n)
• Tafel