3. Übung Algorithmen I



Ähnliche Dokumente
2. Übung Algorithmen I


Übung Algorithmen I

3. Übung Algorithmen I

Abschnitt: Algorithmendesign und Laufzeitanalyse

Algorithmen & Datenstrukturen 1. Klausur

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Theoretische Grundlagen der Informatik

S7-Hantierungsbausteine für R355, R6000 und R2700

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Theoretische Informatik SS 04 Übung 1

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Kapiteltests zum Leitprogramm Binäre Suchbäume

Lehrer: Einschreibemethoden

Einführung in. Logische Schaltungen

Über Arrays und verkettete Listen Listen in Delphi

Sortierte Folgen 250

Kompetitive Analysen von Online-Algorithmen

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

15 Optimales Kodieren

Algorithmen II Vorlesung am

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Professionelle Seminare im Bereich MS-Office

OSF Integrator für Btracking und Salesforce Anleitung für die Nutzer

Prozentrechnung. Wir können nun eine Formel für die Berechnung des Prozentwertes aufstellen:

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Überblick. Lineares Suchen

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Primzahlen und RSA-Verschlüsselung

Algorithmen und Datenstrukturen Suchbaum

OPERATIONEN AUF EINER DATENBANK

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

4. Übung zu Algorithmen I 17. Mai 2017

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

20. Algorithmus der Woche Online-Algorithmen: Was ist es wert, die Zukunft zu kennen? Das Ski-Problem

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Programmieren I. Kapitel 7. Sortieren und Suchen

Objektorientierte Programmierung

Informationsblatt Induktionsbeweis

Algorithmen und Datenstrukturen

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Programmierkurs Java

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu.

Grundbegriffe der Informatik

Datenstrukturen und Algorithmen

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

Grundlagen der Informatik

Internet Explorer Version 6

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Wirtschaftsinformatik I

Grundlagen der Theoretischen Informatik, SoSe 2008

Zählen von Objekten einer bestimmten Klasse

GOLDESEL-Schulung Referat 05 Finanzcontrolling

Leichte-Sprache-Bilder

Einführung in die Programmierung für Wirtschaftsinformatik

ecaros2 - Accountmanager

Was ist Sozial-Raum-Orientierung?

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

1 topologisches Sortieren

Tragen Sie bitte im Anmeldefeld die Daten ein, die Sie von uns erhalten haben.

Satzhilfen Publisher Seite Einrichten

1. Software installieren 2. Software starten. Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software

5.2 Neue Projekte erstellen

Festigkeit von FDM-3D-Druckteilen

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Software Engineering Klassendiagramme Assoziationen

Statuten in leichter Sprache

Stand: Adressnummern ändern Modulbeschreibung

Vorkurs Informatik WiSe 15/16

Wichtige Forderungen für ein Bundes-Teilhabe-Gesetz

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Suchen und Sortieren Sortieren. Heaps

Übungen Programmieren 1 Felix Rohrer. Übungen

Die Post hat eine Umfrage gemacht

Programmiertechnik II

Teile und Herrsche Teil 2

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

HIER GEHT ES UM IHR GUTES GELD ZINSRECHNUNG IM UNTERNEHMEN

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Repetitionsaufgaben Wurzelgleichungen

13. Binäre Suchbäume

Objektorientierte Programmierung. Kapitel 12: Interfaces

Erstellen einer digitalen Signatur für Adobe-Formulare

Korrelation (II) Korrelation und Kausalität

Einführung in die Programmierung

Fotos in Tobii Communicator verwenden

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Tutorial: Homogenitätstest

Transkript:

Timo Bingmann, Christian Schulz INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS 1 KIT Timo Universität Bingmann, des LandesChristian Baden-Württemberg Schulz und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Institut für Theoretische www.kit.edu Informatik

