1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Fibonacci-Heaps – Analyse) Tobias Lauer.

Slides:



Advertisements
Ähnliche Präsentationen
8. Termin Teil B: Wiederholung Begriffe Baum
Advertisements

Man bestimme den „minimalen aufspannenden Baum“ des Graphen.
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Eine dynamische Menge, die diese Operationen unterstützt,
Minimum Spanning Tree: MST
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Mindesthöhe: |_log2 n_|, maximale Höhe: n-1
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik 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
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (22 – B-Bäume)
Kapitel 6: Klassifizierung von Sortiertechniken
7. Natürliche Binärbäume
Kapitel 6. Suchverfahren
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Synonyme: Stapel, Keller, LIFO-Liste usw.
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
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.
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.
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
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 (27 – Kürzeste Wege) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - Balancierte Bäume, AVL-Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27-Selbstanordnende lineare Listen) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Fibonacci-Heaps) Tobias Lauer.
Algorithmentheorie 7 – Bin Packing
WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
WS03/041 Binomial Queues Prof. Dr. S. Albers Prof.Dr.Th Ottmann.
Kapitel 6 Differenzierbarkeit. Kapitel 6: Differenzierbarkeit © Beutelspacher Juni 2005 Seite 2 Inhalt 6.1 Die Definition 6.2 Die Eigenschaften 6.3 Extremwerte.
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
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Kapitel 2: Datenstrukturen
7.1 Externes Suchen Bisherige Algorithmen: geeignet, wenn alle Daten im Hauptspeicher. Große Datenmengen: oft auf externen Speichermedien, z.B. Festplatte.
Effiziente Algorithmen
Effiziente Algorithmen
Diskrete Mathematik II
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
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
Information und Kommunikation
Übung Datenbanksysteme II Index- strukturen
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
Kapitel 5: Von Datenstrukturen zu Abstrakten Datentypen
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Binärbäume.
Amortisierte Analyse: Buchhaltermethode
 Präsentation transkript:

1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Fibonacci-Heaps – Analyse) Tobias Lauer

2 Vorrangswarteschlangen: Operationen Operationen einer Vorrangswarteschlange (Priority Queue) Q: Q.insert(int k) : Füge einen neuen Knoten mit Schlüssel (= Priorität) k ein. Q.accessmin() : Gib den Knoten mit niedrigstem Schlüssel (= der höchsten Priorität) zurück. Q.deletemin() : Entferne den Knoten mit dem niedrigsten Schlüssel. Q.decreasekey(Node N, int k) : Setze den Schlüssel von Knoten N auf den Wert k herab. Q.delete(Node N) : Entferne den Knoten N. Q.meld(PriorityQueue P) : Vereinige Q mit der Vorrangswarteschlange P. Q.isEmpty() : Gibt an, ob Q leer ist. Bemerkung: Die effiziente Suche nach einem bestimmten Element oder Schlüssel wird in Vorrangswarteschlangen nicht unterstützt! Für decreasekey und delete muss man das entsprechende Element also bereits kennen bzw. Zugriff darauf haben.

3 Fibonacci-Heaps: Idee Liste von Bäumen (beliebigen Verzweigungsgrades), die alle heapgeordnet sind. Definition: Ein Baum heißt (min-)heapgeordnet, wenn der Schlüssel jedes Knotens größer oder gleich dem Schlüssel seines Vaterknotens ist (sofern er einen Vater hat). Die Wurzeln der Bäume sind in einer doppelt verketteten, zirkulären Liste miteinander verbunden (Wurzelliste). Der Einstiegspunkt ist ein Zeiger auf den Knoten mit minimalem Schlüssel

