Algorithmen und Datenstrukturen

Ähnliche Dokumente
Amortisierte Laufzeitanalyse

Algorithmen und Datenstrukturen

Algorithm Engineering. Amortisierung. Stefan Edelkamp

Amortisierte Analyse. C. Komusiewicz 6.1 Amortisierte Analyse: Motivation 105

Übungen zu Algorithmentechnik WS 09/10

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Amortisierte Analyse

3. Übungsblatt zu Algorithmen I im SoSe 2017

Amortisierte Analysen

Datenstrukturen & Algorithmen Lösungen zu Blatt 5 FS 14

Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

12. Dynamische Datenstrukturen

Übungsklausur Algorithmen I

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 12

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Algorithmen und Datenstrukturen

Übung Algorithmen I

Informatik II, SS 2014

Übung Algorithmen und Datenstrukturen

Datenstrukturen & Algorithmen

Informatik II, SS 2018

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

1. Übung Algorithmentechnik

Algorithmen & Datenstrukturen Lösungen zu Blatt 9 HS 16

Informatik II Prüfungsvorbereitungskurs

2 Sortieren durch Vergleichen Eingabefolge a 1, a 2,..., a n 2, 1, 3 Sortieralg. Für festes n ist ein vergleichsbasierter Sortieralg. charakterisiert

Vorlesung Datenstrukturen

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit ** i=1

Übungsklausur Algorithmen I

13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)

Algorithmen und Datenstrukturen

ALP II Dynamische Datenmengen Datenabstraktion

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

Informatik II, SS 2014

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

13. Dynamische Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

ContainerDatenstrukturen. Große Übung 4

Algorithmen und Datenstrukturen


Abstrakte Datentypen und Datenstrukturen

Algorithmen und Datenstrukturen (für ET/IT)

11. Elementare Datenstrukturen

Grundlagen Algorithmen und Datenstrukturen Kapitel 13

Anwendungsbeispiel MinHeap

Grundlagen: Algorithmen und Datenstrukturen

16. Dynamische Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Abgabe: (vor der Vorlesung) Aufgabe 3.1 (P) Master-Theorem

Grundlagen: Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Kap. 4.7 Skiplisten. 15./16. VO DAP2 SS /10. Juni 2008

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Verbund/Struktur (record/struct)

Übung Algorithmen und Datenstrukturen

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

1. Übungsblatt zu Algorithmen II im WS 2011/2012

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

Voronoi-Diagramme. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK

Übung Algorithmen und Datenstrukturen

Kap. 4.7 Skiplisten. 14./15. VO DAP2 SS /16. Juni 2009

(27 - Selbstanordnende lineare Listen)

Informatik II, SS 2014

Transkript:

Algorithmen und Datenstrukturen Wintersemester 202/3 24. Vorlesung Amortisierte Analyse Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I

Hash-Tabellen Frage: Ziel: Problem: Lösung: Wie groß macht man eine Hash-Tabelle? So groß wie nötig, so klein wie möglich... Verhindere, dass die Tabelle überläuft oder dass Operationen ineffizient werden. Was tun, wenn man die maximale Anzahl zu speichernder Elemente vorab nicht kennt? Dynamische Tabellen! Idee: Charles E. Leiserson http://ocw.mit.edu/nr/rdonlyres/electrical-engineering-and-computer-science/6-046jfall-2005/lecturenotes/lec3.pdf

Dynamische Tabellen Idee: Wenn Tabelle voll, fordere doppelt so große Tabelle an (mit new). Kopiere alle Einträge von alter in neue Tabelle. Gib Speicher für alte Tabelle frei. Analyse: Antwort: Lüge! Insert() Insert(2) Insert(3) Insert(4) Insert(5) Insert(6) Insert(7)... Welche Laufzeit benötigen n Einfügeoperationen im schlimmsten Fall? Tabelle wird genau ( log 2 n + )-mal kopiert. Im schlimmsten (letzten!) Fall ist der Aufwand Θ(n). Also ist der Gesamtaufwand Θ(n log n)., genauer Θ(n). O 2 2 3 4 2 3 4 5 6 7 Let s see why...

Genauere Abschätzung: Aggregationsmethode Für i =,..., n sei c i = Kosten fürs i-te Einfügen. i 2 3 4 5 6 7 8 9 size i 2 4 4 8 8 8 8 6 c i 2 4 8 2 Einfügen Kopieren Also betragen die Kosten für n Einfügeoperationen log n 2 (n ) c i = n + 2 j n + 2log 2 (n )+ 2 j=0 < n + 2(n ) < 3n Θ(n) k j=0 q j = qk+ q 2 3 4 endl. geom. Reihe D.h. die durchschnittlichen ( amortisierten ) Kosten sind Θ(). 2 3 4 5 6 7

Amortisierte Analyse......bedeutet zu zeigen, dass die Operationen einer gegebenen Folge kleine durchschnittliche Kosten haben auch wenn einzelne Operationen in der Folge teuer sind! Auch randomisierte Analyse kann man als Durchschnittsbildung (über alle Ereignisse, gewichtet nach Wahrscheinlichkeit) betrachten. Bei amortisierter Analyse geht es jedoch um die durchschnittliche Laufzeit im schlechtesten Fall nicht im Erwartungswert! Wir betrachten 3 verschiedene Typen von amortisierter Analyse: Aggregationsmethode Buchhaltermethode Potentialmethode

