A minimal perfect hash function (MPHF) is a bijection from a set of objects S to the first |S| integers. It can be used as a building block in databases and data compression. RecSplit [Esposito et al., ALENEX20] is currently the most space efficient practical minimal perfect hash function. Its main building blocks are splittings and bijections. Using a tree-like data structure, RecSplit first splits the input set into small sets of constant size l and then computes a bijection on each leaf. Both splittings and bijections heavily rely on trying multiple hash functions in a brute-force way. We greatly improve the construction time of RecSplit using two orthogonal approaches. On the one hand, we explore the trade-off between (exponential time) brute force and more informed (polynomial time) search heuristics. Rotation fitting hashes the objects in each leaf to two sets and tries to combine them to a bijection by cyclically shifting one set to fill the holes in the other. ShockHash constructs a small cuckoo hash table in each leaf, which is overloaded to hold more objects than the asymptotic maximum. On the other hand, we harness parallelism on the level of bits, vectors, cores, and GPUs. In combination, the resulting improvements yield speedups up to 241 on a CPU and up to 2072 using a GPU. The original RecSplit implementation needs 19 minutes to construct an MPHF for 1 Million objects with 1.56 bits per object. On the GPU, we achieve the same space usage in 1.5 seconds. Given that the speedups are larger than the increase in energy consumption, our implementation is more energy efficient than the original implementation. As a result, our improved RecSplit implementation is now the approach to perfect hashing with the fastest construction time over a wide range of space budgets. Surprisingly, this even holds for rather high space budgets where asymptotically faster methods are available.
翻译:最小的完美 hash 函数( MPHF) 是一个从一组物体 S 到第一个 +S Q 整数的双曲线。 它可以被用作数据库和数据压缩中的一个建筑块。 resplit [Esposito 等, ALENEX20] 是目前最空间高效的最小的完美 hash 函数。 它的主要构件是分割和双向。 使用像树一样的数据结构, RecSplit 首先将输入的集成成成为一组小的不变大小 I, 然后对每个叶叶子进行双弹射。 分裂和双弹都严重依赖尝试多倍的 Hash 功能。 我们大大改进 RecSplit [Espositititititit et al- al- listal] 的构造时间。 使用一个更快速的平流动的平流体电流到另一个平面的电压, 使用一个更快速的电流的电压到另一个的电压。