Amortisierte Analyse Beispiel Binärzähler 000 0 2 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler 000 0 001 1 2 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler 000 0 001 1 010 2 2 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler 000 0 001 1 010 2 011 3 2 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler 000 0 001 1 010 2 011 3 100 4 2 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler 000 0 001 1 010 2 011 3 100 4 101 5 2 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler 000 0 001 1 010 2 011 3 100 4 101 5...β 2 β 1 β 0 i β i 2 i 2 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler Binärzähler: zähle von 0 bis m m Inkrementoperationen x = i β i2 i Function binary-increment() : β 0 β 0 + 1 i=0 : N 0 while β i = 2 do β i+1 β i+1 + 1 β i 0 i i + 1 000 0 001 1 010 2 011 3 100 4 101 5...β 2 β 1 β 0 i β i 2 i 3 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001111111 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001111111 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001111112 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001111120 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001111200 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001111200 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001112000 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001120000 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 001200000 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 002000000 4 Timo Bingmann, Christian Schulz

Beispiel Binärzähler binary-increment 001111111 010000000 4 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler 1 Kostenmodell: Jedes gekippte Bit kostet 1 2 jedes Bit einzeln Kippen! Operation Kosten 000 001 1 001 010 2 010 011 1 011 100 3 01 k 10 k k + 1 cost(i i + 1) 1 + Anzahl der endenden Einsen in bin(i) 5 Timo Bingmann, Christian Schulz

Amortisierte Analyse Beispiel Binärzähler T (m) seien Gesamtkosten für m Operationen amortisierten Kosten pro Operation definiert als T (m)/m amortisierten Kosten einer Inkrementoperation? a) O(1) b) O(log m) c) O(m) 6 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Aggregatmethode Kochrezept: Schätze T (m) direkt ab Operation Kosten 0000 0001 1 0001 0010 2 0010 0011 1 0011 0100 3 0100 0101 1 0101 0110 2 0110 0111 1 0111 1000 4... Beobachtung (m Ops): β 0 jedes mal gekippt β 1 jedes zweite mal gefoppt β 2 jedes vierte mal gefoppt β 3 jedes achte mal gefoppt... = m = m 2 = m 4 = m 8 T (m) m + m 2 + m 4 + m 8... i=0 m 2 j = 2m 7 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Aggregatmethode Kochrezept: Schätze T (m) direkt ab Operation Kosten 0000 0001 1 0001 0010 2 0010 0011 1 0011 0100 3 0100 0101 1 0101 0110 2 0110 0111 1 0111 1000 4... Beobachtung (m Ops): β 0 jedes mal gekippt β 1 jedes zweite mal gefoppt β 2 jedes vierte mal gefoppt β 3 jedes achte mal gefoppt... = m = m 2 = m 4 = m 8 T (m) m 2 = O(1) 7 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Bankkontomethode 1 Allgemein: t 1,..., t m die Laufzeiten der Einzeloperationen 2 t i Gebühr für i-te Operation 3 vor jeder Operation erhält Algorithmus Gehalt G 4 alle Operationen müssen aus Gehältern bezahlt werden 8 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Bankkontomethode 1 finde Gehalt G + Sparstrategie mit T (m) mg 2 Binärzähler: G = 2, Strategie: Zählvorgang genau ein Bit auf 1 gesetzt, dies kostet 1 Euro 9 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Bankkontomethode 1 finde Gehalt G + Sparstrategie mit T (m) mg 2 Binärzähler: G = 2, Strategie: Zählvorgang genau ein Bit auf 1 gesetzt, dies kostet 1 Euro anderer Euro wird gespart, um Bit auf 0 zu setzen 9 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Bankkontomethode 1 finde Gehalt G + Sparstrategie mit T (m) mg 2 Binärzähler: G = 2, Strategie: Zählvorgang genau ein Bit auf 1 gesetzt, dies kostet 1 Euro anderer Euro wird gespart, um Bit auf 0 zu setzen 3 Analyse: zum Zeitpunkt i: k-mal rücksetzen auf 0 und einmal Bit setzen finanziert durch k Euro aus dem Konto und 1 Euro Gehaltseingang 9 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Einzelkosten Cost(i) 5 4 3 2 1 Op 10 Timo Bingmann, Christian Schulz

