Algorithmen und Datenstrukturen



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

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

Algorithmen & Datenstrukturen 1. Klausur

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

Dictionary Definition

Hashing II. Übersicht. 1 Hashing und Verkettung. 2 Offene Adressierung

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

13. Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume

Primzahlen und RSA-Verschlüsselung

Algorithmen und Datenstrukturen Suchbaum

R. Brinkmann Seite Schriftliche Übung Mathematik Stochastik II (Nachschreiber) Jan. 2007

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

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!.

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen

Kapitel 5: Dynamisches Programmieren Gliederung

Algorithmen mit Python

Algorithmen und Datenstrukturen

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

Kap. 4.2: Binäre Suchbäume

8: Zufallsorakel. Wir suchen: Einfache mathematische Abstraktion für Hashfunktionen

Programmiertechnik II

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Konzepte der Informatik

Datenstrukturen und Algorithmen. Vorlesung 10

Also kann nur A ist roter Südler und B ist grüner Nordler gelten.

Suchen in Listen und Hashtabellen

Kurs 1613 Einführung in die imperative Programmierung

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

Zeichen bei Zahlen entschlüsseln

Die mittlere Zeit zum Auffinden eines Elements in einer Hash-Tabelle beträgt, unter realistischen Annahmen, O(1).

6.2 Perfekte Sicherheit

Algorithmen und Datenstrukturen

Vorlesung : Binäre Entscheidungsdiagramme (BDDs) Dr. Carsten Sinz

Professionelle Seminare im Bereich MS-Office

Informatik II, SS 2016

Grundbegriffe der Informatik

Theoretische Grundlagen des Software Engineering

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Markovketten. Bsp. Page Ranking für Suchmaschinen. Wahlfach Entscheidung unter Risiko und stat. Datenanalyse

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Grundlagen der Informatik

Abschnitt: Algorithmendesign und Laufzeitanalyse

11. Das RSA Verfahren und andere Verfahren

Anleitung Typo3-Extension - Raumbuchungssystem

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

Theoretische Grundlagen der Informatik WS 09/10

DAP2-Klausur

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Beispiel Zusammengesetzte Zufallsvariablen

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.

5. Übung zum G8-Vorkurs Mathematik (WiSe 2011/12)

Lenstras Algorithmus für Faktorisierung

WS 2008/09. Diskrete Strukturen

Objektorientierte Programmierung. Kapitel 12: Interfaces

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

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

Analysis I für Studierende der Ingenieurwissenschaften

Stand: Adressnummern ändern Modulbeschreibung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Wie halte ich Ordnung auf meiner Festplatte?

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Übungen zu C++ Kapitel 1

5.2 Neue Projekte erstellen

Informatikgrundlagen (WS 2015/2016)

1 Vom Problem zum Programm

10.6 Authentizität. Geheimhaltung: nur der Empfänger kann die Nachricht lesen

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

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

Windows 7: Neue Funktionen im praktischen Einsatz - Die neue Taskleiste nutzen

Wir machen neue Politik für Baden-Württemberg

B 2. " Zeigen Sie, dass die Wahrscheinlichkeit, dass eine Leiterplatte akzeptiert wird, 0,93 beträgt. (genauerer Wert: 0,933).!:!!

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

Was ich als Bürgermeister für Lübbecke tun möchte

Individuelle Formulare

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Profil A 49,3 48,2 50,7 50,9 49,8 48,7 49,6 50,1 Profil B 51,8 49,6 53,2 51,1 51,1 53,4 50, ,5 51,7 48,8

MATHEMATIK 3 STUNDEN. DATUM: 8. Juni 2009

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Verwaltungsnummer festlegen oder ändern mit Ausnahme der 1XPPHUSie bestätigen die Eintragungen mit Drücken der Taste Return.

Tipps und Tricks zu Netop Vision und Vision Pro

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

Was meinen die Leute eigentlich mit: Grexit?

