Dynamische perfekte Hash-Tabellen und Kuckuck-Hash-Tabellen sind zwei unterschiedliche Datenstrukturen, die O (1) -Suchvorgänge im ungünstigsten Fall und erwartete O (1) -Zeit-Einfügungen und -Löschungen unterstützen. Beide benötigen O (n) Hilfsraum und Zugang zu Familien von Hash-Funktionen für ihre Operationen.
Ich denke, dass diese beiden Datenstrukturen für sich genommen schön und brillant sind, aber ich bin mir nicht sicher, wie und wann eine dieser Strukturen der anderen vorzuziehen wäre.
Gibt es bestimmte Zusammenhänge, in denen eine dieser Datenstrukturen einen klaren Vorteil gegenüber der anderen hat? Oder sind sie meistens austauschbar?
data-structures
hash-tables
templatetypedef
quelle
quelle
Antworten:
Dynamic Perfect Hashing im Sinne von Dietzfelbinger et al. braucht nur 2-unabhängige hashing . Während es einige Ergebnisse für einfaches Hashing für Kuckuck-Hash-Tabellen gibt, wie z. B. Hashing mit verdrehter Tabellierung und "Explizite und effiziente Hash-Familien, die für Kuckuck-Hashing mit einem Stash ausreichen", ist das ursprüngliche dynamische perfekte Hashing in gewisser Hinsicht robuster.
quelle
Beim Cuckoo-Hashing können Suchvorgänge parallel ausgeführt werden, während beim ursprünglichen dynamischen Perfect-Hashing-Schema von Dietzfelbinger et al. Zwei verkettete Speicherzugriffe erforderlich sind, bei denen der zweite Zugriff Informationen verwendet, die aus dem ersten abgerufen wurden.
quelle
Es ist relativ einfach, die Raumeffizienz des Kuckucks zu erhöhen, indem jeder Schlitz mehr als einen Gegenstand aufnehmen kann. Für Steckplätze der Größe 4 beträgt die Raumeffizienz etwa 95%. Das heißt, Elemente können eingefügt werden, bis 95% des Speicherplatzes in der Tabelle für Elemente verwendet werden, nicht nur für Orte, an denen Elemente abgelegt werden können.
Andererseits sind die Schranken bei Dietzfelbinger et al. Papier über Dynamic Perfect Hashing beweist nur, dass Einfügevorgänge ausgeführt werden können, solange die Tabelle nicht mehr als 3% voll ist.
quelle
quelle