Beispiel Binärzähler Summierte Kosten T(m) 11 10 9 8 7 6 5 4 3 2 1 11 Timo Bingmann, Christian Schulz Op

Beispiel Binärzähler Summierte Kosten 2m T(m) 11 10 9 8 7 6 5 4 3 2 1 12 Timo Bingmann, Christian Schulz Op

Beispiel Binärzähler T (m)/m 2 T(m) m 5 4 3 2 1 Op 13 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur wichtige Operationen: lookup(key k) : Data insert(key k, Data d) delete(key k) Ziel: Datenstruktur in der Operationen in amortisiert O ( n ) 14 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur Lookup wichtige Operationen: lookup(key k) : Data insert(key k, Data d) delete(key k) n n linear lookup(key k) in o(n) Elemente nicht komplett unsortiert 15 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur Lookup lookup(key k) : Data Vorgehen: durchsuche die Hotlist komplett durchsuche das geordnete Array mit binärer Suche n n Laufzeit: O ( n ) + O(log n) = O ( n ) 16 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur insert insert(key k, Data d) n Fall A: in Hotlist ist Platz nächste freie Position in Hotlist n Laufzeit: O(1) 17 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur insert insert(key k, Data d) Fall B: in Hotlist ist kein Platz sortiere Hotlist merge: führe sortierte Listen zusammen k erstes Element in neuer Hotlist Laufzeit: O ( n log( n) ) + O(n) = O(n) n n n + n 18 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur Amortisierung nach Zusammenführung sind n 1 Positionen in der Hotlist frei n insert-operationen bis zur nächsten Zusammenführung Zusammenführung hat Aufwand cn Also: spare bei jeder einfachen insert-operation c n an bezahle bei der letzten Operation cn 19 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur delete delete(key k): jedes Element bekommt valid -Bit lookup: suche k setze valid -Bit auf 0 Löschoperationen selten Laufzeit: O ( n ) + O(log n) = O ( n ) n n 20 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur delete delete(key k): bei mehr als O(1) Lösch-Ops zwischen zwei Zusammenführungen n Vorgehen ähnlich zu insert Reorganisation nach O ( n ) Lösch-Ops lookup funktioniert noch mit gleicher Laufzeit n Laufzeit: Analyse wie bei insert 21 Timo Bingmann, Christian Schulz

Beispiel Hotlist-Datenstruktur amortisierter Aufwand lookup(key k): Aufwand in O ( n ) insert(key k): Aufwand amortisiert in O ( n ) delete(key k): Aufwand amortisiert in O ( n ) 22 Timo Bingmann, Christian Schulz

Unbounded Array Wieviele Speicherzellen braucht ein Unbounded Array gleichzeitig für n Elemente? Worst-Case-Betrachtung es darf eine beliebige Folge von pushback und popback Operationen vorausgegangen sein a) 2n ± c b) 3n ± c c) 4n ± c d) 6n ± c 23 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 Aufwand bisher: reallocate(1), reallocate(2), reallocate(4), reallocate(8) 8 konstante Zuweisungsoperationen Amortisierte Kosten für n Einfüge-Operationen: T (n) = da T reallocate (n) = O(n) log 2 n i=0 T reallocate (2 i ) + n = O(n), 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 4 13 8 9 Einfügen benötigt 3(n 1) Speicherzellen falls maximales n bekannt, ist ein bounded array oft besser 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 4 13 8 Warum schrumpft das Array nicht? die Zukunft nicht bekannt (Stichwort Online-Algorithmus) folgendes pushback erneutes O(n) Anwachsen Folge von n solcher popback / pushback hat Laufzeit O ( n 2) 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 4 13 8 Warum schrumpft das Array nicht? die Zukunft nicht bekannt (Stichwort Online-Algorithmus) folgendes pushback erneutes O(n) Anwachsen Folge von n solcher popback / pushback hat Laufzeit O ( n 2) deshalb erst bei 1/4 schrumpfen, dann waren Ω (n) konstante Operationen seit dem letzten Anwachsen/Schrumpfen 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 4 13 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 4 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 nach Einfüge- und Löschops bis zu 4(n 1) Speicherzellen benötigt hier hilft auch kein bounded array verkettete Listen haben genau n Elemente, aber zusätzliche Zeiger es gibt nicht eine perfekte Datenstruktur für alle Anwendungen 24 Timo Bingmann, Christian Schulz