4 Laufzeitanalyse Laufzeit von deletemin(): remove:O(1) consolidate:O(#links) + O(maxRank(n)) updatemin:#Wurzelknoten nach consolidate = O(maxRank(n)) Gesamtkosten:O(#links) + O(maxRank(n)) Nach dem Konsolidieren gibt es nur noch Wurzelknoten mit unterschiedlichem Rang. Definiere maxRank(n) als den höchstmöglichen Rang, den ein Knoten in einem Fibonacci-Heap der Größe n haben kann. (Berechnung von maxRank(n) später.)

5 Laufzeitanalyse Laufzeit von decreasekey(): Schlüssel neu setzen:O(1) cut:O(1) Cascading cuts: #cuts · O(1) Markieren:O(1) Gesamtkosten: O(#cuts)

6 Laufzeitanalyse Laufzeit von delete(): Falls der entfernte Knoten der Minimalknoten ist, sind die Kosten gleich wie bei deletemin: O(#links) + O(maxRank(n)) Ansonsten sind sie ähnlich wie bei decreasekey: cut:O(1) Cascading cuts: #cuts · O(1) Markieren:O(1) remove:O(1) Gesamtkosten: O(#cuts)

7 Analyse Beobachtungen: Bei deletemin beeinflusst die Zahl der link-Operationen die tatsächliche Laufzeit. Bei decreasekey (und delete) ist es die Zahl der cascading cuts. In beiden Fällen bekommen wir im schlimmsten Fall eine lineare Laufzeit: Aber: Wie häufig kann das passieren?

8 Amortisierte Analyse Beobachtungen: Bei deletemin beeinflusst die Zahl der link-Operationen die tatsächliche Laufzeit. Bei decreasekey (und delete) ist es die Zahl der cascading cuts. Idee: Spare dafür Guthaben an (Bankkonto-Paradigma)! Annahme: Die Kosten pro link und pro cut seien jeweils 1. (1)Sorge dafür, dass für jeden Wurzelknoten immer 1 Guthaben vorhanden ist, mit dem sich die link-Operation bezahlen lässt, wenn dieser Knoten an einen anderen angehängt wird. (2)Sorge dafür, dass für jeden markierten Knoten immer 2 Guthaben vorhanden sind. Damit kann man bei cascading cuts das Abtrennen (cut) dieses Knotens bezahlen und hat noch 1 übrig für (1).

9 Beispiel

10 Guthaben ansparen Bei welchen Operationen müssen wir etwas dazu bezahlen, um das Guthaben anzusparen? Neue Wurzelknoten können entstehen bei: –insert: gib dem neu eingefügten Wurzelknoten noch 1 dazu. –decreasekey: bezahle 1 für den abgetrennten Knoten dazu. –deletemin und delete: bezahle bei remove für jeden Sohn des entfernten Knotens 1 dazu, insgesamt also bis zu maxRank(n). Markierte Knoten können nur am Ende von decreasekey und delete entstehen: –Bezahle beim Markieren zusätzlich 2 für den markierten Knoten.

11 Amortisierte Kosten von insert Erstellen des Knotens:O(1) Einfügen in Wurzelliste:O(1) + O(1) Amortisierte Gesamtkosten:O(1)

12 Amortisierte Kosten von deletemin remove:O(1) + O(maxRank(n)) Erstellen des Rang-Arrays:O(maxRank(n)) link-Operationen:#links · O(1)wird vom Guthaben bezahlt! Restl. Kosten consolidate:O(maxRank(n)) Update Minimum-Zeiger:O(maxRank(n)) Amortisierte Gesamtkosten:O(maxRank(n))

13 Beispiel

14 Beispiel remove: Bezahle zusätzlich für jeden Sohn 1:

15 Beispiel link: Bezahle alle Kosten mit dem Guthaben.

16 Beispiel link: Bezahle alle Kosten mit dem Guthaben.

17 Beispiel link: Bezahle alle Kosten mit dem Guthaben.

18 Beispiel link: Bezahle alle Kosten mit dem Guthaben.

19 Beispiel link: Bezahle alle Kosten mit dem Guthaben.

20 Amortisierte Kosten von decreasekey Schlüsselwert neu setzen:O(1) cut:O(1) + O(1) Cascading cuts: #cuts · O(1)wird vom Guthaben bezahlt! Markieren:O(1) + 2 · O(1) Amortisierte Gesamtkosten:O(1)

21 Beispiel

22 Beispiel Bezahle für den ersten cut noch 1 zusätzlich:

23 Beispiel Bezahle für den ersten cut noch 1 zusätzlich:

24 Beispiel Alle weiteren cascading cuts werden komplett vom Guthaben bezahlt:

25 Beispiel Alle weiteren cascading cuts werden vom Guthaben bezahlt:

26 Beispiel Beim Markieren bezahle noch 2 extra:

27 Amortisierte Kosten von delete Falls der entfernte Knoten der Minimalknoten ist, sind die Kosten diejenigen von deletemin: O(maxRank(n)) Ansonsten: cut:O(1) Cascading cuts: #cuts · O(1)wird vom Guthaben bezahlt! Markieren:O(1) + 2 · O(1) remove:O(1) + O(maxRank(n)) Amortisierte Gesamtkosten: O(maxRank(n))

28 Amortisierte Analyse Amortisierte Kosten Insert:O(1) Accessmin:O(1) Deletemin:O(maxRank(n)) Decreasekey:O(1) Delete:O(maxRank(n)) Meld:O(1) Noch zu zeigen: maxRank(n) = O(log n). D.h. der maximale Rang eines Knotens in einem Fibonacci-Heap ist logarithmisch in der Größe n des Fibonacci-Heaps.

29 Berechnung von maxRank(n) Lemma 1: (Mindestrang von Söhnen) Sei N ein Knoten in einem Fibonacci-Heap und k = N.rank. Betrachte die Söhne C 1,..., C k von N in der Reihenfolge, in der sie (mit link) zu N hinzugefügt wurden. Dann gilt: (1)C 1.rank 0 (2) C i.rank i - 2für i = 2,..., k Beweis: (1) klar (2)Als C i zum Sohn von N wurde, waren C 1,..., C i-1 schon Söhne von N, d.h. es war N.rank i-1. Da durch link immer Knoten mit gleichem Rang verbunden werden, war beim Einfügen also auch C i.rank i-1. Seither kann C i höchstens einen Sohn verloren haben (wegen cascading cuts), daher muss gelten: C i.rank i - 2

30 Berechnung von maxRank(n) Lemma 2: (Mindestzahl von Nachkommen) Sei N ein Knoten in einem Fibonacci-Heap und k = N.rank. Sei size(N) = die Zahl der Knoten im Teilbaum mit Wurzel N. Dann gilt:size(N) F k k D.h. ein Knoten mit k Söhnen hat mind. F k+2 Nachkommen (inkl. sich selbst). Beweis: Sei S k = min {size(N) | N mit N.rank = k}, d.h. die kleinstmögliche Größe eines Baums mit Wurzelrang k. (Klar: S 0 = 1 und S 1 = 2.) Seien wieder C 1,..., C k die Söhne von N in der Reihenfolge, in der sie zu N hinzugefügt wurden.

31 Berechnung von maxRank(n) Beweis: Sei S(k) = min {size(N) | N mit N.rank = k}, d.h. die kleinstmögliche Größe eines Baums mit Wurzelrang k. (Klar: S(0) = 1 und S(1) = 2.) Seien wieder C 1,..., C k die Söhne von N in der Reihenfolge, in der sie zu N hinzugefügt wurden. Es ist size(N)

32 Berechnung von maxRank(n) Es ist size(N) S(k) =

33 Berechnung von maxRank(n) Satz: (maximaler Rang eines Knotens) Der maximale Rang maxRank(n) eines beliebigen Knotens in einem Fibonacci-Heap mit n Knoten ist beschränkt durch O(log n). Beweis: Sei N ein Knoten eines Fibonacci-Heaps mit n Knoten und sei k = N.rank. Es istn size(N) k (nach Lemma 2) Daher istk log (n) = O(log n)

34 Zusammenfassung Lineare Liste(Min-)Heap Fibonacci-Heap insert: O(1)O(log n) O(1) accessmin: O(1)O(1)O(1) deletemin: O(n) O(log n)O(log n)* decreasekey: O(1)O(log n) O(1)* delete: O(n) O(log n)O(log n)* meld:O(1) O(m log(n+m)) O(1) *Amortisierte Kosten