Wie Sie beliebig viele PINs, die nur aus Ziffern bestehen dürfen, mit einem beliebigen Kennwort verschlüsseln: Schritt 1

Wann benötigen Sie eine neue Lizenz-Datei mit der Endung.pkg?

1 Mathematische Grundlagen

4 Aufzählungen und Listen erstellen

Transkript:

1 Algorithmen und Datenstrukturen Wintersemester 2015/16 12. Vorlesung Hashing Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I

2 Übungen Begründen Sie grundsätzlich alle Behauptungen außer die Aufgabe verlangt explizit keine Begründung. Pseudocode allein genügt nie! Algorithmen immer (auch) mit Worten erklären. Verweisen Sie dabei auf Zeilen Ihres Pseudocodes. Bitte geben Sie auf Ihren Lösungen immer die Nummer Ihrer Übungsgruppe an! Kommentieren Sie Ihren Java-Code beim Programmieren! Das hilft Fehler zu vermeiden. Außerdem verstehen Sie Ihren Code auch noch beim nächsten Mal, wenn Sie draufschauen. Das gleiche gilt für Ihren Pseudocode!

3 Test I: Ergebnisse 50 125 n = 175 Median = 14,5 arithm. Mittel = 14,2

4 Test II: Do, 15. Dez, 10:15 11:45, Zuse-HS Prioritätsschlange, Heap, HeapSort Zufallsexperimente, (Indikator-) Zufallsvariable, Erwartungswert Randomisiertes QuickSort Untere Schranke für WC-Laufzeit von vergleichsbasierten Sortierverfahren Linearzeit-Sortierverfahren Auswahlproblem (Median) Elementare Datenstrukturen Hashing (heute!)

5 What s the problem? Wörterbuch Spezialfall einer dynamischen Menge Anwendung: im Compiler Symboltabelle für Schlüsselwörter Abstrakter Datentyp stellt folgende Operationen bereit: Insert, Delete, Search Implementierung heute: Hashing (engl. to hash = zerhacken, kleinschneiden) Suchzeit: im schlechtesten Fall Θ(n), erwartet O(1) unter akzeptablen Annahmen

6-9 Direkte Adressierung Annahmen: Schlüssel aus kleinem Universum U ={0,..., m 1} Schlüssel paarweise verschieden (dyn. Menge!) Universum Menge der momentan benutzten Schlüssel 0 7 4 5 9 U K 1 2 6 8 3 0 1 2 3 info 1 info 2 info 4 info 5 info 6 m 1

6-17 Direkte Adressierung Annahmen: Schlüssel aus kleinem Universum U ={0,..., m 1} Schlüssel paarweise verschieden (dyn. Menge!) Abs. Datentyp HashDA(int m) ptr Insert(key k, info i) Delete(key k) ptr Search(key k) Implementierung T = new ptr[0..m 1] ptr[ ] T for j = 0 to m 1 do T [j] = nil // T [j] = Zeiger auf j. Datensatz // lege neuen Datensatz an // und initialisiere ihn mit i T [k] = new info(i) Speicher freigeben, auf den T [k] zeigt T [k] = nil Laufzeiten? Ins, Del, Search O(1) return T [k] im schlechtesten Fall

7 Hashing mit Verkettung Annahme: großes Universum U, d.h. U K Hashfunktion h : U {0, 1,..., m 1} U 0 k 4 k 1 K k 2 k 3 k 4 k 5 k 5 Kollision k 3 k 1 m 1 k 2

8-6 Hashing mit Verkettung Voraussetzungen: U K, Zugriff auf Hashfunktion h Abs. Datentyp ptr Insert(key k) Delete(ptr x) ptr Search(key k) Implementierung HashChaining( T = new ptr[0..m 1] ptr[ ] T int m) for j = 0 to m 1 do T [j] = List() Aufgabe: Schreiben Sie Insert, Delete & Search. Verwenden Sie Methoden der DS List!