Unbounded Array live! 1 1 5 1 5 6 2 1 5 6 2 11 4 13 8 1 5 6 2 11 1 5 6 2 bei einer Größe von 4n schrumpft das Feld auf 2n es bleibt Platz für weitere Elemente während dem Schrumpfen: 6n Speicherzellen gleichzeitig belegt außer Speicherverwaltung bietet Schrumpfoperation ohne Kopieren 24 Timo Bingmann, Christian Schulz

Unbounded Array: Allgemeine Version Kompromiss: im schlimmsten Fall weniger Platz, dafür langsamer? 25 Timo Bingmann, Christian Schulz

Unbounded Array: Allgemeine Version Kompromiss: im schlimmsten Fall weniger Platz, dafür langsamer? Ja! Durch Wahl des: Vergrößerungsfaktors β (hier bisher immer 2) Schranke α (hier bisher immer 4) der verallgemeinerten Version: 25 Timo Bingmann, Christian Schulz

Unbounded Array: Allgemeine Version Kompromiss: im schlimmsten Fall weniger Platz, dafür langsamer? Ja! Durch Wahl des: Vergrößerungsfaktors β (hier bisher immer 2) Schranke α (hier bisher immer 4) der verallgemeinerten Version: realloziere βn verkleinere bei αn w n > 0 25 Timo Bingmann, Christian Schulz

Unbounded Array: Parameter-Tuning realloziere βn verkleinere bei αn w n > 0 amortisierte Laufzeiten bleiben asymptotisch gleich für β > 1, α > β. größeres β, α: schneller, benötigt aber mehr Speicherplatz 26 Timo Bingmann, Christian Schulz

Unbounded Array: Parameter-Tuning realloziere βn verkleinere bei αn w n > 0 amortisierte Laufzeiten bleiben asymptotisch gleich für β > 1, α > β. größeres β, α: schneller, benötigt aber mehr Speicherplatz kleineres β, α: langsamer, benötigt aber weniger Speicherplatz 26 Timo Bingmann, Christian Schulz

Unbounded Array: Parameter-Tuning realloziere βn verkleinere bei αn w n > 0 amortisierte Laufzeiten bleiben asymptotisch gleich für β > 1, α > β. größeres β, α: schneller, benötigt aber mehr Speicherplatz kleineres β, α: langsamer, benötigt aber weniger Speicherplatz Formeln (asymptotisch, Beispielwerte für β = 1.5, α = 2): 26 Timo Bingmann, Christian Schulz

Unbounded Array: Parameter-Tuning realloziere βn verkleinere bei αn w n > 0 amortisierte Laufzeiten bleiben asymptotisch gleich für β > 1, α > β. größeres β, α: schneller, benötigt aber mehr Speicherplatz kleineres β, α: langsamer, benötigt aber weniger Speicherplatz Formeln (asymptotisch, Beispielwerte für β = 1.5, α = 2): amortisierte Kosten für pushback: β β 1 = 3 (bisher 2) 26 Timo Bingmann, Christian Schulz

Unbounded Array: Parameter-Tuning realloziere βn verkleinere bei αn w n > 0 amortisierte Laufzeiten bleiben asymptotisch gleich für β > 1, α > β. größeres β, α: schneller, benötigt aber mehr Speicherplatz kleineres β, α: langsamer, benötigt aber weniger Speicherplatz Formeln (asymptotisch, Beispielwerte für β = 1.5, α = 2): amortisierte Kosten für pushback: amortisierte Kosten für popback: β β 1 β α β = 3 (bisher 2) = 3 (bisher 1) 26 Timo Bingmann, Christian Schulz

