为双散列散列 table 大小选择的最佳质数?

Best prime numbers to choose for a double hashed hash table size?

为双哈希散列选择的最佳素数是什么table 大小?

旁白

我的想法:

谢谢,如有任何其他问题,我们将不胜感激

不确定我是否完全理解你的问题,但这里有一个 possible solution from the java world。我理解 为什么 如果你必须从头开始编写哈希函数,你通常需要质数,但不确定如果 "good" 哈希函数你是否需要研究它们像这样使用。

希望对您有所帮助!

twin prime 个数字中选择 high,i。 e.当pp - 2是质数时,选择p作为双倍哈希容量,因为hash_code % (size - 2)是双倍哈希算法的一个很好的二次步函数,模素数有点多"robust" 比模合数(如果 size - 2 是合数)。

对于小尺寸(大约 1000 左右)选择 所有 个素数,除了双对 中的小素数外,因为双对是对于良好的大小可预测性,在自然数标度的开头太罕见了。

添加 5 和 11 的大小(尽管它们在孪生素数中较低)以更好地解决非常小的 table 大小。

排除乘法哈希函数中经常使用的数字,在Java中是31,在String哈希函数中使用,我不知道[=43] =].

以上所有内容都在这个 Java runnable 中仔细编码,有很多预先生成的 table 大小(试图保持相邻 table 大小之间的最大差异为 0.005):

https://github.com/OpenHFT/Koloboke/blob/0498951705b45be2e1528afd786c03308c36e5dc/lib/impl/src/main/java/net/openhft/koloboke/collect/impl/hash/DHashCapacities.java#L255-L272

P. S. 我个人认为双重散列从来都不是最佳的开放式寻址方式,因为模运算在现代 CPU 中的成本高得离谱。考虑使用 QHash.