Prof. Dr. S. Albers Prof.Dr.Th Ottmann

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Man bestimme den „minimalen aufspannenden Baum“ des Graphen.
Eine dynamische Menge, die diese Operationen unterstützt,
Minimum Spanning Tree: MST
Suchbäume unterstützen alle unten angegebenen Operationen für dynamische Mengen K effizient: Search(K ,k) ---- Suche ein Element x von K mit Schlüssel.
DNA-Array oder DNA-Chip
Spezialvorlesung Suchalgorithmen Thema: Einzelzustandsraumsuche Stefan Edelkamp.
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Christian Schindelhauer
Claudio Moraga; Gisbert Dittrich
GIN2 – 2. Vorlesung, SS04 Prof. Dr. Wolfram Conen
B-Bäume.
Kapitel 6: Klassifizierung von Sortiertechniken
Synonyme: Stapel, Keller, LIFO-Liste usw.
Sortieren mit Binären Bäumen
Algorithmentheorie 04 –Hashing
Konstruktion von Suffix Bäumen
Suche in Texten: Suffix-Bäume
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
Algorithmentheorie 02 – Polynomprodukt und Fast Fourier Transformation
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
Konstruktion von Suffix Bäumen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (16 – Fibonacci-Heaps) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (23 – Sortieren vorsortierter Daten) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (25 – Fibonacci-Heaps – Analyse) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (24 – Fibonacci-Heaps) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Fibonacci-Heaps – Analyse) Tobias Lauer.
WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Fibonacci-Heaps) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Algorithmentheorie 12 – Spannende Bäume minimalen Gewichts
Union-Find-Strukturen
WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.
Algorithmen und Datenstrukturen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix - Bäume.
WS03/041 Binomial Queues Prof. Dr. S. Albers Prof.Dr.Th Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Heaps und Priority Queues
Minimum Spanning Tree: MST
Kapitel 2: Datenstrukturen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Effiziente Algorithmen
Diskrete Mathematik II
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Auslegung eines Vorschubantriebes
Kapitel 6: Suchbäume und weitere Sortierverfahren
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Algorithmen und Datenstrukturen Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Stefan Werner (Übungen) sowie viele Tutoren.
Amortisierte Analyse: Buchhaltermethode
Christian Scheideler WS 2008
 Präsentation transkript:

Prof. Dr. S. Albers Prof.Dr.Th Ottmann Fibonacci Heaps Prof. Dr. S. Albers Prof.Dr.Th Ottmann WS03/04

Vorrangswarteschlangen:Operationen Vorrangswarteschlange Q Operationen: Q.initialize(): erstellt die leere Schlange Q Q.isEmpty(): liefert true gdw. Q ist leer Q.insert(e): fügt Eintrag e in Q ein und gibt einen Zeiger auf den Knoten, der den Eintrag e enthält, zurück Q.deletemin(): liefert den Eintrag aus Q mit minimalen Schlüssel und entfernt ihn Q.min(): liefert den Eintrag aus Q mit minimalen Schlüssel Q.decreasekey(v,k): verringert den Schlüssel von Knoten v auf k WS03/04

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 (searchable queue) u.v.a., z.B. predecessor, successor, max, deletemax WS03/04

Vorrangswarteschlangen Implementation Liste Heap Bin. – Q. Fib.-Hp. insert O(1) O(log n) min O(n) delete-min O(log n)* meld (mn) O(n) od. O(m log n) decr.-key O(1)* Finde kein Zeichen für „ unendlich “ * = amortisierte Kosten Q.delete(e) = Q.decreasekey(e, - ) + Q.deletemin( ) WS03/04

Fibonacci - Heaps „Lazy-Meld“ - Version von Binomialqueues: Vereinigung von Bäumen gleicher Ordnung wird bis zur nächsten deletemin-Operation aufgeschoben Definition Ein Fibonacci-Heap Q ist eine Kollektion heapgeordneter Bäume Variablen Q.min: Wurzel des Baumes mit kleinstem Schlüssel Q.rootlist: zirkuläre, doppeltverkettete und ungeordnete Liste der Wurzeln der Bäume Q.size: Anzahl der Knoten in Q WS03/04

Fibonacci-Heaps Bäume Sei B heapgeordneter Baum in Q.rootlist: B.childlist: zirkuläre, doppelverkettete und ungeordnete Liste der Söhne von B Knotenformat left parent right entry degree child mark Vorteile zirkulärer, doppelverketteter Listen: 1. Entfernen eines Elementes in konstanter Zeit 2. Vereinigen zweier Listen in konstanter Zeit WS03/04

Fibonacci-Heaps Implementation: Beispiel WS03/04

Fibonacci-Heaps Operationen Q.initialize(): Q.rootlist = Q.min = null Q.meld(Q´): 1. verkette Q.rootlist und Q´.rootlist 2. 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 WS03/04

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() > 0 3 then entferne Q.min() aus Q.rootlist 4 füge Q.min.childlist in Q.rootlist ein 5 Q.consolidate /* Verschmelze solange Knoten mit gleichem Grad, bis das nicht mehr geht und bestimme dann das minimale Element m */ 6 return m WS03/04

