www.wikidata.de-de.nina.az
In der Informatik bezeichnet man eine spezielle Indexstruktur als Hashtabelle englisch hash table oder hash map bzw Streuwerttabelle Sie wird verwendet um Datenelemente in einer grossen Datenmenge zu suchen bzw aufzufinden Hash oder Streuspeicherverfahren Gegenuber alternativen Index Datenstrukturen wie Baumstrukturen z B ein B Baum oder Skip Listen zeichnen sich Hashtabellen ublicherweise durch einen konstanten Zeitaufwand bei Einfuge bzw Entfernen Operationen aus Inhaltsverzeichnis 1 Hashverfahren 2 Der Algorithmus 2 1 Kollisionen 2 1 1 Kollisionsauflosungsstrategien 2 1 1 1 Geschlossenes Hashing mit offener Adressierung 2 1 1 2 Offenes Hashing mit geschlossener Adressierung 2 2 Vorteile 2 3 Nachteile 3 Varianten 3 1 Hashing mit Verkettung 3 2 Hashing mit offener Adressierung 3 3 Kuckucks Hashing 3 4 Algorithmen 3 4 1 Lineares Sondieren 3 4 2 Quadratisches Sondieren 3 4 3 Doppel Hashing 3 4 4 Brent Hashing 3 5 Dynamisches Hashing 3 5 1 Vorteile 3 5 2 Nachteile 4 Anwendung 4 1 Assoziative Arrays 4 2 Symboltabellen 4 3 Datenbanken 5 Siehe auch 6 Literatur 7 Weblinks 8 EinzelnachweiseHashverfahren BearbeitenDas Hashverfahren ist ein Algorithmus zum Suchen von Datenobjekten in grossen Datenmengen Es basiert auf der Idee dass eine mathematische Funktion die Hashfunktion die Position eines Objektes in einer Tabelle berechnet Dadurch erubrigt sich das Durchsuchen vieler Datenobjekte bis das Zielobjekt gefunden wurde Der Algorithmus BearbeitenBeim Hashverfahren werden die Zieldaten in einer Hashtabelle gespeichert Dabei dient nicht der Schlussel der das Datenobjekt eindeutig identifiziert als Index sondern der Hashwert der von einer Hashfunktion aus dem Schlussel berechnet wird Der durch den Hashwert festgelegte Speicherort eines Datenobjektes in der Tabelle wird auch als Bucket bezeichnet englisch Behalter Im Idealfall bekommt jedes Objekt einen eigenen Bucket d h keine Kollisionen s u In der Praxis wird die Tabelle als ein Array implementiert Kollisionen Bearbeiten Da Hashfunktionen im Allgemeinen nicht eindeutig injektiv sind konnen zwei unterschiedliche Schlussel zum selben Hash Wert also zum selben Feld in der Tabelle fuhren Dieses Ereignis wird als Kollision bezeichnet In diesem Fall muss die Hashtabelle mehrere Werte an derselben Stelle in demselben Bucket aufnehmen Eine Kollision benotigt bei der Suche eine spezielle Behandlung durch das Verfahren Zunachst wird aus einem Suchschlussel wieder ein Hashwert berechnet der den Bucket des gesuchten Datenobjektes bestimmt dann muss noch durch direkten Vergleich des Suchschlussels mit den Objekten im Bucket das gesuchte Ziel bestimmt werden Zur Behandlung von Kollisionen werden kollidierte Daten nach einer Ausweichstrategie in alternativen Feldern oder in einer Liste gespeichert Schlimmstenfalls konnen Kollisionen zu einer Entartung der Hashtabelle fuhren wenn wenige Hashwerte sehr vielen Objekten zugewiesen wurden wahrend andere Hashwerte unbenutzt bleiben Kollisionsauflosungsstrategien Bearbeiten Um das Kollisions Problem zu handhaben gibt es diverse Kollisionsauflosungsstrategien Geschlossenes Hashing mit offener Adressierung Bearbeiten Eine Moglichkeit wird geschlossenes Hashing mit offener Adressierung genannt Wenn dabei ein Eintrag an einer schon belegten Stelle in der Tabelle abgelegt werden soll wird stattdessen eine andere freie Stelle genommen Haufig werden drei Varianten unterschieden vgl Algorithmen lineares Sondieren es wird um ein konstantes Intervall verschoben nach einer freien Stelle gesucht Meistens wird die Intervallgrosse auf 1 festgelegt quadratisches Sondieren Nach jedem erfolglosen Suchschritt wird das Intervall quadriert doppeltes Hashen eine weitere Hash Funktion liefert das Intervall Offenes Hashing mit geschlossener Adressierung Bearbeiten Eine weitere Moglichkeit ist offenes Hashing mit geschlossener Adressierung Anstelle der gesuchten Daten enthalt die Hashtabelle hier Behalter englisch Buckets die alle Daten mit gleichem Hash Wert aufnehmen Bei einer Suche wird also zunachst der richtige Zielbehalter berechnet Damit wird die Menge der moglichen Ziele erheblich eingeschrankt Dennoch mussen abschliessend die verbliebenen Elemente im Behalter durchsucht werden Im schlimmsten Fall kann es passieren dass alle Elemente gleiche Hash Werte haben und damit im selben Bucket abgelegt werden In der Praxis kann das aber durch die Wahl einer geeigneten Grosse fur die Hashtabelle sowie einer geeigneten Hash Funktion vermieden werden Oft wird die Verkettung durch eine lineare Liste pro Behalter realisiert Vorteile Bearbeiten Je nach Anwendungsfall hat eine Hashtabelle Vorteile sowohl in der Zugriffszeit gegenuber anderen Baumindexstrukturen als auch im benotigten Speicherplatz gegenuber gewohnlichen Arrays Idealerweise sollte die Hashfunktion fur die zu speichernden Daten so gewahlt sein dass die Anzahl der Kollisionen minimiert wird und unter einer Konstante bleibt je nach Hashfunktion muss die Hashtabelle dafur ungenutzte Felder enthalten in der Praxis ublicherweise 20 bis 30 Prozent Trifft dies zu dann benotigt eine Hashtabelle mit n displaystyle n nbsp gespeicherten Elementen per Zugriff englisch Look Up auf einen Hashtabellen Eintrag im Mittel nur konstanten Zeitaufwand O 1 Im Vergleich dazu ist der Zugriff auf ein Element in einem B Baum in der Grossenordnung von O log n displaystyle O log n nbsp wobei das n der Anzahl der in der Hashtabelle gespeicherten Eintrage entspricht Die komplette Baum Datenstruktur benotigt Speicher in der Grossenordnung von O n displaystyle O n nbsp Nachteile Bearbeiten Wegen der moglichen Kollisionen hat eine Hashtabelle im Worst Case ein sehr schlechtes Zugriffszeit Verhalten Dieser wird mit O n displaystyle O n nbsp abgeschatzt es werden dabei also alle Eintrage in der Tabelle durchsucht Als Fullgrad wird die Anzahl der gespeicherten Elemente geteilt durch die Anzahl aller Buckets bezeichnet Fullgrad gespeicherte Elemente Buckets Mit steigendem Fullgrad wachst die Wahrscheinlichkeit einer Kollision und die Entartung nimmt zu Dann kann nur eine Vergrosserung der Tabelle mit nachfolgender Restrukturierung wieder zu akzeptablem Laufzeitverhalten fuhren Ausserdem bringt eine der Suchoperation nachfolgende Nachbarschaftssuche nichts da eine Ordnungsbeziehung zwischen den Schlusseln erklartermassen nicht gepflegt wird s a Abschnitt Datenbanken Varianten BearbeitenEs gibt mehrere Varianten des Hashverfahrens die sich fur bestimmte Daten besser eignen Ein wichtiger Faktor hierbei ist die Dynamik mit der sich die Anzahl der Elemente andert Das offene Hashing lost dieses Problem nimmt aber Einbussen bei den Zugriffszeiten in Kauf Das geschlossene Hashing ist hingegen auf explizite Strategien zur Kollisionsbehandlung angewiesen Vorsicht Die Bezeichnungen offenes bzw geschlossenes Hashing werden auch in genau umgekehrter Bedeutung verwendet Hashing mit Verkettung Bearbeiten nbsp Kollision die mit separate chaining aufgelost wird Beim Hashing mit Verkettung englisch separate chaining ist die Hash Tabelle so strukturiert dass jeder Behalter eine dynamische Datenstruktur aufnehmen kann beispielsweise eine Liste oder einen Baum Jeder Schlussel wird dann in dieser Datenstruktur eingetragen oder gesucht So ist es problemlos moglich mehrere Schlussel in einem Behalter abzulegen was allerdings zu mehr oder weniger verlangerten Zugriffszeiten fuhrt Die Effizienz des Zugriffs wird dabei davon bestimmt wie schnell Datensatze in die gewahlte Datenstruktur eingefugt und darin wiedergefunden werden konnen Hashing mit Verkettung ist bei Datenbanken eine sehr gangige Indizierungsvariante wobei sehr grosse Datenmengen mittels Hashtabellen indiziert werden Die Grosse der Buckets ist in Datenbanksystemen ein Vielfaches der Sektorengrosse des Speichermediums Der Grund dafur ist dass die Datenmenge nicht mehr im Hauptspeicher gehalten werden kann Bei einer Suchanfrage muss das Datenbanksystem die Buckets sektorenweise einlesen Jeder Behalter ist unabhangig und weist eine Art Liste von Eintragen mit demselben Index auf Die Zeit fur Operationen der Hashtabelle ist die Zeit zum Suchen des Behalters die konstant ist plus die Zeit fur die Listenoperation In einer guten Hashtabelle hat jeder Behalter keinen oder einen Eintrag und manchmal zwei oder drei aber selten mehr Daher werden fur diese Falle zeit und raumeffiziente Strukturen bevorzugt Strukturen die fur eine ziemlich grosse Anzahl von Eintragen pro Behalter effizient sind sind nicht erforderlich oder wunschenswert Wenn diese Falle haufig auftreten funktioniert das Hashing nicht gut und dies muss behoben werden Hashing mit offener Adressierung Bearbeiten nbsp Kollision die mit open addressing aufgelost wird Ted Baker hat einen eindeutigen Hashwert kollidiert aber mit Sandra Dee die vorher mit John Smith kollidiert ist Dieses Verfahren wird abgekurzt auch offenes Hashing oder geschlossenes Hashing genannt Der Name offenes Hashing bezieht sich auf die offene Adressierung wahrend der Name geschlossenes Hashing sich auf die begrenzte Anzahl moglicher Schlussel im Behalter bezieht Beim Hashing mit offener Adressierung kann jedem Behalter nur eine feste Anzahl von Schlusseln zugewiesen werden Haufig wahlt man einfach einen einzigen moglichen Schlussel pro Behalter Im Kollisionsfall muss dann nach einem alternativen Behalter gesucht werden Dabei geht man so vor dass man fur m Behalter eine ganze Folge von m Hash Funktionen definiert Fuhrt die Anwendung der ersten Hash Funktion nennen wir sie h1 zu einer Kollision so wendet man h2 an Fuhrt diese ebenfalls zu einer Kollision d h der entsprechende Behalter ist bereits belegt so wendet man h3 an und so weiter bis hm bzw bis ein leerer Behalter gefunden wird Die Bezeichnung offene Adressierung ergibt sich aus der Eigenschaft dass durch Kollisionen gleiche Schlussel unterschiedliche Adressen zugewiesen bekommen konnen Alle Eintragsdatensatze werden im Behalter selbst gespeichert Wenn ein neuer Eintrag eingefugt werden muss werden die Behalter untersucht beginnend mit dem Hash zu Slot und fortschreitend in einer bestimmten Prufsequenz bis ein unbesetzter Behalter gefunden wird Bei der Suche nach einem Eintrag werden die Behalter in der gleichen Reihenfolge durchsucht bis entweder der Zieldatensatz oder ein ungenutzter Behalter gefunden wird was anzeigt dass es keinen solchen Schlussel in der Tabelle gibt Der Name offenes Hashing bezieht sich darauf dass der Ort des Elements nicht durch seinen Hashwert bestimmt wird Kuckucks Hashing Bearbeiten Kuckucks Hashing ist ein weiteres Verfahren Kollisionen in einer Tabelle zu vermeiden Der Name leitet sich vom Verhalten des Kuckucks ab Eier aus einem Nest zu entfernen um ein eigenes Ei hineinzulegen Das Prinzip ist zwei Hash Funktionen einzusetzen Das ergibt zwei mogliche Speicherorte in einer Hashtabelle was immer eine konstante Zugriffszeit garantiert Ein neuer Schlussel wird an einem der zwei moglichen Orte gespeichert Sollte die erste Zielposition besetzt sein wird der bereits vorhandene Schlussel auf seine alternative Position versetzt und an seiner Stelle der neue Schlussel gespeichert Sollte die alternative Position besetzt sein so wird wiederum der Schlussel auf dieser Position auf seine alternative Position transferiert und so fort Wenn diese Prozedur zu einer unendlichen Schleife fuhrt ublicherweise bricht man nach log n displaystyle log n nbsp Schritten ab wird die Hashtabelle mit zwei neuen Hash Funktionen neu aufgebaut Die Wahrscheinlichkeit fur ein solches Rehashing liegt in der Grossenordnung von O 1 n displaystyle O 1 n nbsp fur jedes Einfugen Algorithmen Bearbeiten Lineares Sondieren Bearbeiten Die einfachste Moglichkeit zur Definition einer solchen Folge besteht darin so lange den jeweils nachsten Behalter zu prufen bis man auf einen leeren Behalter trifft Die Definition der Folge von Hashfunktionen sieht dann so aus h i x h x i mod m displaystyle h i x h x i bmod m nbsp Die Anwendung des Operators Modulo hat mit der begrenzten Zahl von Behaltern zu tun Wurde der letzte Behalter gepruft so beginnt man wieder beim ersten Behalter Das Problem dieser Methode ist dass sich so schnell Ketten oder Cluster bilden und die Zugriffszeiten im Bereich solcher Ketten schnell ansteigen Das lineare Sondieren ist daher wenig effizient Sein Vorteil ist jedoch dass im Gegensatz zu anderen Sondierungsverfahren alle Behalter der Tabelle benutzt werden Um ein Element x displaystyle x nbsp zu finden berechnet man h x displaystyle h x nbsp und beginnt dort mit der Suche Man durchlauft das Array bis entweder das Element gefunden oder eine leerer Behalter erkannt wird Loschungen sind etwas schwieriger als beim Hashing mit Verkettung denn man kann nicht einfach eine Suche durchfuhren und das Element dort loschen wo man es findet Loschungen werden haufig mithilfe von sogenannten Tombstones umgesetzt Beim Loschen eines Elements wird markiert dass der Behalter leer ist und zuvor belegt war Beim Suchen bleibt man nicht bei einem Tombstone stehen Stattdessen setzt man die Suche fort Man muss dabei auf das Ende des Arrays achten und gegebenenfalls wieder am Anfang beginnen Beim Einfugen kann jeder Tombstone auf den man stosst durch einen leeren Behalter ersetzt werden In der Praxis ist lineares Sondieren eine der schnellsten Hashing Algorithmen Vorteilhaft ist der geringe Speicheraufwand Man benotigt lediglich ein Array und eine sehr einfache Hashfunktion Hervorragende Lokalitat Bei Kollisionen suchen wir nur an benachbarten Orten im Array Bei der linearen Abtastung kommt es zu erheblichen Leistungseinbussen wenn der Lastfaktor hoch wird Die Anzahl der Kollisionen nimmt tendenziell mit der Anzahl der bestehenden Kollisionen zu Dies wird als primares Clustering bezeichnet 1 Wenn n displaystyle n nbsp Elemente in eine Array mit m displaystyle m nbsp Behaltern eingefugt werden ist der Lastfaktor a n m displaystyle alpha tfrac n m nbsp Der Erwartungswert fur die Anzahl der Schlussel pro Behalter bei einer nicht erfolgreichen Suche betragt dann 1 2 1 1 1 a 2 displaystyle tfrac 1 2 cdot left 1 left tfrac 1 1 alpha right 2 right nbsp Der Erwartungswert bei einer erfolgreichen Suche eines zufalligen Elements betragt 1 2 1 1 1 a displaystyle tfrac 1 2 cdot left 1 tfrac 1 1 alpha right nbsp 2 3 Quadratisches Sondieren Bearbeiten Wie beim linearen Sondieren wird nach einem neuen freien Speicher gesucht allerdings nicht sequenziell sondern mit stetig quadratisch wachsendem Abstand zur ursprunglichen Position und in beide Richtungen Verursacht h k displaystyle h k nbsp eine Kollision so werden nacheinander h k 1 h k 1 h k 4 h k 4 h k 9 displaystyle h k 1 h k 1 h k 4 h k 4 h k 9 nbsp usw probiert In Formeln ausgedruckt h i x h x 1 i 1 i 2 2 mod m displaystyle h i x left h x 1 i 1 cdot left lceil frac i 2 right rceil 2 right bmod m nbsp Den standigen Wechsel des Vorzeichens bei dieser Kollisionsstrategie nennt man auch alternierendes quadratisches Sondieren oder quadratisches Sondieren mit Verfeinerung Wahlt man die Anzahl der Behalter geschickt namlich m 4 j 3 displaystyle m 4 cdot j 3 nbsp m displaystyle m nbsp ist Primzahl so erzeugt jede Sondierungsfolge h 0 x displaystyle h 0 x nbsp bis h m 1 x displaystyle h m 1 x nbsp eine Permutation der Zahlen 0 bis m 1 displaystyle m 1 nbsp so wird also sichergestellt dass jeder Behalter getroffen wird 4 Quadratisches Sondieren ergibt keine Verbesserung fur die Wahrscheinlichkeit eine Sondierung durchfuhren zu mussen h 0 x h 0 y displaystyle h 0 x h 0 y nbsp kann aber die Wahrscheinlichkeit von Kollisionen wahrend der Sondierung h 0 x h k y displaystyle h 0 x h k y nbsp herabsetzen d h Clusterbildung wird vermieden Das quadratische Sondieren verhindert die Cluster die beim linearen Sondieren entstehen ist aber nicht optimal Beim quadratische Sondieren entsteht sogenanntes sekundares Clustering Dies geschieht denn wenn zwei Schlussel nahe beieinander liegende Hashwerte haben liegen die entsprechenden sondierten Behalter ebenfalls nahe beieinander Zusatzlich gibt es einen anderen Nachteil Im Gegensatz zum linearen Sondieren das garantiert jeden Behalter ausprobiert stehen fur das quadratische Sondieren in einigen Fallen nur m 2 displaystyle lfloor tfrac m 2 rfloor nbsp Behalter zur Auswahl 5 Der Erwartungswert fur die Anzahl der Schlussel pro Behalter bei einer nicht erfolgreichen Suche betragt 1 1 a a ln 1 1 a displaystyle tfrac 1 1 alpha alpha ln left tfrac 1 1 alpha right nbsp Der Erwartungswert bei einer erfolgreichen Suche eines zufalligen Elements betragt 1 ln 1 1 a a 2 displaystyle 1 ln left tfrac 1 1 alpha right tfrac alpha 2 nbsp 3 Doppel Hashing Bearbeiten Beim Doppel Hashing werden zwei unabhangige Hash Funktionen h displaystyle h nbsp und h displaystyle h nbsp angewandt Diese heissen unabhangig wenn die Wahrscheinlichkeit fur eine sogenannte Doppelkollision d h h x h y h x h y displaystyle h x h y land h x h y nbsp gleich 1 m 2 displaystyle 1 m 2 nbsp und damit minimal ist Die Folge von Hash Funktionen die nun mittels h displaystyle h nbsp und h displaystyle h nbsp gebildet werden sieht so aus h i x h x h x i mod m displaystyle h i x h x h x cdot i bmod m nbsp Die Kosten fur diese Methode sind nahe den Kosten fur ein ideales Hashing Eine interessante Variante des Doppel Hashing ist das Robin Hood Hashing Die Idee ist dass ein neuer Schlussel einen bereits eingefugten Schlussel verdrangen kann wenn seine Prufwert grosser ist als die des Schlussels an der aktuellen Position Der Nettoeffekt davon ist dass es die Worst Case Suchzeiten in der Tabelle reduziert Weil sowohl der Worst Case als auch die Variation der Anzahl der Sonden drastisch reduziert werden besteht eine interessante Variation darin die Tabelle beginnend mit der erwarteten erfolgreichen Prufwert zu durchsuchen und dann von dieser Position aus in beide Richtungen zu erweitern Der Erwartungswert fur die Anzahl der Schlussel pro Behalter bei einer nicht erfolgreichen Suche betragt 1 1 a displaystyle tfrac 1 1 alpha nbsp Der Erwartungswert bei einer erfolgreichen Suche eines zufalligen Elements betragt 1 a ln 1 1 a displaystyle tfrac 1 alpha cdot ln left tfrac 1 1 alpha right nbsp 3 Brent Hashing Bearbeiten Beim Brent Hashing wird gepruft ob der Platz an dem das Element eingefugt werden soll frei ist Ist das der Fall dann wird das Element dort eingefugt Ist der Platz jedoch belegt dann wird anhand des gerade berechneten Platzes jeweils fur das einzufugende Element und fur das Element das schon an dem Platz ist ein neuer Platz in der Tabelle berechnet Sind die beiden neu berechneten Platze auch belegt wiederholt sich die Prozedur fur den neu berechneten belegten Platz des einzufugenden Elementes Wird jedoch fur das einzufugende Element ein Platz berechnet der frei ist wird das Element dort eingefugt Ist der Platz jedoch belegt und der berechnete Platz frei fur das Element das im vorherigen Durchlauf den Platz fur das einzufugende Element belegt hat dann werden die beiden Platze der Elemente vertauscht und damit konnte das einzufugende Element in der Tabelle untergebracht werden Dynamisches Hashing Bearbeiten Bei steigendem Fullgrad der Tabelle steigt die Wahrscheinlichkeit von Kollisionen deutlich an Spatestens wenn die Anzahl der indizierten Datensatze grosser ist als die Kapazitat der Tabelle werden Kollisionen unvermeidbar Das bedeutet dass das Verfahren einen zunehmenden Aufwand zur Kollisionslosung aufwenden muss Um dies zu vermeiden wird beim Dynamischen Hashing die Hashtabelle bei Bedarf vergrossert Dies hat jedoch zwangslaufig Auswirkungen auf den Wertebereich der Hash Funktion der nun ebenfalls erweitert werden muss Eine Anderung der Hash Funktion wiederum hat jedoch den nachteiligen Effekt dass sich ebenfalls die Hash Werte fur bereits gespeicherte Daten andern Fur das dynamische Hashing wurde dafur eigens eine Klasse von Hash Funktionen entwickelt deren Wertebereich vergrossert werden kann ohne die bereits gespeicherten Hash Werte zu verandern Vorteile Bearbeiten Es gibt keine obere Grenze fur das Datenvolumen Eintrage konnen ohne Probleme geloscht werden Adresskollisionen fuhren nicht zur Clusterbildung Nachteile Bearbeiten Falls nicht eine ordnungserhaltende Hashfunktion zum Einsatz kam kein effizientes Durchlaufen der Eintrage nach einer Ordnung keine effiziente Suche nach dem Eintrag mit dem kleinsten oder grossten SchlusselAnwendung BearbeitenHashtabellen werden in praktisch jeder modernen Applikation eingesetzt etwa zur Implementierung von Mengen Sets oder Caches Assoziative Arrays Bearbeiten Ein typischer Anwendungsfall sind daneben assoziative Arrays auch bekannt als Map Lookup Table Dictionary oder Worterbuch das Nachschlagen der mit einem Schlussel assoziierten Daten kann mittels einer Hashtabelle schnell und elegant implementiert werden Symboltabellen Bearbeiten Symboltabellen wie sie Compiler oder Interpreter verwenden werden meist ebenfalls als Hashtabelle realisiert Datenbanken Bearbeiten Wichtig sind Hashtabellen auch fur Datenbanken zur Indizierung von Tabellen Ein Hashindex kann unter gunstigen Bedingungen zu idealen Zugriffszeiten fuhren Hashtabellen ermoglichen eine sehr schnelle Suche in grossen Datenmengen da mit der Berechnung des Hashwertes in einem einzigen Schritt die Anzahl der moglichen Zielobjekte eingeschrankt wird Damit gehoren Hashtabellen zu den effizientesten Indexstrukturen Ein grosser Nachteil ist jedoch die Gefahr der Entartung durch Kollisionen die bei einem stetigen Wachstum der Datenmenge unausweichlich sind wenn die Tabelle nicht vergrossert und jedes darin enthaltene Element neu gehasht wird Daher wegen ungunstiger IO Zugriffsmuster wenn die Hashtabelle auf einem Datentrager gespeichert ist und der fehlenden Moglichkeit Intervalle gemass einer Ordnungsrelation effizient zu iterieren muss der Einsatz von Datenbanksystemen gegenuber alternativen Indexdatenstrukturen wie z B B Baumen abgewogen werden Die meisten Hashfunktionen erlauben nicht die Bewegung zum nachsten oder vorherigen Datensatz gemass einer Ordnungsrelation da sie gezielt die Daten mischen um sie gleichmassig im Werteraum zu verteilen Nur spezielle ordnungserhaltende Hashfunktionen erlauben eine derartige Iteration gemass ihrer Ordnungsrelation und damit die Abfrage mit Ungleichheitsverknupfungen grosser als kleiner als oder den sortierten Zugriff auf alle Werte 6 Um solche Verfahren effizient einsetzen zu konnen ist meist eine vorherige Analyse der Datenverteilung notwendig Sie werden daher meist nur in Datenbanksystemen angewendet die eine solche Analyse auch beispielsweise zur Anfrageoptimierung durchfuhren Siehe auch BearbeitenBloomfilter R Baum effektives Indexverfahren fur mehrdimensionale Daten Verteilte Hashtabelle Nebenlaufige HashtabelleLiteratur BearbeitenMAURER Ward Douglas Hash Table Methods In ACM Computing Surveys CSUR Band 7 Nr 1 Marz 1975 S 5 19 doi 10 1145 356643 356645 englisch LITWIN Witold Linear Hashing a new tool for file and table addressing In IEEE Int Conf Very Large Database VLDB 80 Band 6 Oktober 1980 S 212 223 englisch northwestern edu PDF abgerufen am 18 Marz 2021 CELIS Pedro LARSON Per Ake MUNRO J Ian Robin hood hashing In 26th Annual Symposium on Foundations of Computer Science SFCS 1985 1985 S 281 288 doi 10 1109 SFCS 1985 48 englisch PAGH Rasmus RODLER Flemming Friche Cuckoo hashing In Journal of Algorithms Band 51 Nr 2 2004 S 122 144 doi 10 1016 j jalgor 2003 12 002 englisch BURKHARD Walter A Double hashing with passbits In Information processing letters Band 96 Nr 5 16 Dezember 2005 S 162 166 doi 10 1016 j ipl 2005 08 005 englisch Thomas H Cormen Charles E Leiserson Ronald L Rivest Introduction to Algorithms 1184 Seiten The MIT Press 2001 ISBN 0 262 53196 8 Alfons Kemper Andre Eickler Datenbanksysteme Eine Einfuhrung 7 Auflage Oldenbourg Verlag 2009 ISBN 3 486 57690 9 Seite 220f Christian Ullenboom Java ist auch eine Insel 1444 Seiten Galileo Press 2007 ISBN 3 89842 838 9 online als Openbook verfugbar Weblinks BearbeitenUmfangreiche Hashbibliothek mit weitreichender Analysefunktionalitat Cuckoo Hashing englisch PDF 169 KiB Hash TableEinzelnachweise Bearbeiten Stanford University Linear Probing Uri Zwick Tel Aviv University Hash Tables Linear Probing a b c O Bittel Hochschule Konstanz Algorithmen und Datenstrukturen Hashverfahren Martin Lercher Heinrich Heine Universitat Dusseldorf Algorithmen und Datenstrukturen Hash Verfahren Dave Mount University of Maryland Hashing Davi de Castro Reis Djamel Belazzougui Fabiano Cupertino Botelho Minimal Perfect Hash Functions Introduction SourceForge abgerufen am 8 November 2010 englisch Normdaten Sachbegriff GND 1046573225 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Hashtabelle amp oldid 237135639