Unbounded Array: Parameter-Tuning realloziere βn verkleinere bei αn w n > 0 amortisierte Laufzeiten bleiben asymptotisch gleich für β > 1, α > β. größeres β, α: schneller, benötigt aber mehr Speicherplatz kleineres β, α: langsamer, benötigt aber weniger Speicherplatz Formeln (asymptotisch, Beispielwerte für β = 1.5, α = 2): amortisierte Kosten für pushback: β β 1 β α β = 3 (bisher 2) amortisierte Kosten für popback: = 3 (bisher 1) maximaler Speicherplatzbedarf: (α + β)n = 3.5n (bisher 6n) mindestens > 2n 26 Timo Bingmann, Christian Schulz

Hashtabellen: Beispielanwendung: Duplikaterkennung 27 Timo Bingmann, Christian Schulz

Duplikaterkennung Problem: Gegeben: Folge A := a 1, a 2,..., a n von Zahlen Frage: Enthält A ein oder mehrere Duplikate a i = a j, i j? 28 Timo Bingmann, Christian Schulz

Duplikaterkennung Problem: Gegeben: Folge A := a 1, a 2,..., a n von Zahlen Frage: Enthält A ein oder mehrere Duplikate a i = a j, i j? Ansatz 1: Löse Problem mit Sortieren Idee: Sortiere A A := a 1,..., a n. In A stehen Duplikate nebeneinander A von links nach rechts durchlesen liefert alle Duplikate Worst-Case Laufzeit: Ω(n log n) (siehe Vorlesung Sortieren & Co ) 28 Timo Bingmann, Christian Schulz

Duplikaterkennung Problem: Gegeben: Folge A := a 1, a 2,..., a n von Zahlen Frage: Enthält A ein oder mehrere Duplikate a i = a j, i j? Ansatz 2: Verwende eine Hashtabelle H (mit verketteten Listen) Idee: Füge a 1,..., a n nacheinander in H ein Zahl schon drin: Duplikat erkannt! Laufzeit: Erwartet O(n) Bei zufälliger Hashfunktion und wenn H mindestens Ω(n) Slots hat 28 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 9 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 9 18 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 42 9 18 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 42 9 25 18 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 42 9 25 33 18 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 42 9 25 33 18 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Beispiel Folge A := 9, 18, 42, 25, 33, 18, 104, Hashfunktion h(a) = a mod 7 0 1 2 3 4 5 6 42 9 25 33 18 Schon enthalten! 29 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Pseudocode 1: function hasduplicates(a : Sequence of N 0 ) : {true, false} 2: H := new HashTableWithChaining of N 0 with A slots 3: for all a A do 4: if H.find(a) NIL then return true 5: H.insert(a) 6: end do 7: return false 30 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Laufzeitanalyse Zwei Schritte 1 Erzeugen der Hashtabelle 2 Finden und Einfügen aller a i aus A = a 1,..., a n 31 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Laufzeitanalyse Zwei Schritte 1 Erzeugen der Hashtabelle Alle Slots mit Null-Zeiger initialisieren Zeit: O( A ), da Tabelle A Slots hat 2 Finden und Einfügen aller a i aus A = a 1,..., a n 31 Timo Bingmann, Christian Schulz

Erkennen von Duplikaten mittels Hashtabelle Laufzeitanalyse Zwei Schritte 1 Erzeugen der Hashtabelle Alle Slots mit Null-Zeiger initialisieren Zeit: O( A ), da Tabelle A Slots hat 2 Finden und Einfügen aller a i aus A = a 1,..., a n Zeit pro Einfügen: O(1) Zeit pro H.find(a): O(Listenlänge) Aber: Erwartete Laufzeit O(1) Denn: Tabelle hat A Slots Hierzu Satz aus Vorlesung: erwartete Listenlänge O(1) Gesamtzeit für Finden und Einfügen: erwartet O( A ) 31 Timo Bingmann, Christian Schulz

Hashtabellen in heutigen Programmiersprachen Java: bool hasduplicates(integer[] A) { HashMap<Integer,Integer> H = new HashMap<Integer,Integer>(2 * A.length()); for (int i = 0; i < A.length(); i++) { if ( H.get(A[i])!= null ) return true; H.put(A[i]); } return false; } 32 Timo Bingmann, Christian Schulz