Buchhaltermethode Tendentiell genauer als die Aggregationsmethode Verbindet mit jeder Operation op i amortisierte Kosten ĉ i, die oft nicht mit den tatsächlichen Kosten c i übereinstimmen. ĉ i > c i Wir legen etwas beiseite. c i > ĉ i Wir bezahlen teure Operationen mit vorher Beiseitegelegtem. Damit s klappt: wir dürfen nie in die Miesen kommen n n Guthaben ĉ i c i darf nicht negativ werden! Dann gilt i= n i= ĉ i i= n i= c i. D.h. amortisierte Kosten sind obere Schranke für tatsächliche Kosten!

Buchhaltermethode für dynamische Tabellen Jede Einfügeoperation op i bezahlt ĉ i = 3 e: e fürs tatsächliche Einfügen 2 e für die nächste Tabellenvergrößerung Wir verknüpfen die Teilguthaben mit konkreten Objekten der Datenstruktur. Damit wird deutlich, dass die DS nie Miese macht. 0 e 0 e 2 e 2 e 0 e 0 e 0 e 0 e 2 e 2 e 2 e 2 e Also sind amortisierte Kosten obere Schranke für tatsächliche Kosten! n i= c i n i= ĉ i = 3n = Θ(n) D.h. die (tats.) Kosten für n Einfügeoperationen betragen Θ(n).

Buchhaltermethode: noch n Beispiel Stapel verwaltet sich ändernde Menge nach LIFO-Prinzip Abs. Datentyp boolean Empty() Push(key k) key Pop() key Top() Multipop(int k) neu! Implementierung while not Empty() and k > 0 do Pop() k = k

Buchhaltermethode: Stapel mit Multipop Betrachte Folge von Push-, Pop- und Multipop-Operationen. Operation i tatsächliche Kosten c i amortisierte Kosten ĉ i Push 2 Pop 0 Multipop(k i ) min{k i, size i } 0 Geht das gut??? Ja! D.h. Folge von n Op. dauert Θ(n) Zeit. Zeige: Amortisierte Kosten bezahlen immer für die echten! Jede Push-Operation legt einen Teller auf den Stapel. Dafür bezahlt sie e und legt noch e auf den Teller. Jede (Multi-)Pop-Operation wird mit den Euros auf den Tellern, die sie wegnimmt, komplett bezahlt.

Potentialmethode Idee: Betrachte Bankguthaben (siehe Buchhaltermethode) als physikalische Größe, die den augenblicklichen Zustand der DS beschreibt. Ziel: op op 2 op n Datenstruktur D 0 D... D n Wähle Potential Φ : D i R. O.B.d.A. Φ(D 0 ) = 0 Bank macht keine Miesen. Also fordern wir Φ(D i ) 0 für i =,..., n. Potentialdifferenz Def. ĉ i = c i + Φ(D i ), wobei Φ(D i ) = Φ(D i ) Φ(D i ) ( ci + Φ(D i ) Φ(D i ) ) Folge: n i= ĉi = n i= teleskopierende Summe = n i= c i + Φ(D n ) Φ(D 0 ) n i= c i D.h. amortisierte Kosten bezahlen für echte Kosten.

Potentialmethode: Stapel mit Multipop To do: Definiere Potentialfunktion in Abhängigkeit vom aktuellen Zustand des Stapels! Idee: Prüfe: Was sind die amort. Kosten? Also: Nimm Φ(D i ) = size i, also aktuelle Stapelgröße. Φ(D 0 ) = 0 und Φ(D ),..., Φ(D n ) 0. Falls die i-te Operation eine Push-Operation ist: Φ(D i ) = + und ĉ i = c i + ΦD i = + = 2 Falls die i-te Operation eine Multipop-Operation ist: Φ(D i ) = min{k i, size i } c i = + min{k i, size i } ĉ i = c i + ΦD i = 0, dito mit Pop (k i = ). Amortisierte Kosten pro Operation O(). Echte Kosten für n Oper. im worst case O(n).

Zusammenfassung Zeige mit amortisierter Analyse, dass die Operationen einer gegebenen Folge kleine durchschnittliche Kosten haben auch wenn einzelne Operationen in der Folge teuer sind! Drei Typen von amortisierter Analyse: Aggregationsmethode Buchhaltermethode Potentialmethode Summiere tatsächliche Kosten (oder obere Schranken dafür) auf. Verbinde Extrakosten mit konkreten Objekten der DS und bezahle damit teure Operationen. Definiere Potential der gesamten DS, so dass mit der Potentialdifferenz teure Operationen bezahlt werden können.

Übungsaufgaben zur amortisierten Analyse (I) Gegeben sei ein gewöhnlicher MinHeap, dessen Methoden Insert und ExtractMin im schlechtesten Fall O(log n) Zeit brauchen. Zeigen Sie mit der Potentialmethode, dass Insert amortisiert O(log n) Zeit und ExtractMin amortisiert O() Zeit benötigt.

Übungsaufgaben zur amortisierten Analyse (II) Entwerfen Sie eine Datenstruktur zum Verwalten einer dynamischen Menge von Zahlen. Die DS soll 2 Methoden haben: Insert zum Einfügen einer Zahl und DeleteLargerHalf zum Löschen aller Zahlen aus der Datenstruktur, die größer oder gleich dem aktuellen Median der Zahlenmenge sind. Beide Methoden sollen amortisiert O() Zeit benötigen. Tipp: Verwenden Sie eine Liste!. Beschreiben Sie Ihren Entwurf der Datenstruktur einschließlich der beiden Methoden in Worten. 2. Analysieren Sie mithilfe der Buchhaltermethode. Geben Sie die amortisierten Kosten, die Sie mit Insert und DeleteUpperHalf verbinden, exakt an.