Fibonacci-Heaps: Maximaler Knotengrad rang(v) = Grad eines Knotens v in Q rang(Q) = maximaler Rang eines Knotens in Q Annahme : rang(Q)  2log n, wenn Q.size = n. WS03/04

Fibonacci-Heaps: Link-Operation rang(B) = Grad der Wurzel von B Heapgeordnete Bäume B,B´ mit rang(B) = rang(B´) Link B B´ 1. rang(B) = rang(B) + 1 2. B´.mark = false B B´ WS03/04

Konsolidierung der Wurzelliste WS03/04

Konsolidierung der Wurzelliste WS03/04

Fibonacci-Heaps deletemin Finde Wurzel mit gleichem Rang: Array A: 0 1 2 log n Q.consolidate() 1 A = Array von Fibonacci-Heap Knoten der Länge 2 log n 2 for i = 0 to 2 log n do A[i] = frei 3 while Q.rootlist   do 4 B = Q.delete-first() while A[rang(B)] ist nicht frei do B´ = A[rang(B)]; A[rang(B)] = frei; B = Link(B,B´) end while A[rang(B)] = B 9 end while 10 bestimme Q.min WS03/04

Fibonacci-Heaps decrease-key Q-decrease-key(v,k) 1 if (k > v.key or k = v.key) then return 2 v.key < k 3 update Q.min 4 if (v  Q.rootlist or k  v.parent.key) then return 5 Q.cut(v) 6 if v  Q.rootlist then v.mark = true WS03/04

Fibonacci-Heap Beispiel WS03/04

Fibonacci-Heaps decrease-key Q.decrease-key(v,k) 1 if k > v.key then return 2 v.key = k 3 update Q.min 4 if v  Q.rootlist or k  v.parent.key then return 5 do /* cascading cuts */ 6 parent = v.parent 7 Q.cut(v) 8 v = parent 9 while v.mark and v Q.rootlist 10 if v  Q.rootlist then v.mark = true WS03/04

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) – 1 4 v.parent = null 5 entferne v aus v.parent.childlist 6 füge v in Q.rootlist ein WS03/04

Fibonacci-Heaps: delete Q.delete(v) 1 if v = Q.min 2 then return Q.delete-min 3 Q.cut(v) und kaskadiere 4 entferne v aus Q.rootlist 5 füge v.childlist in Q.rootlist ein 6 return v.key WS03/04

Fibonacci-Heaps Markierung Historie v wird an einem Knoten angehängt v.mark = false v verliert eine 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. WS03/04

Rang der Söhne eines Knotens Lemma Sei v ein Knoten in dem Fibonacci-Heap Q. Ordnet man die Söhne u1,...,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 WS03/04

Maximaler Rang eines Knoten Satz Sei v ein Knoten in einem Fibonacci-Heap Q mit Rang k. Dann ist v die Wurzel eines Teilbaumes mit mindestens Fk+2 Knoten. Die Anzahl der Nachkommen eines Knotens ist exponentiell in der Zahl seiner Söhne. Folgerung Für den maximalen Rang k eines Knoten v in einem Fibonacci-Heap Q mit n Knoten gilt: WS03/04

Maximaler Rang eines Knotens Beweis Sk = Mindestgröße eines Teilbaumes, dessen Wurzel k Söhne hat S0 = 1 S1 = 2 Es gilt: Fibonacci-Zahlen: (1) + (2) + Induktion  Sk  Fk+2 WS03/04

Fibonacci-Heap Analyse Potentialmethode zur Analyse der Kosten der Operationen der Fibonacci-Heaps. Potentialfunktion Q für Fibonacci-Heap Q: Q = rQ + 2 mQ mit: rQ = Anzahl der Knoten in Q.rootlist mQ= Anzahl der markierten Knoten in Q, die sich nicht in der Wurzelliste befinden. WS03/04

Amortisierte Analyse Amortisierte Kosten ai der i-ten Operation: ai = ti + i - i-1 = ti + (ri –ri-1) + 2(mi – mi-1) mit ti = tatsächliche Kosten der i-ten Operation i-1 = Potential vor der i-ten Operation i = Potential nach der i-ten Operation ri-1 = Größe der Wurzelliste vor der i-ten Operation ri = Größe der Wurzelliste nach der i-ten Operation mi-1 = # markierter Knoten außerhalb der Wurzelliste vor der i-ten Operation mi = # markierter Knoten außerhalb der Wurzelliste nach der i-ten Operation WS03/04

Analyse: insert insert ti = O(1) ri –ri-1 = 1 mi – mi-1 = 0 ai = O(1) + 1 + 0 = O(1) WS03/04

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 ) WS03/04

Analyse: Decrease-key ti = O( c ) = c ri – ri-1 = c + 1 mi – mi-1 = - c ai = c + c + 1 + 2 (- c) = O(1) WS03/04

Analyse: Delete delete: ti = O( c ) = c ri – ri-1 = c + 1 + log n mi – mi-1 = - c ai = c + (c + 1 + log n) + 2 (- c) = O(log n) WS03/04

Vorrangwarteschlangen Vergleich Liste Heap Bin. – Q. Fib.-Hp. insert O(1) O(log n) min O(n) delete-min O(log n)* meld (mn) O(n) od. O(m log n) decr.-key O(1)* * = amortisierte Kosten WS03/04