Algorithmen und Datenstrukturen II: Hashverfahren

Ähnliche Dokumente
4. Hashverfahren. geg.: Wertebereich D, Schlüsselmenge S = {s 1,..., s n } D. Menge A von Speicheradressen; oft: A = {0,..., m 1}

Algorithmen & Datenstrukturen Lösungen zu Blatt 9 HS 16

Kapitel 9. Hashverfahren. 9.1 Einführung

Untersuchen Sie, inwiefern sich die folgenden Funktionen für die Verwendung als Hashfunktion eignen. Begründen Sie Ihre Antwort.

Multiplikationsmethode. Informatik I. goldener Schnitt. Der goldene Schnitt. Einführung. Rainer Schrader. 30. Mai Konstruktionsmethode

4.4.1 Statisches perfektes Hashing. des Bildbereichs {0, 1,..., n 1} der Hashfunktionen und S U, S = m n, eine Menge von Schlüsseln.

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

Seminar Datenbanken Martin Gerstmann

Algorithmen und Datenstrukturen 2

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

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

Algorithmen und Datenstrukturen

Suchen in Listen und Hashtabellen

Einführung in die Informatik Hashtables

Bäume, Suchbäume und Hash-Tabellen

Klausur Informatik B April Teil I: Informatik 3

34. Algorithmus der Woche Hashing

Die Menge C der komplexen Zahlen wird im Kapitel Weitere Themen behandelt.

Probabilistische Primzahltests

Hashing. Algorithmen und Datenstrukturen II 1

Vortrag zum Proseminar: Kryptographie

! DBMS organisiert die Daten so, dass minimal viele Plattenzugriffe nötig sind.

Algorithmen und Datenstrukturen 1

Komplexität von Algorithmen

4. ggt und kgv. Chr.Nelius: Zahlentheorie (SS 2007) 9

Algorithmen und Datenstrukturen 1

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Algorithmen & Programmierung. Rekursive Funktionen (1)

Grundlagen der Programmierung

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 8. Zufallszahlen Generatoren Anwendungen

Algorithmen und Datenstrukturen SS09. Foliensatz 12. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

Kryptographie und Codierungstheorie

Public-Key-Verschlüsselung und Diskrete Logarithmen

Randomisierte Algorithmen 2. Erste Beispiele

Kapitel 5: Dynamisches Programmieren Gliederung

6-1 A. Schwill Grundlagen der Programmierung II SS 2005

Algorithmische Intelligenz. Amortisierung. Stefan Edelkamp

4: Algebraische Strukturen / Gruppen

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

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 5, Donnerstag, 20.

Algorithmentheorie Randomisierung. Robert Elsässer

Diskrete Mathematik Kongruenzen

2. Symmetrische Gruppen

Inhaltsverzeichnis. Einführende Bemerkungen 11. Das Fach Informatik 11 Zielsetzung der Vorlesung Grundbegriffe

Faktorisierung ganzer Zahlen mittels Pollards ρ-methode (1975)

Dynamisches Huffman-Verfahren

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

1 Vorbereitung: Potenzen 2. 2 Einstieg und typische Probleme 3

13. Der diskrete Logarithmus

1 Zahlentheorie. 1.1 Kongruenzen

Lösung zur Klausur zu Krypographie Sommersemester 2005

7 Der kleine Satz von Fermat

Kapitel 2. Ganze Zahlen. 2.1 Teilbarkeit

WS 2009/10. Diskrete Strukturen

OPERATIONEN AUF EINER DATENBANK

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

INTERVALLBÄUME. Tanja Lehenauer, Besart Sylejmani

Inverted Files for Text Search Engines

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Formale Grundlagen 2008W. Vorlesung im 2008S Institut für Algebra Johannes Kepler Universität Linz

1.2 Eigenschaften der ganzen Zahlen

Arbeitsblatt 2 Übungen zu Mathematik I für das Lehramt an der Grund- und Mittelstufe sowie an Sonderschulen H. Strade, B. Werner WiSe 06/

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 4: Zahlentheorie

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

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Dr. Thomas Neumann

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.

Algorithmen II Vorlesung am

Algorithmen & Datenstrukturen 1. Klausur

Kommunikationsalgorithmus RSA

