Referat von Kim Schröer – Intelligente Dateisysteme WS13/14

Slides:



Advertisements
Ähnliche Präsentationen
Beispiel: RSA Man nehme 2 große Primzahlen p und q. p = 3 , q = 5
Advertisements

Beispiel zum RSA-Algorithmus
Strukturen in C Spelz, Sievers, Bethke.
Hochschule Fulda – FB ET Sommersemester 2010
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Eine dynamische Menge, die diese Operationen unterstützt,
Vorlesung Programmieren II
GIN 2 – Vorlesung zu Hashing, 31. Mai 2005 Prof. Dr. W. Conen FH Gelsenkirchen SS 2005.
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Prof. Dr. T. Kudraß1 Hash-Verfahren. Prof. Dr. T. Kudraß2 Einführung Drei Alternativen, wie Dateneinträge k* im Index aussehen können: 1. Datensatz mit.
M a r c – o l i v e r p a h l Informatik II – Kapitel 14 Hashing Zusammenfassung des Kapitel 14 Küchlin, Weber, Einführung in die Informatik, 2.Auflage.
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Dr. Brigitte Mathiak Kapitel 9 Physische Datenorganisation (ganz kurz)
13. Kapitel: Hashfunktionen
Suche in Texten (Stringsuche )
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FOR Anweisung.
Algorithmentheorie 04 –Hashing
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (12 Hashverfahren: Allgemeiner Rahmen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Zusammenfassung Vorwoche
Informatik II: Algorithmen und Datenstrukturen SS 2013
DVG Gaußscher Algorithmus1 Gaußscher Algorithmus.
Gaußscher Algorithmus
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Kapitel 2: Datenstrukturen
- Schnittmengenbildung -
Quantum Computing Hartmut Klauck Universität Frankfurt WS 04/
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmierung
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Multiplikation großer Zahlen mit Standard-FFT
Hashfunktionen SHA-1 (Secure Hash Algorithm)
1 J4 Hash-Join R und S werden mittels der gleichen Hashfunktion h – angewendet auf R.A und S.B – auf (dieselben) Hash- Buckets abgebildet Hash-Buckets.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Übung Datenbanksysteme II Index- strukturen
Die Zählschleife int s = 0 for (int k=1; k
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Christian Mansky Design - Fallstudien Christian Mansky
2.4 Rekursion Klassifikation und Beispiele
Algorithmen und Datenstrukturen Übungsmodul 11
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 2 Dr. W. Narzt u. Dr. A. Stritzinger.
Kapitel 6: Suchbäume und weitere Sortierverfahren
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Home Fall 1 Fall 2 Fall 3 Fall 4 Fall 5 Nächstes >>
Diskrete Mathematik I Vorlesung 2 Arrays.
Algorithm Engineering „Suffix-Bäume und Suffix-Arrays“ Stefan Edelkamp.
Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Tutorium Software-Engineering SS14 Florian Manghofer.
Übungsblatt 2 Erläuterungen Wintersemester 16/17 DBIS.
RSA public key encryption
Cäsar-Verschlüsselung
Cäsar-Verschlüsselung
 Präsentation transkript:

Referat von Kim Schröer – Intelligente Dateisysteme WS13/14 Hashing Streuwertfunktionen Referat von Kim Schröer – Intelligente Dateisysteme WS13/14

- Übersicht - Hashingfunktionen Ein einfaches Hashing-Schema Kollisionen Ein einfacher Hashing-Algorithmus Progressiver Overflow Buckets Löschen von Datensätzen

produzieren immer dann eine Adresse, wenn ein Schlüssel gegeben wird Hashfunktionen produzieren immer dann eine Adresse, wenn ein Schlüssel gegeben wird

Ein einfaches Hashing-Schema h(k) = a Bsp: LOWELL Name ASCII (2 B.) Product address LOWELL 76 79 76 x 79 = 6004 004 h(LOWELL) = 4 home address = 4 Funktion h(K) verwandelt einen Schlüssel K (Key) in eine Adresse. In dieser Adresse können nun Datensätze abgelegt und wieder aufgerufen werden. Hier als Bsp die Stadt: LOWELL. Der Schlüssel LOWELL wird durch die Hash-Funktion in die Adresse 4 verwandelt. Vorgehensweise: Die ersten 2 Buchstaben des Namens als 2 Zahlen aus der ASCII-Tabelle notieren, diese multiplizieren, die letzten 3 Ziffern des Ergebnisses ist die Adresse.

Ein einfaches Hashing-Schema

Kollisionen LOWELL Adresse = 4 OLIVER Adresse = 4  Synonyme PROBLEM: Kollision => wenn 2 Schlüssel die gleiche Adresse haben

Kollisionen Optimal: eine perfekte Hashfunktion, bei der alle Kollisionen anhand eines Algorithmus gleichzeitig umgangen werden. Dieses ist jedoch fast unmöglich (bei 4000 DS und 5000 Adressen -> nur 1 aus 10^120000 vermeidet alle gleichzeitig). Also besser: auf eine akzeptable Menge reduzieren.

Kollisionen (Vermeidung) Eine perfekte Hash-Funktion Kollisionen reduzieren: Verteilen der Datensätze Extra Speicher verwenden mehr als einen Datensatz einer einzelnen Adresse zuweisen Hierfür 3 Lösungsvorschläge. Zu 1.: mehr als 2 Anfangsbuchstaben verwenden; JO – häufig, XZ – selten  Der Algorithmus muss also noch willkürlicher verteilt werden. Zu 2.: wenige DS auf viele Adressen verteilen. Zu 3.: Bsp.: Wenn ein DS 8 Byte groß ist und wir eine Datei mit 512-Byte-DS kreieren, können wir bis zu 6 DS in jede Adresse packen (Buckets).

Ein einfacher Hash-Algorithmus Schritt 1: LOWELL = 76 79 87 69 76 76 32 32 32 32 32 32 L O W E L L |<- Blanks ->| Den Schlüssel in numerischer Form abbilden (mit ASCII). Es sei denn, es handelt sich eh um eine Zahl, dann diesen Schritt überspringen.

Ein einfacher Hashing-Algorithmus Schritt 2: 76 79 | 87 69 | 76 76 | 32 32 | 32 32 | 32 32 7679 + 8769 + 7676 + 3232 + 3232 + 3232 = 33820 Bsp: Grenze von 19937: 7679 + 8769 -> 16448 -> 16448 mod 19937 -> 16448 16448 + 7676 -> 24124 -> 24124 mod 19937 -> 4187 4187 + 3232 -> 7419 -> 7419 mod 19937 -> 7419 7419 + 3232 -> 10651 -> 10651 mod 19937 -> 10651 10651 + 3232 -> 13883 -> 13883 mod 19937 -> 13883 Die Nummern werden getrennt und zusammengezählt. Wichtig: zum Rechnen Integervariablen verwenden! Problem: Für manche Mikrocomputer wäre diese Anzahl jedoch zu groß -> also mit mod-Operator rechnen.

Ein einfacher Hashing-Algorithmus Schritt 3: Bsp: 100 Adressen (0-99) a = s mod n a = 13883 mod 100 a = 83 s – Summe von Schritt 2 n – Anzahl der Adressen in der Datei a – die Adresse, die erzeugt werden soll

Progressiver Overflow Kollisionsauflösung Beim 4. Versuch hat der DS eine freie Adresse gefunden. Bei einem Key mit der Adresse 99 geht die Suche bei 0 weiter.

Progressiver Overflow

Buckets Adresse mit mehr als einem Datensatz Überlauf von Datensätzen  viel seltener

Aufbau eines Buckets

Löschen von Datensätzen Wichtig: Die Lücke, die nach dem Löschen bleibt, darf spätere Suchvorgänge nicht behindern und muss für neue DS zur Verfügung stehen. In Form von # werden sogenannte Tombstones eingefügt, damit die Suche nach einem Schlüssel nicht bei der Lücke endet.

Löschen von Datensätzen Irgendwann sehr viele Tombstones Idee: Algorithmus überprüft, ob die DS, die nach einem Tombstone kommen, nicht doch in ihre Home-Addresse passen.  Auch die Suchlänge verkürzt sich

Andere Techniken zur Vermeidung von Kollisionen Double Hashing Suche wird deutlich schneller bei Kollision: eine 2. Hashfunktion, die eine Zahl erzeugt, die teilerfremd zu der home-Adresse ist und das solange, bis eine freie Adresse gefunden wird.

Noch Fragen?!

Vielen Dank für die Aufmerksamkeit!

Bsp: einfacher Hash-Algorithmus int Hash (char key[12], int maxAddress) { int sum = 0; for (int j = 0; j < 12; j += 2) sum = (sum * 100 * key[j] * key[j+1]) % 19937; return sum % maxAddress; } Die Funktion hash verwendet die folding and prime number division, um eine hash Adresse für einen 12 char string.