WS 2006-07 Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.

Slides:



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

Kap. 13 Sweep-Line Algorithmen Kap Schnittprobleme
Man bestimme den „minimalen aufspannenden Baum“ des Graphen.
Eine dynamische Menge, die diese Operationen unterstützt,
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.
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Claudio Moraga; Gisbert Dittrich
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
GIN2 – 2. Vorlesung, SS04 Prof. Dr. Wolfram Conen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Zusammenfassung der Vorwoche
B-Bäume.
Kapitel 6: Klassifizierung von Sortiertechniken
Kapitel 6. Suchverfahren
Synonyme: Stapel, Keller, LIFO-Liste usw.
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Effizienz: Indexstrukturen
Algorithmentheorie 04 –Hashing
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.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (16 – Fibonacci-Heaps) T. Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (25 – Fibonacci-Heaps – Analyse) T. Lauer.
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.
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 (20 - Balancierte Bäume, AVL-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.
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.
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.
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
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Heaps und Priority Queues
Minimum Spanning Tree: MST
Kapitel 2: Datenstrukturen
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
7.1 Externes Suchen Bisherige Algorithmen: geeignet, wenn alle Daten im Hauptspeicher. Große Datenmengen: oft auf externen Speichermedien, z.B. Festplatte.
Effiziente Algorithmen
Diskrete Mathematik II
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Übung Datenbanksysteme II Index- strukturen
Analyse von Ablaufdiagrammen
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
Kapitel 5: Von Datenstrukturen zu Abstrakten Datentypen
Analyseprodukte numerischer Modelle
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:

WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer

2WS Vorrangswarteschlangen Implementationen ListeHeapBin. – Q.Fib.-Hp. insertO(1)O(log n) O(1) minO(n)O(1)O(log n)O(1) delete- min O(n)O(log n) O(log n)* meld (m n) O(1) O(n) od. O(m log n) O(log n)O(1) decr.-keyO(1)O(log n) O(1)* * = amortisierte Kosten Q.delete(e) = Q.decreasekey(e, - ) + Q.deletemin()

3WS Fibonacci-Heaps als lazy Binomial Queues Verschmelze Bäume nur dann, wenn ohnehin alle Wurzeln betrachtet werden müssen Lasse auch Bäume zu, die keine Binomialbäume sind

4WS Erweiterte Child-Sibling Darstellung Knotenformat: parent entrydegree childmark leftright min

5WS Vorteile der zusätzlichen Zeiger Zugriff auf Minimum (accessmin) jederzeit in O(1) (allerdings muss der min-Zeiger immer aktuell gehalten werden) Verketten von (und damit auch das Einfügen in) zirkulären Listen ist in O(1) möglich Entfernen aus doppelt verketteten Listen ebenfalls in O(1)

6WS Fibonacci-Bäume: Vereinigung (Link) Vereinigung zweier Bäume B, B´ von gleicher Ordnung (degree) k Link-Operation: Ausführbar in konstanter Zeit: O(1) Resultierender Baum hat Grad k+1 Unterschied zu Binomial Queues: Ursprungsbäume müssen nicht dieselbe Gestalt haben

7WS Verschmelzen zweier F-Heaps (meld) Hänge die Wurzellisten der beiden F-Heaps aneinander. Aktualisiere den min-Zeiger, so dass er auf den kleineren der beiden Minimalknoten zeigt Q.meld(F-Heap F): 1 Q.min.right.left = F.min.left 2 F.min.left.right = Q.min.right 3 Q.min.right = F.min 4 F.min.left = Q.min 5 Q.min = min { F.min, Q.min }

8WS Fibonacci-Heaps: Operationen Q.initialize: Q.root = null Q.insert(e): F = new F-Heap(e) Q.meld(F) Zeit = O(1)

9WS Fibonacci-Heaps: Deletemin Q.deletemin(): 1. Entferne den min-Knoten und hänge stattdessen die Lister seiner Söhne in die Wurzelliste ein. 2. Gehe die Wurzelliste durch: (a) bestimme den neuen Minimalknoten (b) konsolidiere dabei die Liste, d.h. verbinde Bäume mit gleichem Wurzelgrad (link) Zeit: ?

10WS deletemin: Beispiel

WS deletemin: Beispiel

12WS deletemin: Beispiel

13WS consolidate: Beispiel Rang-Array:

14WS Kosten von deletemin Das eigentliche Entfernen geht in O(1) Kosten hängen im Wesentlichen vom Konsolidierungsprozess ab, d.h. von der Länger der Wurzelliste und der Anzahl der notwendigen link-Operationen Wie lässt sich das Konsolidieren effizient bewerkstelligen? Beobachtungen: Jeder Wurzelknoten muss mindestens einmal betrachtet werden Am Ende darf es für jeden möglichen Rang höchstens einen Knoten geben

15WS consolidate: Beispiel Rang-Array:

16WS consolidate: Beispiel Rang-Array:

17WS consolidate: Beispiel Rang-Array:

18WS consolidate: Beispiel Rang-Array:

19WS consolidate: Beispiel Rang-Array:

20WS consolidate: Beispiel

21WS Analyse von consolidate rankArray = new FibNode[maxRank(n)+1]; // Erstelle das Array for each FibNode N in rootlist { while (rankArray[N.rank] != null) { // Position besetzt N = link(N, rankArray[N.rank]); // Verbinde Bäume rankArray[N.rank-1] = null; // Lösche alte Pos. } rankArray[N.rank] = N; // Eintragen in Array }

22WS Analyse for each FibNode N in rootlist { while (rankArray[N.rank] != null) { N = link(N, rankArray[N.rank]); rankArray[N.rank-1] = null; } rankArray[N.rank] = N; } Sei k = #Wurzelknoten vor dem Konsolidieren. Diese k Knoten lassen sich aufteilen in W ={Knoten, die am Ende noch in der Wurzelliste sind} L = {Knoten, die an einen anderen Knoten angehängt wurden} Es gilt:Kosten(for-Schleife) = Kosten(W) + Kosten(L) = |rankArray| + #links

23WS Kosten von deletemin Vorläufig: O(maxRank(n)) + O(#links)

24WS Fibonacci-Heaps: decreasekey Q.decreasekey(FibNode N, int k) : Setze den Schlüsselwert von N auf k herab. Wenn die Heap-Bedingung nicht mehr erfüllt ist ( k < N.parent.key ): Trenne N von seinem Vater ab (mit cut) und hänge ihn (rechts vom Minimalknoten) in die Wurzelliste ein Falls der Vater markiert ist ( N.parent.mark == true ), trenne auch ihn von seinem Vater ab; wenn auch dessen Vater markiert ist, trenne auch diesen ab usw. (cascading cuts) Markiere den Knoten, dessen Sohn zuletzt abgetrennt wurde (sofern dieser kein Wurzelknoten ist). Aktualisiere den Minimum-Zeiger (falls k < min.key ).

25WS Beispiel für decreasekey Setze den Schlüssel 64 auf 14 herab.

26WS Beispiel für decreasekey

27WS Beispiel für decreasekey

28WS Beispiel für decreasekey

29WS Beispiel für decreasekey

30WS Kosten von decreasekey Schlüssel neu setzen und Vergleich mit Vater: O(1) Abtrennen vom Vaterknoten und in Wurzelliste:O(1) Cascading cuts:#cuts Markieren des letzten Knotens:O(1) Kosten hängen von der Anzahl der cascading cuts ab.

31WS Amortisierte Analyse – Potentialmethode Ordne jedem Zustand der Datenstruktur einen Wert Ф (Potential) zu Die amortisierten Kosten ai der i-ten Operation sind definiert als ai = ci + (Фi – Фi-1) die tatsächlichen Kosten zuzüglich der Änderung des Potentials durch die i-te Operation. Definiere Фi = wi + 2mi mit wi = Zahl der Wurzelknoten und mi = Zahl der markierten Knoten (die nicht Wurzeln sind) Beispiel: insert tatsächliche Kosten: ci = O(1) Potential erhöht sich um 1, also Фi – Фi-1 = 1 ai = ci + 1

32WS