www.wikidata.de-de.nina.az
Kuckucks Hashing englisch cuckoo hashing ist ein Algorithmus der mittels zweier Hashfunktionen den Index in einer Tabelle berechnet an dem das Element eingefugt werden soll Er wurde 2001 von Rasmus Pagh und Flemming Friche Rodler entwickelt 1 Seinen Namen hat er von dem Kuckuck der seine Eier in fremde Nester legt und dessen Kuken die Eier der Wirtseltern aus dem Nest stossen Inhaltsverzeichnis 1 Funktionsweise 2 Pseudocode 3 Beispiel 3 1 Zyklus 4 EinzelnachweiseFunktionsweise BearbeitenJede der beiden Hashfunktionen berechnet den Index eines einzufugenden Elementes jeweils fur eine Tabelle Zuerst wird gepruft ob das einzufugende Element mit der Hashfunktion h displaystyle h nbsp in die Tabelle an der Stelle h k displaystyle h k nbsp eingefugt werden kann Ist das der Fall dann wird das Element dort eingefugt Wenn der Platz jedoch schon belegt ist dann wird mit der zweiten Hashfunktion h k displaystyle h k nbsp der Platz in der zweiten Tabelle berechnet und wenn dieser frei ist dort eingefugt Ist jedoch der Platz auch belegt wird das einzufugende Element in die erste Tabelle eingefugt und das Element das dort vorher war in die zweite Tabelle verschoben Wenn nun dort wieder eine Kollision auftritt dann wird das Element von dort wieder in die erste Tabelle verlegt Ist der Platz in der ersten Tabelle frei ist das Einfugen beendet Sollte jedoch auch hier wieder ein Element den Platz belegen dann wird es wieder in die zweite Tabelle verschoben Dieses Verfahren wiederholt man so lange bis ein freier Platz gefunden wurde Es kann jedoch vorkommen dass die gleiche Tabellenkonstellation wie zu Beginn auftritt damit gerat das Verfahren dann in einen Zyklus Endlosschleife In diesem Fall wird die Tabelle mit neuen Hashfunktionen neu aufgebaut Pseudocode BearbeitenInsert T1 T2 x key x schon in Hashtabelle if T1 h1 key x NIL or key T1 h1 key x key x then T1 h1 key x x return if T2 h2 key x NIL or key T2 h2 key x key x then T2 h2 key x x return nein dann einfugen while true do x T1 h1 key x tausche x mit Pos in T1 if x NIL then return x T2 h2 key x tausche x mit Pos in T2 if x NIL then returnBeispiel BearbeitenFolgende Hashfunktionen sind gegeben h k k mod 11 displaystyle h left k right k mod 11 nbsp h k k 11 mod 11 displaystyle h left k right left lfloor frac k 11 right rfloor mod 11 nbsp k h k h k 20 9 150 6 453 9 475 9 6100 1 967 1 6105 6 93 3 036 3 339 6 3 1 Tabelle fur h k 20 50 53 75 100 67 105 3 36 3901 100 67 67 67 67 10023 3 3 36456 50 50 50 50 50 105 105 105 50789 20 20 20 20 20 20 53 53 53 7510 2 Tabelle fur h k 20 50 53 75 100 67 105 3 36 390 31 20 20 20 2023 36 394 53 53 53 53 50 50 50 5356 75 75 75 75 75 75 67789 100 100 100 100 10510 Zyklus Bearbeiten Mochte man nun das Element 6 einfugen dann gerat man in einen Zyklus In der letzten Zeile der Tabelle findet sich die gleiche Ausgangssituation wie zu Beginn wieder h 6 6 mod 11 6 displaystyle h left 6 right 6 mod 11 6 nbsp h 6 6 11 mod 11 0 displaystyle h left 6 right left lfloor frac 6 11 right rfloor mod 11 0 nbsp betrachteter Schlussel Tabelle 1 Tabelle 2alter Wert neuer Wert alter Wert neuer Wert6 50 6 53 5053 75 53 67 7567 100 67 105 100105 6 105 3 63 36 3 39 3639 105 39 100 105100 67 100 75 6775 53 75 50 5350 39 50 36 3936 3 36 6 36 50 6 53 50Einzelnachweise Bearbeiten Rasmus Pagh Flemming Friche Rodler Cuckoo Hashing 2001 Online PDF 242 kB abgerufen am 16 Oktober 2021 Abgerufen von https de wikipedia org w index php title Kuckucks Hashing amp oldid 230888747