Das Paging Problem Aufgabe: Nur begrenzt viele Speicherstellen s i (Blöcke, Cache, etc). {s i } = S {x i } = X Elemente x i müssen zur Verarbeitung in einer Speicherstelle s j geladen sein. Hierzu gibt es eine Operation Retrieve(x i ) s j und eine Write(s j, x i ), die hier nicht interessiert. 33 Timo Bingmann, Christian Schulz

Das LRU-Paging Problem Bei Retrieve(x i ) s j wird geprüft, ob x i bereits geladen ist, wenn ja wird die bestehende Speicherstellen zurückgeliefert, sonst wir eine Speicherstelle s j ausgewählt, zurück geschrieben, und mit x i geladen. Anforderung: im zweiten Fall, soll immer die älteste Speicherstelle zurückgeschrieben werden. Es sollen also immer die Ergebnisse der letzten S Retrieve(x i ) Aufrufe geladen sein, inklusive der Treffer aus dem ersten Fall. (least-recently-used (LRU) Page Replacement) 34 Timo Bingmann, Christian Schulz

Das LRU-Paging Problem Bei Retrieve(x i ) s j wird geprüft, ob x i bereits geladen ist, wenn ja wird die bestehende Speicherstellen zurückgeliefert, sonst wir eine Speicherstelle s j ausgewählt, zurück geschrieben, und mit x i geladen. Anforderung: im zweiten Fall, soll immer die älteste Speicherstelle zurückgeschrieben werden. Es sollen also immer die Ergebnisse der letzten S Retrieve(x i ) Aufrufe geladen sein, inklusive der Treffer aus dem ersten Fall. (least-recently-used (LRU) Page Replacement) Naive Methode: Die Speicherstellen mit Zeitstempel versehen. Alle zurückgelieferte Stellen werden gestempelt. Bei Retrieve(x i ) die Menge S einmal nach x i scannen und dabei die älteste Speicherstelle merken. 34 Timo Bingmann, Christian Schulz

Ein Erwartet O(1) Pager Hashtabelle nil nil nil nil nil nil x 4 1 x 8 2 x 6 3 x 2 4 nil nil x 1 6 x 9 5 nil Nach Retrieve(x i ) Folge x 4, x 8, x 6, x 2, x 9, x 1 nil 35 Timo Bingmann, Christian Schulz

next prev Ein Erwartet O(1) Pager Hashtabelle sentinel next prev x 4 1 nil next prev x 8 2 nil x 6 3 nil nil next prev x 2 4 nil nil nil prev next nil x 1 6 prev next x 9 5 nil Nach Retrieve(x i ) Folge x 4, x 8, x 6, x 2, x 9, x 1 nil 35 Timo Bingmann, Christian Schulz

next prev Ein Erwartet O(1) Pager Hashtabelle sentinel next prev x 4 1 nil next prev x 8 2 nil x 6 3 nil nil next prev x 2 4 nil nil nil prev next nil x 1 6 prev next x 9 5 nil Nach Retrieve(x i ) Folge x 4, x 8, x 6, x 2, x 9, x 1 Sentinel s next zeigt immer auf die älteste Speicherstelle, und prev auf die jüngste. nil 35 Timo Bingmann, Christian Schulz

next prev Ein Erwartet O(1) Pager Hashtabelle sentinel next prev x 4 1 nil next prev nil x 6 3 nil nil next prev x 2 4 nil nil nil prev next x 8 7 prev next x 1 6 prev next x 9 5 nil nil nil Nach Retrieve(x i ) Folge x 4, x 8, x 6, x 2, x 9, x 1, x 8 36 Timo Bingmann, Christian Schulz

next prev Ein Erwartet O(1) Pager Hashtabelle sentinel nil next prev nil x 6 3 nil nil next prev x 2 4 nil nil prev next x 3 8 x 8 7 prev next x 1 6 prev next x 9 5 nil nil nil nil Nach Retrieve(x i ) Folge x 4, x 8, x 6, x 2, x 9, x 1, x 8, x 3 37 Timo Bingmann, Christian Schulz