Suchen. lineare Suche, binäre Suche, divide and conquer, rekursive und iterative Algorithmen, geordnete Daten, Comparable

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

Zahlentheorie I. smo osm. Thomas Huber. Inhaltsverzeichnis. Aktualisiert: 1. August 2016 vers Teilbarkeit 2.

Studienmaterial Einführung in das Rechnen mit Resten

Kombinatorik. Additions- und Multiplikationsgesetz

Einführung in die Kryptographie - Multiple Choice Quiz

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Mathematische Grundlagen der Kryptografie (1321)SoSe 06

(27 - Selbstanordnende lineare Listen)

Gleichungen und Ungleichungen

31 Polynomringe Motivation Definition: Polynomringe

Hast du auch wirklich versucht, die Aufgaben einmal selbständig zu lösen? Wenn nicht, tue es, bevor du dir die Lösungen anschaust!

Ganzzahlige Division mit Rest

Kapitel 3. Speicherhierachie. Beispiel für Cache Effekte. Motivation Externspeicheralgorithmen. Motivation Für Beachtung von Cache Effekten

Der Euklidische Algorithmus Dieter Wolke

Algebra und Diskrete Mathematik, PS3. Sommersemester Prüfungsfragen

Prof. S. Krauter Dezimalbruchdarstellung rationaler Zahlen DezDarst.doc. Über die Darstellung von rationalen Zahlen als Dezimalbrüche.

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

$Id: ring.tex,v /05/03 15:13:26 hk Exp $

Triangulierung von einfachen Polygonen

8 Komplexitätstheorie und Kryptologie

Mengenlehre. ALGEBRA Kapitel 1 MNProfil - Mittelstufe KZN. Ronald Balestra CH Zürich Name: Vorname:

3 Vom Zählen zur Induktion

Zufallszahlen erzeugen

ADS: Algorithmen und Datenstrukturen 2

Theoretische Informatik Kap 2: Berechnungstheorie

Normalengleichungen. Für eine beliebige m n Matrix A erfüllt jede Lösung x des Ausgleichsproblems Ax b min die Normalengleichungen A t Ax = A t b,

3. Diskrete Mathematik

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Surjektive, injektive und bijektive Funktionen.

Theoretische Informatik SS 03 Übung 3

Transkript:

Algorithmen und Datenstrukturen II: Hashverfahren Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 10.05.2017 16:21 Inhaltsverzeichnis Hashverfahren.................................... 2 Kollisionen..................................... 2 Wahl der Hashfunktion............................... 3 Divisions-Rest-Methode.............................. 3 Die multiplikative Methode............................ 3 Weitere Methoden................................. 4 Perfektes Hashing.................................. 4 Universelles Hashing................................ 4 Konstruktion einer universellen Klasse von Hashfunktionen........... 5 Hashverfahren mit Verkettung der Überläufer.................. 5 Offene Hashverfahren................................ 6 Entfernen von Schlüsseln bei offenen Hashverfahren............... 6 Schema für offene Hashverfahren......................... 6 Suchen nach Schlüssel k.............................. 6 Einfügen eines Schlüssels k............................. 7 Entfernen eines Schlüssels k............................ 7 Lineare Sondieren.................................. 7 Quadratisches Sondieren.............................. 7 Uniformes und zufälliges Sondieren........................ 7 Double Hashing................................... 8 Weitere Verfahren.................................. 8 Dynamische Hashverfahren............................. 8 Dynamische Hashverfahren (2).......................... 9 Lineares Hashing.................................. 9 1

Lineares Hashing (2)................................ 9 Lineares Hashing (3)................................ 10 Virtuelles Hashing................................. 10 Hashverfahren bisher jeder Datensatz durch eindeutigen Schlüssel kk gekennzeichnet zur Suche mehrere Schlüsselvergleiche statt Schlüsselvergleiche Berechnung wo der Datensatz mit Schlüssel k gespeichert ist Datensätze werden in linearem Feld mit Indizes 0,..., m 1 gespeichert Hashtabelle m ist Größe der Hashtabelle Hashfunktion h : K {0,..., m 1} ordnet jedem Schlüssel k einen Index h(k) mit 0 h(k) m 1 zu, die Hashadresse für Hashtabelle der Größe m, die gerade n Schlüssel speichert, heißt α = n/m Belegungsdichte Kollisionen Hashfunktion ist im Allgemeinen nicht injektiv zwei Schlüssel k, k mit h(k) = h(k ) heißen Synonyme ergeben Adresskollision Forderung an Hashverfahren 1. möglichst wenig Kollisionen Wahl einer guten Hashfunktion 2. Adresskollisionen sollen möglichst effizient aufgelöst werden d.h. Hashverfahren = Hashfunktion + Überlaufstrategie im schlimmsten Fall sind Hashverfahren sehr ineffizient im Durchschnitt aber weitaus effizienter als Schlüsselvergleiche nicht abhängig von Anzahl gespeicherter Schlüssel Letzte Änderung: 10.05.2017 16:21 2

