Data structures 在第二个哈希函数中使用复合数的双哈希

Data structures 在第二个哈希函数中使用复合数的双哈希,data-structures,hash,hash-collision,Data Structures,Hash,Hash Collision,我意识到最佳实践是在第二个哈希函数的mod函数中使用最大的素数(小于数组的大小),这是最佳实践 但我的问题是关于非素数的数字的使用。 我对伪代码不感兴趣,只是概念背后的想法 假设我有一个数组m=20,我必须在6,9,12和15之间选择,作为将在第二个散列函数中输入的值。哪一个会给我最好的“传播” 我的第一个想法是采用与选择质数相同的想法,只是稍微修改一下,这意味着使用最大的数,排列的数量最少: 6->2,3 9->3,3=3 12->2,3,4,6 15->3,5 在bat的右边,我可以规则6(

我意识到最佳实践是在第二个哈希函数的mod函数中使用最大的素数(小于数组的大小),这是最佳实践

但我的问题是关于非素数的数字的使用。 我对伪代码不感兴趣,只是概念背后的想法

假设我有一个数组m=20,我必须在6,9,12和15之间选择,作为将在第二个散列函数中输入的值。哪一个会给我最好的“传播”

我的第一个想法是采用与选择质数相同的想法,只是稍微修改一下,这意味着使用最大的数,排列的数量最少:

6->2,3

9->3,3=3

12->2,3,4,6

15->3,5

在bat的右边,我可以规则6(存在具有相同数量排列的较大数字)和12(太多排列)退出

现在问题来了,我应该使用9-置换量最少,还是应该选择15-尽管它有更多的置换,但它比9大得多,并且更接近数组的大小(m=20)


我使用这种方法正确吗?或者,如果我只能从上述数字中选择,有没有更好的方法来选择一个数字

我已经找到了我一直在寻找的答案,所以我把这个问题和正确的答案留在这里,以防其他人需要它

如果我们被迫选择一个非素数的数字作为第二个哈希函数(在该函数的mod中)中使用的数字:

正确的方法是使用GCD函数(最大公分母),找到“相互素数”的数字。这意味着,我们正在寻找的任何数字,其gcd与20将导致1

在这种情况下:

gcd(20,6)= 2
gcd(20,9)= 1
gcd(20,12)= 3
gcd(20,15)= 5

正如我们所看到的,20到9之间的gcd是1,这意味着它们除了1之外没有其他共同因素。因此,9是正确答案。

交叉张贴:。请每个社区都应该有一个诚实的回答机会,而不会浪费任何人的时间。我还没有得到答案。我把同样的问题贴到计算机科学论坛上,是为了增加这个问题的曝光率,希望得到一些评论。