Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Eine dynamische Menge, die diese Operationen unterstützt,
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.
Dr. Brigitte Mathiak Kapitel 10 Physische Datenorganisation.
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)
Prof. Dr. W. Conen 15. November 2004
Dr. Brigitte Mathiak Kapitel 9 Physische Datenorganisation (ganz kurz)
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Synonyme: Stapel, Keller, LIFO-Liste usw.
Datenstrukturen Look-Up Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung.
Gliederung Motivation / Grundlagen Sortierverfahren
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Algorithmentheorie 04 –Hashing
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
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.
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 (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (11-1 –Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27-Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Externe Datenstruktur lineare Liste
Informatik II: Algorithmen und Datenstrukturen SS 2013
- Schnittmengenbildung -
Programmiersprachen II Integration verschiedener Datenstrukturen
Eine Implementierung einer effiziente externe geordnete (!) lineare Liste Operationen: Search(x) Insert(x) Delete(x)
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
Effiziente Algorithmen
Computational Thinking Online Algorithmen [Was ist es wert, die Zukunft zu kennen?] Kurt Mehlhorn Konstantinos Panagiotou.
Diskrete Mathematik II
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
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.
Algorithmen und Datenstrukturen Übungsmodul 11
Statistik – Regression - Korrelation
Vom graphischen Differenzieren
Grundlagen der Algorithmen und Datenstrukturen Kapitel
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 1 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.
Dr. Wolfram Amme, Automatische Speicherverwaltung, Informatik II, FSU Jena, SS Automatische Speicherverwaltung.
Vorlesung AVL-Bäume/Algorithmen-
Vorlesung AVL-Bäume/Algorithmen-
Laufzeitverhalten beim Sortieren
 Präsentation transkript:

Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW

-2- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen 3.4 Hash-Tables Ziel:  Hashing ist eine Fortsetzung des Versuchs, Vorteile verschiedener schon behandelter Datenstrukturen zu "mischen" ohne die Nachteiler in Kauf zu nehmen. Hintergrund:  Arrays liefern schnelle Zugriffe wenn der Index bekannt ist.  Wegen der "Nicht-Erweiterbarkeit" eignen sie sich aber i.a. nicht für dynamische Mengen.  Wenn die Keys nicht sortiert sind, dauert find() lange.  Sind sie sortiert, gehen insert() und delete() schlecht.

-3- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Lösung: Hash Tables Eigenschaften (positiv und negativ)  Hash-Tables erlauben sehr! schnelle (fast O(1)) Standard-Operationen (find(), insert(), delete()).  Sie sind array-basiert mit (fast) allen Folgen.  Sie eignen sich trotzdem für dynamische Mengen.  Wenn sie zu "voll werden", kann die Performance katastrophal werden.  Zugriffsfolgen nach irgendeiner Reihenfolge (z.B. vom kleinsten zum grössten) sind schwierig (ineffizient) zu realisieren

-4- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Das Grundprinzip:  Die zu speichernden Daten-Items sind durch einen key identifiziert. Es gibt eine dynamische Folge von Einfüge- und Löschoperationen.  Gespeichert wird in einem Array T der Länge N (die maximale Zahl der zu einem bestimmten Zeitpunkt zu speichernden Elemente sollte grob bekannt sein und nicht zu weit oberhalb von N liegen).  Jedem key ist ein Index i, 0<=i<=N, zugeordnet, das zum key gehörende Daten-Item wird in T[i] gespeichert.

-5- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Probleme:  Die Zuordnung von keys und Indizes.  Eindeutigkeit der Zuordnung vs. Dynamik  Eindeutigkeit der Zuordnung vs. Menge der keys Beispiele: Mitarbeitertabelle mit Personalnummer von 1 bis n  Unrealistisch gut organisiert  Keine delete(), sonst gibt es  Speicherfressende Lücken  Array wird bald zu klein

-6- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Dictionnary  deutsche Wörter in einer Hauptspeicher- Datenstruktur  Für jedes eine Speicherzelle=>Zugriff über Index  Welcher Index?  Beispiel:  Berechnung eines Index analog zu Dezimalzahlen auf Basis 27 (Grösse des Alphabets)  Führt zu unrealistisch grossen Indizes, (wie gross für ein 10- Buchstabenwort?)  warum?, welche falsche Annahme

-7- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Folge: Wir brauchen eine Funktion zum Abbilden von Keys (z.B. strings) auf Indizes. Anforderungen:  Nur Werte in einem relativ kleinen Index-Bereich  Eindeutigkeit Warum nur kleiner Indexbereich (kleines Array)?  Sehr häufig ist zwar das zugrundeliegende Universum von keys riesig, die maximale Menge der zu einem bestimmten Zeitpunkt zu speichernden aber relativ gering.  Aktueller „Füllgrad“ des Arrays: load factor ist das Verhältnis der aktuellen Anzahl von Daten-Items in relation zur Array- Grösse.

-8- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen  Am Beispiel Dictionnary:  Abbildung des key-Universums, eines Bereichs von mehr als (27 9 ), auf einen Bereich von  Kleineres Beispiel:  Abbildung eines key-Universums von auf einen Bereich von  Direkte Folge: Es gibt Kollisionen  Mehreren Keys wird der gleiche Index zugeordnet.

-9- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Lösungen:  Im Array weitersuchen  linear (linear probing)  quadratisch: der "Such-Schritt" ist das Quadrat der Schrittnummer  double hashing: die Länge des nächsten Schritts wird mit einer neuen Hash-Funktion berechnet  Chaining

-10- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen linear probing (am Applet-Beispiel)  Bei Kollision wird mit Schrittweite 1 weitergesucht bis eine freie Zelle gefunden ist. Folge:  Menge der Daten-Items darf nicht grösser sein als die Array-Grösse  Es bilden sich „Cluster“.  Für alle keys, deren Hashwert im Cluster-Bereich liegt, wird am Ende des Clusters eingefügt.  Je grösser ein Cluster ist, um so schneller wächst es.

-11- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen quadratic probing  Bei Kollision wird weitergesucht, wobei die Schrittweite das Quadrat der Schrittnummer ist.  Kollision bei Hash-Index x: weiter suchen bei x+1, x+4, x+9, x+16 usw. Folge:  Menge der Daten-Items darf nicht grösser sein als die Array- Grösse (wie vorher).  Es bilden sich wieder „Cluster“. Auswirkungen nicht ganz so schnell sichtbar da verstreut (alle Kollisionen folgen der gleichen Schrittfolge!).  Nicht so schlimm, aber es geht besser!

-12- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Double Hashing  Bei Kollision wird weitergesucht, wobei die Schrittweite das Ergebnis eines zweiten Hashings ist. Folge:  Menge der Daten-Items darf nicht grösser sein als die Array-Grösse (wie vorher).  Die Schrittfolge hängt vom key ab! Werden zwei keys auf den gleichen Index abgebildet, so unterscheiden sich trotzdem die Schrittfolgen beim Weitersuchen.

-13- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Chaining  Jedes Array-Element ist ein first-Pointer einer linearen Liste, Beispiel im Applet

-14- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Folgen:  Bei Chaining kann der Load-Factor > 1 werden, ohne dass sofort die Performance ganz schlecht wird.  Das Finden des Index geht auch in O(1), aber es muss noch im Mittel die halbe Liste durchsucht werden.  Sortierte Liste? Suchen geht zwar nicht viel schneller, aber nicht erfolgreiches Suchen geht schneller. Die Einbussen beim insert() sind nicht dramatisch, wenn die Listen kurz sind.  Auch wenn bei wachsendem load factor die Performance schlechter wird, so ist die Hash-Table immer noch benutzbar!  Die Performance hängt entscheidend von der Güte der Hash- Funktion ab (deren „Verteilungsgrad“).

-15- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Hash Funktionen Anforderungen:  Schnell zu berechnen  Verteilen das key-Universum gleichmässig auf die Indexmenge, d.h. gleichmässige Listenlänge Generell:  Den gesamten key nutzen!  Einschränken auf die Indexmenge i.d.R. mit modulo- Operation, dabei  eine Primzahl als modulo-Basis wählen.

-16- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Hash Funktionen für strings: Verwendung des ASCII-Codes A() und der Position i im string Mehrere Möglichkeiten für string c 1 c 2 c 3...c n  Analog Dezimalzahlen (siehe vorher)  (A(c 1 )*27 + A(c 2 )* A(c 3 )* ) % arraysize  Problem: Integerüberlauf  Lösung: Hornerschema  evtl. statt 27 eine Primzahl nehmen  Einfach mit Characterposition  (A(c 1 )*1 + A(c 2 ) * 2 + A(c 3 ) * ) % arraysize  auch mit Hornerschema