8-9 Hashing mit Verkettung Voraussetzungen: U K, Zugriff auf Hashfunktion h Abs. Datentyp ptr Insert(key k) Implementierung HashChaining( T = new ptr[0..m 1] ptr[ ] T int m) for j = 0 to m 1 do T [j] = List() return T [h(k)].insert(k) Delete(ptr x) ptr Search(key k) T [h(x.key)].delete(x) return T [h(k)].search(k)

9 Analyse Definition: Die Auslastung α einer Hashtabelle sei n/m, also der Quotient der Anzahl der gespeicherten Elemente und der Tabellengröße. Bemerkung: α ist die durchschnittliche Länge einer Kette. Laufzeit: Θ(n) im schlimmsten Fall: z.b. h(k) = 0 k K. Annahme: Einfaches uniformes Hashing: jedes Element von U wird mit gleicher WK in jeden der m Einträge der Tabelle gehasht unabhängig von anderen Elementen. D.h. Pr[h(k) = i] = 1/m

10 Suche Fälle: 1) erfolglose Suche 2) erfolgreiche Suche Notation: n j = T [ j].length für j = 0, 1,..., m 1. Dann gilt: n = n 0 + n 1 + + n m 1. E[n j ] = n/m = α Satz. Beweis. Unter der Annahme des einfachen uniformen Hashings durchsucht eine erfolglose Suche erwartet α Elemente. Wenn die Suche nach einem Schlüssel k erfolglos ist, muss T [h(k)] komplett durchsucht werden. E [ T [h(k)].length ] = E[n h(k) ] = α.

11 Erfolgreiche Suche Satz. Unter der Annahme des einfachen uniformen Hashings durchsucht eine erfolgreiche Suche erwartet höchstens 1 + α/2 Elemente. Beweis. Noch ne Annahme: Jedes der n Elemente in T ist mit gleicher WK das gesuchte Element x. X # durchsuchte Elem. = # Elem. vor x in T [h(x)] + 1 zeitlich = # Elem., die nach x in T [h(x)] eingefügt wurden + 1 Sei x 1, x 2,..., x n die Folge der Schlüssel in der Reihenfolge des Einfügens. Definiere Indikator-ZV: X ij = 1 falls h(x i ) = h(x j ). Klar: E[X ij ] = Pr[X ij = 1] = 1/m räumlich [einf. unif. Hashing!]

12 Erfolgreiche Suche X = # Elem., die nach x in T [h(x)] eingefügt wurden + 1 E[X ] = 1 n n E [ 1 + # Elem., die nach x i in T [h(x i )] eingefügt wurden ] i=1 = 1 n n 1 + 1 n i=1 n E [ # Elem. x j mit j > i und h(x i ) = h(x j ) ] i=1 } {{ } E = n X ij j=i+1 Definiere Indikator-ZV X ij = 1 falls h(x i ) = h(x j ).

13 Zusammenfassung Ergebnisse Satz. Unter der Annahme des einfachen uniformen Hashings durchsucht beim Hashing mit Verkettung eine erfolgreiche Suche erwartet höch. 1 + α/2 Elemente erfolglose Suche erwartet α Elemente. Und Einfügen? Und Löschen? Satz. Unter der Annahme des einfachen uniformen Hashings laufen alle Wörterbuch-Operationen in (erwartet) konstanter Zeit, falls n = O(m).

14 Was ist eine gute Hashfunktion? 1. so zufällig wie möglich um der Annahme des einfachen uniformen Hashings möglichst nahe zu kommen. 2. Hashfunktion sollte die Schlüssel aus dem Universum U möglichst gleichmäßig über die m Plätze der Hashtabelle verteilen. Hashfunktion sollte Muster in der Schlüsselmenge K gut auflösen. Beispiel: U = Zeichenketten, K = Wörter der dt. Sprache einfach zu berechnen! h : nimm die ersten drei Buchstaben Zahl schlecht: viele Wörter fangen mit sch an selber Hashwert andere Buchst. haben keinen Einfluss

