Hash 当表大小是固定的而不是素数时,有没有办法为双哈希创建一个好的二次哈希函数?

Hash 当表大小是固定的而不是素数时,有没有办法为双哈希创建一个好的二次哈希函数?,hash,hashtable,implementation,number-theory,double-hashing,Hash,Hashtable,Implementation,Number Theory,Double Hashing,我必须实现双哈希。我的理解是,次要哈希函数充当遍历整个哈希表的RNG排序。当输出是相对于表大小的相对素数时,这是有保证的 但是,由于各种原因,表格大小是预设的,而不是素数(精确地说是10的倍数)。我正在寻找一个性能良好的二级哈希函数。我曾考虑: 取一些不除以表大小%tablesize的小奇数的幂 计算表大小的相对素数列表并从中选取值 与2相同,但使用预先计算的素数列表。由于表大小不变,而且相当短,因此这是可行的 我见过这样的例子,比如素数-(k%素数)。然而,对于任何大于3的素数,其输出不一定是

我必须实现双哈希。我的理解是,次要哈希函数充当遍历整个哈希表的RNG排序。当输出是相对于表大小的相对素数时,这是有保证的

但是,由于各种原因,表格大小是预设的,而不是素数(精确地说是10的倍数)。我正在寻找一个性能良好的二级哈希函数。我曾考虑:

  • 取一些不除以表大小%tablesize的小奇数的幂
  • 计算表大小的相对素数列表并从中选取值
  • 与2相同,但使用预先计算的素数列表。由于表大小不变,而且相当短,因此这是可行的
  • 我见过这样的例子,比如素数-(k%素数)。然而,对于任何大于3的素数,其输出不一定是10的倍数。这也意味着我将经常得到相同的值。一、 假设那不是件好事
  • 所有这些都是可行的,但我不知道哪一个更好。可能是第一个,因为我可以用3的幂。如有其他选择,我们将不胜感激

    我还被告知要实现一个额外的哈希方法:

    customHash(k, i) = (Hash(k) + C1 × i × secondaryHash(k) + C2 × i^2) % tablesize
    
    C1和C2是常数。i=#个迭代

    这是否保证遍历整个表?我可以看出,二次部分很容易重复