Wahl der Hashfunktion gute Hashfunktion leicht und schnell berechenbar gleichmäßige Verteilung der zu speichernden Datensätze im Adressbereich gut verteilt, selbst wenn Schlüssel nicht gut verteilt sind Adresskollisionen auch bei optimal gewählter Hashfunktion Geburtstags-Paradoxon: Wenn mindesten 23 Personen in einem Raum sind, haben wahrscheinlich 2 davon am gleichen Tag des Jahres Geburtstag. Allgemein: wenn eine Hashfunktion πm/2 Schlüssel auf eine Hashtabelle der Größe m abbildet, gibt es wahrscheinlich eine Adresskollisionen für m = 365 gilt πm/2 = 23,... im Folgenden werden nur nicht negative ganzahlige Schlüssel betrachtet Divisions-Rest-Methode nahe liegendes Verfahren zur Erzeugung Hashadresse h(k), 0 h(k) m 1 zu k N 0 ist h(k) = k mod m entscheidend: gute Wahl von m schlecht: gerade m h(k) gerade wenn k gerade und ungerade wenn k ungerade Potenz der Basis des Zahlensystems nur letzte Stellen zählen, Rest ist weg praktisch bewährt: Primzahl die keine der Zahlen r n ± j teilt, mit r Basis des Zahlensystems der Schlüssel und n und j kleine nicht negative ganze Zahlen Die multiplikative Methode der gegebene Schlüssel wird mit einer irrationalen Zahl multipliziert, der ganzzahlige Anteil des Resultats wird abgeschnitten verschiedene Werte zwischen 0 und 1 für verschiedene Schlüssel für Schlüssel 1, 2, 3,... ziemlich gleichmäßig verteilt im Interval [0, 1) Letzte Änderung: 10.05.2017 16:21 3

für alle Zahlen, 0 Θ 1, führt der goldene Schnitt Φ 1 = 5 1 2 0, 6180339887 zur gleichmäßigsten Verteilung. Wir erhalten als Hashfunktion h(k) = m(kφ 1 kφ 1 ) Weitere Methoden Ziffernanalyse Mid-square-Methode Faltung algebraische Verschlüsselung Studie hat festgestellt, dass nach Divisions-Rest-Methode arbeitende Hashfunktion im Durchschnitt die besten Resultate liefert Perfektes Hashing Anzahl der zu speichernden Schlüssel nicht größer als Anzahl Speicherplätze kollisionsfreie Speicherung möglich wir ordnen die Schlüssel lexikografisch und bilden jeden auf seine Ordnungsnummer ab Menge möglicher Schlüssel muss vorab bekannt sein perfekte Hashfunktion Anwendungsfälle nur selten, z.b. Zuordnung von Schlüsselwörtern einer Programmiersprache zu festen Plätzen einer Symboltabelle Universelles Hashing sobald Hashfunktion fest, kann man viele Schlüssel finden, die auf die selbe Hashadresse abgebildet werden Lösung: Hashfunktion aus einer sorgfältig gewählten Menge H aus Hashfunktionen auswählen sei H endliche Kollektion von Hashfunktionen, so dass Letzte Änderung: 10.05.2017 16:21 4