15 Annahme: Alle Schlüssel sind (natürliche) Zahlen. Suche also Hashfunktionen: N {0,..., m 1} Rechtfertigung: 33! 49 1 65 A 81 Q 97 a 113 q 34 " 50 2 66 B 82 R 98 b 114 r 35 # 51 3 67 C 83 S 99 c 115 s 36 $ 52 4 68 D 84 T 100 d 116 t 37 % 53 5 69 E 85 U 101 e 117 u 38 & 54 6 70 F 86 V 102 f 118 v 39 55 7 71 G 87 W 103 g 119 w 40 ( 56 8 72 H 88 X 104 h 120 x 41 ) 57 9 73 I 89 Y 105 i 121 y 42 * 58 : 74 J 90 Z 106 j 122 z 43 + 59 ; 75 K 91 [ 107 k 123 { 44, 60 < 76 L 92 \ 108 l 124 45-61 = 77 M 93 ] 109 m 125 } 46. 62 > 78 N 94 ^ 110 n 126 ~ 47 / 63? 79 O 95 _111 o 127 _ 48 0 64 @ 80 P 96 112 p Zum Beispiel: AW (65, 87) 10 American Standard Code of I nformation I nterchange = (1000001, 1010111) 2 1000001 1010111 2 = 65 128 + 87 = 8407 10

