Bei herkömmlichen Kollisionsauflösungsmethoden wie separater Verkettung und linearer / quadratischer Abtastung kann die Sondensequenz für einen Schlüssel beliebig lang sein - sie wird einfach mit hoher Wahrscheinlichkeit kurz gehalten, indem der Lastfaktor der Tabelle niedrig gehalten wird. Kollisionen während des Aufwärmens sind daher kein Problem, da sie den Lastfaktor nicht beeinflussen.
Bei Kuckuck-Hashing (und anderen Methoden, die eine O (1) -Nachschlagzeit im ungünstigsten Fall bieten?) Muss jedoch eine Größenänderung erfolgen , wenn die Prüfsequenz für einen Schlüssel zu lang wird. Wenn die Schlüssel jedoch während des erneuten Aufwärmens gemischt werden, kann es sein, dass sie eine zu lange Prüfsequenz für einen Schlüssel erstellen und eine weitere Größenänderung erfordern - möglicherweise mehrere, wenn dies mehrmals hintereinander geschieht. Die Wahrscheinlichkeit ist gering, besonders bei einer guten Hash-Funktion, aber ich habe gesehen, dass es passiert.
Gibt es eine Möglichkeit - ohne explizit eine perfekte Hash-Funktion während des Wiederaufbereitens zu generieren - sicherzustellen, dass Größenänderungen nicht auf diese Weise kaskadieren können? Möglicherweise spezifisch für ein bestimmtes Kollisionsauflösungsschema? Die Literatur, auf die ich bisher gestoßen bin, scheint die Sache völlig zu beschönigen. Denken Sie daran, dass ich auch daran interessiert bin, Hash-Tabellen zu verkleinern und nicht nur zu vergrößern.
quelle