jede Funktion h H jeden Schlüssel im Universum K aller möglichen Schlüssel auf eine Hashadresse aus {0,..., m 1} abbildet H heißt universell, wenn für je zwei verschiedene Schlüssel x, y K gilt: {h H:h(x)=h(y)} H 1 m Konstruktion einer universellen Klasse von Hashfunktionen Annahmen alle Schlüssel sind nicht negative ganze Zahlen K = p eine Primzahl zur Vereinfachung: K = {0,..., p 1} für zwei beliebige Zahlen a {1,..., p 1} und b {0,..., p 1} sei die Funktion h a,b : K {0,..., m 1} wie folgt definiert: h a,b (x) = ((ax + b) mod p) mod m Dann gilt: Die Klasse H = {h a,b 1 a < p und 0 b < p} ist eine universelle Klasse von Hashfunktionen Beweis in Ottmann & Widmayer, Algorithmen und Datenstrukturen Hashverfahren mit Verkettung der Überläufer Aufgabe Lesen Sie den Abschnitt 4.2 aus Ottmann & Widmayer Überlegen Sie sich eine Implementierung in C++: TG1: Separate Verkettung der Überläufer TG2: Direkte Verkettung der Überläufer Sie können sich auf das auf Seite 198 angegebene Beispiel beschränken: Größe der Hashtabelle m = 7 K = 0, 1,..., 500 h(k) = k mod m Letzte Änderung: 10.05.2017 16:21 5

Offene Hashverfahren vorher: Verkettung der Überläufer außerhalb der Hashtabelle heißen geschlossene Hashverfahren bei offenen Hashverfahren versucht man diese in der Hashtabelle unterzubringen wenn also Position h(k) in der Hashtabelle t beim Einfügen von k bereits belegt ist, muss eine andere offene Stelle nach festen Regeln gesucht werden Folge der zu betrachtenden Speicherplätze für einen Schlüssel heißt Sondierungsfolge zu diesem Schlüssel problematisch ist das Entfernen von Schlüsseln Warum? Lösung? Entfernen von Schlüsseln bei offenen Hashverfahren wenn ein Schlüssel entfernt wird, kann der in der Sondierungsfolge dahinter liegende nicht mehr gefunden werden Lösung: Schlüssel werden nicht gelöscht, sondern nur als gelöscht makiert nicht sehr effizient offene Hashverfahren wenn möglichst wenig entfernt wird Schema für offene Hashverfahren für die meisten geeignet sei s(j, k) eine Funktion, so dass (h(k) s(j, k)) mod m für j = 0, 1,..., m 1 eine Sondierungsfolge bildet, d.h. Permutation aller Hashadressen Es sei stets noch mindestens ein Platz in der Hashtabelle frei Suchen nach Schlüssel k beginne mit Hashadresse i = h(k) solange k nicht in t[i] gespeichert ist und t[i] nicht frei ist, suche weiter bei i = (h(k) s(j, k)) mod m, für aufsteigende Werte von j falls t[i] belegt ist, wurde k gefunden Letzte Änderung: 10.05.2017 16:21 6

Einfügen eines Schlüssels k wir nehmen an, dass k nicht in t vorkommt beginne mit Hashadresse i = h(k) solange t[i] belegt ist mache weiter bei i = (h(k) s(j, k)) mod m, für aufsteigende Werte von j trage k bei t[i] ein Entfernen eines Schlüssels k suche k war Suche erfolgreich, ist i die Adresse an der k gefunden wurde markiere t[i] als entfernt Lineare Sondieren Sondierungsfolge h(k), h(k) 1, h(k) 2,..., 0, m 1,..., h(k) + 1 also Sondierungsfunktion s(j, k) = j Beispiel, Buch Seite 206 Quadratisches Sondieren um die primäre Häufung des linearen Sondierens zu vermeiden es wird mit quadratisch wachsendem Abstand sondiert Sondierungsfolge h(k), h(k) + 1, h(k) 1, h(k) + 4, h(k) 4,... also Sondierungsfunktion s(j, k) = ( j/2 ) 2 ( 1) j Beispiel, Buch Seite 207 Uniformes und zufälliges Sondieren auch bei quadratischem Sondieren Häufung, da Sondierungsfolge für alle Synonyme gleich Letzte Änderung: 10.05.2017 16:21 7