16 Divisionsmethode Hashfunktion h : N {0,..., m 1} k k mod m Beispiel: h(k) = k mod 1024 h(1026) = 2 h(2050) = 2 10 niedrigwertigste Stellen { }} { 1026 10 = 010000000010 2 2050 10 = 100000000010 2 D.h. die 2 höherwertigsten Stellen werden von h ignoriert Moral: Strategie: vermeide m = Zweierpotenz wähle für m eine Primzahl, entfernt von Zweierpotenz löst Muster gut auf

17 Multiplikationsmethode Hashfunktion h : N {0,..., m 1} k m ( ka mod 1 ), wobei 0 < A < 1. } {{ } gebrochener Anteil von ka d.h. ka ka Verschiedene Werte von A funktionieren verschieden gut. gut: z.b. A 5 1 2 [Knuth: The Art of Computer Programming III, 73] Vorteil ggü. Divisionsmethode: Wahl von m relativ beliebig. Insbesondere m = Zweierpotenz möglich. schnell berechenbar (in Java verschiebt a << s die Dualzahlendarstellung von a um s Stellen nach links)

18 Hashing mit offener Adressierung Alle Elemente werden direkt in der Hashtabelle gespeichert. Tabelle kann volllaufen α 1 Strategie zur Kollisionsauflösung: k U h(k, 4) K h(k, 1) k h(k, 0) h(k, 2) h(k, 3) Sondierfolge

19-5 Hashing mit offener Adressierung Abs. Datentyp HashOA(int m) int Insert(key k) int Search(key k) Implementierung T = new key[0..m 1] key[ ] T for j = 0 to m 1 do T [j] = 1 i = 0 repeat j = h(k, i) if T [j] == 1 then T [j] = k return j else i = i + 1 until i == m error table overflow Aufgabe: Schreiben Sie Search mit repeat-schleife!

19-1 Hashing mit offener Adressierung Abs. Datentyp HashOA(int m) int Insert(key k) Search...und Delete()? Umständlich! Dann lieber Hashing mit Verkettung! int Search(key k) Implementierung T = new key[0..m 1] key[ ] T for j = 0 to m 1 do T [j] = 1 i = 0 repeat j = h(k, i) k if T [j] == 1 then T [j] = k return j else i = i + 1 until i == m or T [j] == 1 error table overflow Aufgabe: return 1 Schreiben Sie Search mit repeat-schleife!

20 Berechnung von Sondierfolgen Hashfkt. für offene Adr. h : U {0,..., m 1} {0,..., m 1} h(k, 0), h(k, 1),..., h(k, m 1) heißt Sondierfolge (für k). Voraussetzungen: eine Sondierfolge ist eine Permutation von 0, 1,..., m 1 (Sonst durchläuft die Folge nicht alle Tabelleneinträge genau 1!) Existenz von gewöhnlicher Hashfkt h 0 : U {0,..., m 1} Verschiedene Typen von Sondierfolgen: Lineares Sondieren: Quadratisches Sondieren: Doppeltes Hashing: h(k, i) = (h 0 (k) + i) mod m h(k, i) = (h 0 (k) + c 1 i + c 2 i 2 ) mod m h(k, i) = (h 0 (k) + i h 1 (k)) mod m

21 Lineares Sondieren Hashfunktion h(k, i) = (h 0 (k) + i) mod m Beispiel: h 0 (k) = k mod 9 und m = 9 Problem: primäres Clustering Füge Schlüssel 4, 5, 12 ein! Es bilden sich schnell große Blöcke von besetzten Einträgen. hohe durchschnittliche Suchzeit! 8 7 6 5 4 3 2 1 0 5 4 12

22 Quadratisches Sondieren Hashfunktion h(k, i) = (h 0 (k) + c 1 i + c 2 i 2 ) mod m Beispiel: h 0 (k) = k mod 9 und m = 9 Problem: Problem: sekundäres Clustering Füge Schlüssel 4, 5, 12 ein! Die Größen m, c 1 und c 2 müssen zu einander passen, sonst besucht nicht jede Sondierfolge alle Tabelleneinträge. Falls h 0 (k) = h 0 (k ), so haben k und k dieselbe Sondierfolge! hohe Suchzeit bei schlechter Hilfshashfkt. h 0! und c 1 = c 2 = 1 8 7 6 5 4 3 2 1 0 5 4 12

23 Doppeltes Hashing Hashfunktion h(k, i) = (h 0 (k) + i h 1 (k)) mod m Vorteile: Frage: Antwort: Also: Sondierfolge hängt zweifach vom Schlüssel k ab! potentiell m 2 verschiedene Sondierfolgen möglich (bei linearem & quadratischem Sondieren nur m.) Was muss gelten, damit eine Sondierfolge alle Tabelleneinträge durchläuft? k = h 1 (k) und m müssen teilerfremd sein, d.h. ggt(k, m) = 1. [ggt(a, b) = Def. max{t : t a und t b}] z.b. m = Zweierpotenz und h 1 immer ungerade. oder m = prim und 0 < h 1 (k) < m für alle k.

24 Uniformes Hashing [kein neues Hashverfahren, sondern eine (idealisierte) Annahme...] Annahme: Satz: Die Sondierfolge jedes Schlüssels ist gleich wahrscheinlich eine der m! Permutationen von 0, 1,..., m 1. Unter der Annahme von uniformem Hashing ist die erwartete Anz. der versuchten Tabellenzugriffe bei offener Adressierung und erfolgloser Suche 1 1 α erfolgreicher Suche 1 α ln 1 1 α d.h. Suche dauert erwartet O(1) Zeit, falls α konst.

25 Zusammenfassung Hashing mit Verkettung mit offener Adressierung + funktioniert für n O(m) funktioniert nur für n m + gute erwartete Suchzeit: erfolglos: α [= n/m] erfolgreich: 1 + α 2 Listenoperationen langsam 10 [Modell: einfaches uniformes Hashing] 8 6 4 2 0 0.1 0.5 0.9 α langsam, wenn n m Sondiermethoden: lineares Sondieren quadratisches Sondieren doppeltes Hashing + gute erwartete Suchzeit: erfolglos: 1 1 α erfolgreich: 1 α ln 1 1 α [Modell: uniformes Hashing]