GIN 2 – Vorlesung zu Hashing, 31. Mai 2005 Prof. Dr. W. Conen FH Gelsenkirchen SS 2005.

Slides:



Advertisements
Ähnliche Präsentationen
Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Advertisements

Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Informatik II: Algorithmen und Datenstrukturen SS 2013
Eine dynamische Menge, die diese Operationen unterstützt,
Eine dynamische Menge, die diese Operationen unterstützt,
Vorlesung Programmieren II
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)
Prof. Dr. W. Conen (auf Bitte von M. Schwerthoff)
Prof. Dr. W. Conen 15. November 2004
Dr. Brigitte Mathiak Kapitel 9 Physische Datenorganisation (ganz kurz)
Algorithmentheorie 04 –Hashing
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Halbzeit: Kurze Wiederholung
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (12 Hashverfahren: Allgemeiner Rahmen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (3) Konstruktion optimaler Suchbäume Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 13 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende.
Zusammenfassung Vorwoche
Informatik II: Algorithmen und Datenstrukturen SS 2013
© Katharina Brachmann Normalformen Oldenbourg S137, Klett S117
O.Univ.-Prof. Dr. Dimitris Karagiannis Datenbanken administrieren mit phpMyAdmin Martin Marinschek
Einführung in die Programmierung
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 Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Algorithmen und Datenstrukturen Übungsmodul 11
Gruppe: 31 Grundlagen wissenschaftlichen Arbeitens Algorithmen und Datenstrukturen Iris Studeny.
1 Tagesüberblick 5 Lösung Hausaufgabe/Fragen Assoziative Felder Funktionen zu Variablenbehandlung.
Asymmetrische Kryptographie
SHA-1 Collision Search Graz. Wo wurde das Projekt durchgeführt? An der Universität Graz Wann wurde das Projekt gestartet? Am Wann wurde das.
Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Einfache Bäume Übung 13 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Problemlösen am Beispiel des Rückwärtsarbeitens
? Stichwortverzeichnis … zum Suchen
Stichwortverzeichnis
Heute Mathe, morgen DLR! Dr. Margrit Klitz
gemeinsam.innovativ.nachhaltig.
Wissenschaftliche Methodik
Michael Artin: Geometric Algebra
Stichwortverzeichnis
8 Zündung/Motormanagement
Stichwortverzeichnis
2 Elektrische Maschinen in Kraftfahrzeugen
Herstellung von kristallinen Metalloxiden über die Schmelze mit einem Spiegelofen Gruppe 8: Yuki Meier, Vivien Willems, Andrea Scheidegger, Natascha Gray.
Einführung in die Wahrscheinlichkeitsrechnung
Motoremissionen mobiler Anlagen – Stand der Technik
Lieber Leser, liebe Leserin,
Inhaltsverzeichnis In der vorliegenden Präsentation finden Sie unter anderem Antworten auf folgende Fragen… warum ist eine Gesetzesinitiative zum Betriebliches.
Einführung in Web- und Data-Science
Industrie 4.0 für die Ausbildung 4.0
Das Verdauungssystem Präsentiert von Theresa
Wissensmanagement im Zeitalter von Digitaler Transformation
Pflege & Finanzierung 01. Juni 2017 Dr. Sonja Unteregger
Das Arbeitgebermodell in Zeiten des
Microsoft® Office PowerPoint® 2007-Schulung
Einführung in Web- und Data-Science
Pensionsrück-stellungen Prof. Dr. Matthias Hendler
Betriebliche Gesundheitsförderung 2
Vorlesung Wasserwirtschaft & Hydrologie I
Rosebrock: Geometrische Gruppen
Forschungsmethoden in der Teilchenphysik
 Präsentation transkript:

GIN 2 – Vorlesung zu Hashing, 31. Mai 2005 Prof. Dr. W. Conen FH Gelsenkirchen SS 2005

Hashing - Ausgangssituation [Einstieg: s. auch ihr Mitschrieb aus der letzten Woche] Datenstruktur Dictionary: Insert, Delete, Member/Search Bisher: Der Schlüssel selbst konnte unmittelbar als Index in einem Array zur Speicherung der Daten verwendet werden K U T K U = Universum möglicher Keys (=Schlüssel); K = Tatsächlich auftretende Keys; T = Direkt-addressierte Tabelle Nutzlasten

Hashing - Ausgangssituation Datenstruktur Dictionary: Insert, Delete, Member/Search Jetzt: U ist sehr groß (z.B. Strings!) und |K| << |U|, d.h. die Anzahl tatsächlich genutzter Schlüssel ist eher klein. Selbst, wenn unser T genug Platz für die möglichen Schlüssel hätte, wäre das unschön: es würde sehr viel Platz nicht verwendet! Also Annahme: |U| >> |T| ¸ |K| K U T K k1k1 h = Hashfunktion: U ! {0,...,m-1} = h(k 1 ) = h(k 2 ) = h(k 3 ) Kollision! 6 7 = h(k 4 ) 8 m-1 k2k2 k3k3 k4k4

Hashing - Ausgangssituation Annahme: |U| >> |T| ¸ |K| K kann auch größer, als T werden, dann gibt es aber natürlich auf jeden Fall gewisse Probleme... Lösung: Wir bilden mit einer Hashfunktion h : U ! {0,...,m-1} die (möglichen und tatsächlichen) Schlüssel auf die Einträge in T ab Hauptproblem: es können Kollisionen auftreten Worst-Case: bei ungünstiger Hashfunktion können alle tatsächlichen Werte auf einen Index abgebildet werden Und das selbst dann, wenn die Hashfunktion im Prinzip, also gemessen an U, z.B. bei Annahme einer Gleichverteilung der Auftretenswahrscheinlichkeit, gut zu sein scheint!

Hashing Was hätten wir gern? Eine Hashfunktion, die wenigstens im Prinzip alle Werte in [0,...,m-1] treffen kann (also surjektiv ist) Eine Hashfunktion, die die tatsächlich auftretenden Werte (also K) möglichst gut über T streut also Kollisionen so weit wie möglich vermeidet Bei der Konstruktion von h weiß man eventuell bereits etwas über die Auftretenswahrscheinlichkeit der möglichen Schlüssel Wenn es um z.B. um Namen geht, dann sind manche Buchstabenkombination häufiger (Schmidt, Weber), manche eher selten (Xyzmick) Die Hashfunktion sollte Schmidt und Weber möglichst auf verschiedene Indices abbilden Wo Xyzmick landet, ist eher nicht so wichtig...

Hashing Ursache von Kollisionen: Unvermeidbar 1: Wenn Keywerte mehrfach auftreten können z.B. mehrere Personen mit Namen Weber Randbemerkung: manchmal hilft dann natürlich, die Schlüssel zu vergrößern, z.B. Vorname Nachname zu verwenden Unvermeidbar 2: Wenn K größer als T ist (aber selbst dann ist eine Minimierung von Kollisionen hilfreich!) Vermeidbar: Wenn |K| <= |T|, dann könnte h | K ( also h eingeschränkt auf K, s. GIN1b) im Prinzip injektiv sein... wenn es aber dann nicht injektiv ist, dann gibt es unnötige Kollisionen! Für uns ist vor allem der vermeidbare Fall interessant!

Hashing Wichtige Fragen: Frage 1: Wie designed man eine Hashfunktion so, dass sie möglichst injektiv ist, also vermeidbare Kollisionen vermeidet? Frage 2: Wie geht man mit Kollisionen um, wenn sie denn auftreten? Wir schauen uns zunächst Frage 2 an. Antworten zur Frage 1 finden Sie in ihrem Mitschrieb.

Hashing: Umgang mit Kollisionen (1) Kollisionen treten auf Die Daten jeder Kollisionsklasse werden in einer Liste hinter dem berechneten Indexwert für ihren Schlüssel abgelegt. Das nennt man Chaining, also Verkettung K U T K k1k1 0 m-1 k2k2 k3k3 k4k4 h k2k2 k3k3 k4k4 k1k1

Hashing: Umgang mit Kollisionen (2) Kollisionen treten auf Für jeden Datensatz wird ein Platz direkt in T gesucht Verschiedene Strategien möglich (z.B. Re-Hashing, Sondieren) Nebenproblem: Was passiert, wenn T überläuft K U T K k1k1 0 m-1 k2k2 k3k3 k4k4 h k2k2 k3k3 k4k4 k1k1 Sondieren in der Nachbarschaft oder zweites (drittes,...) Hashing Nutzlasten [s. auch Übungsaufgaben zu Hashing]

Hashing: Kollisionsbehandlung (3) Chaining Insert(d), Datensatz d hat den Schlüssel k Kosten: O(1) (+ Kosten für die Berechnung von h(k) – h sollte also möglichst effizient berechenbar sein! Wir nehmen O(1) an) Delete(d): O(1) Member(d): Best Case: O(1) Worst Case: O(|K|)...Aua! Mittlerer Fall, s. Mitschrieb Platz in T suchen Insert(d): Kosten je nach Kollisionsbehandlung Best Case: O(1) Worst Case: O(min(|T|,|K|)) Delete(d): wie Insert Member(d): wie Insert weitere Details s. Mitschrieb

Unsere Übungsaufgabe... stammt aus Knuth: The Art of Computer Programming, Volume 3 Wir wollen 31 Strings auf den Bereich [0..40] bijektiv abbilden (im Original auf [ ]) Es gibt 41 31, ungefähr also Funktionen, die 31 Werte auf 41 Werte verteilen Es gibt 41*40*...*11 = 41!/10!, ungefähr also injektive Funktion Das sieht nach vielen aus...aber es ist nur 1 aus ungefähr 10 Millionen der möglichen Funktionen! Aber sie sehen: sie hatten eine große Auswahl bei der Lösung der Übungsaufgabe! ;-)

Knuths Lösung Ein MIX-ProgrammBeispiel-Ablauf für BEKommentar LD1NK(1:1)-2 (in rI1) Wert(B)=2,Position(B)=1 LD2 K(2:2)5 (in rI2) INC1-8, = -5 J1P*+2Sprung, wenn 1 positiv INC116, = 16 LD2K(3:3) J2Z9FSprung, wenn 2 leer/null INC1 -28,2 J1P9F INC111,2 LDAK(4:4) JAZ9FSprung, wenn Accu leer DEC1-5,2 J1N9F INC110 9F: LDAK(Sprungziel eigentlich 9H) CMPATABLE,1(versteht aber niemand... ;) JNE FAILURE Wenn Sie noch kein h gefunden haben, dann suchen sie noch ein wenig weiter!

Literatur Hashing z.B. in Cormen et al. Introduction to Algorithms oder Owsnicki-Klewe Algorithmen und Datenstrukturen (s. auch frühere Literaturempfehlungen) Zum MIX-Computer von Knuth können sie direkt bei Knuth schauen (The Art of Computer Programming) oder einen der Emulatoren ausprobieren: (Emulator in HTML mit Javaskript realisiert) der GNU-MIX- Development-Kit (mit Doku: