A $d$-ary cuckoo hash table is an open-addressed hash table that stores each key $x$ in one of $d$ random positions $h_1(x), h_2(x), \ldots, h_d(x)$. In the offline setting, where all items are given and keys need only be matched to locations, it is possible to support a load factor of $1 - \epsilon$ while using $d = \lceil \ln \epsilon^{-1} + o(1) \rceil$ hashes. The online setting, where keys are moved as new keys arrive sequentially, has the additional challenge of the time to insert new keys, and it has not been known whether one can use $d = O(\ln \epsilon^{-1})$ hashes to support $\poly(\epsilon^{-1})$ expected-time insertions. In this paper, we introduce bubble-up cuckoo hashing, an implementation of $d$-ary cuckoo hashing that achieves all of the following properties simultaneously: (1) uses $d = \lceil \ln \epsilon^{-1} + \alpha \rceil$ hash locations per item for an arbitrarily small positive constant $\alpha$. (2) achieves expected insertion time $O(\delta^{-1})$ for any insertion taking place at load factor $1 - \delta \le 1 - \epsilon$. (3) achieves expected positive query time $O(1)$, independent of $d$ and $\epsilon$. The first two properties give an essentially optimal value of $d$ without compromising insertion time. The third property is interesting even in the offline setting: it says that, even though \emph{negative} queries must take time $d$, positive queries can actually be implemented in $O(1)$ expected time, even when $d$ is large.
翻译:暂无翻译