beim uniformen Sondieren ist die Folge s(j, k) eine Permutation der Hashadressen die nur von k abhängt alle der m! Permutation sollen mit gleicher Wahrscheinlichkeit verwendet werden es wird vermutet, dass die Anzahl der Kollisionen minimiert wird sehr aufwändig praktisch umzusetzen beim zufälligen Sondieren wird in Abhängikeit von k eine zufällige Hashadresse für s(j, k) gewählt Double Hashing Effizienz des uniformen Hashings wird bereits annähernd erreicht, wenn für Sondierungsfolge eine zweite Hashfunktion verwendet wird Sondierungsfolge für k: h(k), h(k) h (k), h(k) 2 h (k),..., h(k) (m 1)h (k) also Sondierungsfunktion s(j, k) = j h (k) h (k) muss so gewählt werden, dass für alle Schlüssel k die o.a. Sondierungsfolge eine Permutation der Hashadressen bilden h (k) unabhängig von h(k) wählen, da sonst Synonyme gleiche Sondierungsreihenfolge haben Beispiel & Brents Algorithmus & Binärbaumsondieren Buch S. 211-215 Weitere Verfahren Ordered Hashing geordnet bzgl. Sondierungsfolge Robin-Hood-Hashing Schlüssel werden umgeordnet um die Länge der längsten Sondierungsfolge zu verringern Dynamische Hashverfahren Lesen Sie den Abschnitt 4.4 bis 4.4.1 ausschließlich Letzte Änderung: 10.05.2017 16:21 8

Dynamische Hashverfahren (2) Verfahren für stark wachsende oder schrumpfende Datenbestände Blöcke fester Größe die mehrere Datensätze speichern können statt Hashtabelle Datei aus Blöcken Hashfunktion berechnet den Block keine Probleme solange es nicht mehr Synonyme gibt als in einen Block passen eine Datei mit m Blöcken wächst durch Anhängen eines Blockes und schrumpft durch Abhängen eines Blockes besondere Problematik: beim Verändern von m muss die Hashfunktion so geändert werden, das trotzdem alle Schlüssel noch gefunden werden Lineares Hashing Hashfunktion h besteht höchstens aus zwei einfachen Hashfunktionen h 1 und h 2, die jeweils die gesamte Hashdatei adressieren für eine anfängliche Dateigröße von m 0 Blöcken und einer aktuellen Größe von m Blöcken gilt: m 0 2 l m < m 0 2 l+1 für eine natürliche Zahl l h 1 adressiert den Adressbereich 0...m 0 2 l 1 und h 2 den Bereich 0...m 0 2 l+1 1 je nach Schlüssel k gilt dann h 2 (k) = h 1 (k) oder h 2 (k) = h 1 (k) + m 0 2 l der Dateilevel l gibt dabei die Anzahl der kompletten Dateiverdoppelungen an Lineares Hashing (2) h 2 (k) verteilt also die Datensätze des Blocks h 1 (k) nach Einfügen eines leeren Blocks mit der Adresse m ergibt sich die Adresse i = m m 0 2 l als Adresse des Blocks mit den zu verteilenden Datensätzen i durchläuft also der Reihe nach die Adressen 0 bis m 0 2 l 1 h 1 ist dann für die Schlüssel anzuwenden mit i h 1 (k) m o 2 l 1 für Schlüssel mit 0 h 1 (k) < i, ist h 2 anzuwenden Letzte Änderung: 10.05.2017 16:21 9

geeignete Wahl für h 1 und h 2 beispielsweise h 1 (k) = k mod (m 0 2 l ) h 2 (k) = k mod (m 0 2 l+1 ) Lineares Hashing (3) nächste zu splittende Seite ist unabhängig von einzufügendem Datensatz daher werden zusätzlich Ketten von Blöcken (in eigenem Speicherbereich) für Überläufer gebildet Erweitern der Datei üblicherweise wenn Belegungsfaktor n/(b m) als Folge einer Einfügeoperation überschritten wird wird ein anderer Schwellenwert beim Entfernen unterschritten, wird verkleinert Virtuelles Hashing im Gegensatz zu linearem Hashing werden Überlaufblöcke vollständig vermieden sobald Einfügeoperation in einem bereits vollen Block durchgeführt werden soll: Verdoppeln der Größe der Hashdatei es sollen aber nur die Datensätze des einen Blockes verteilt werden zusätzlich Bittabelle um zu wissen welche Hashfunktion genutzt werden soll Letzte Änderung: 10.05.2017 16:21 10