双哈希常数5?

时间:2012-12-20 13:46:12

标签: java hash hashcode double-hashing

我已经发现大量的双哈希示例所有示例都告诉我,当你第二次哈希时你必须使用%5。

我的问题是为什么5?这是一个你总是使用5的协议,或者它是如何工作的?

一个例子:https://www.cs.washington.edu/education/courses/326/00wi/handouts/lecture16/sld025.htm

3 个答案:

答案 0 :(得分:2)

没有。第二个散列函数可以是你想要的任何东西。理想情况下,它应该有相同的机会到达散列数组的每个单元格。

我的猜测是你没有查找来自不同来源的双重哈希的任何示例。您使用的来源决定多次使用% 5以简化。

答案 1 :(得分:2)

在具有N个位置的哈希表中,想法是使用两个独立的哈希函数h1(key)和h2(key)然后使用探测序列

h1%N,(h1 + h2)%N,(h1 + 2 * h2)%N,(h1 + 3 * h2)%N,......

你想确保h2和N的最大公约数是1,否则你不能到达表中的所有位置。

有几种方案可以实现,例如:

  • 选择N作为素数,让h2在区间[1,N-1]
  • 中给出结果
  • 选择N作为2的幂,让h2在区间[1,N-1]中给出奇数

答案 2 :(得分:1)

你并不总是使用5,你甚至也不总是使用%。

在你的例子中。 %7和%5是您的散列函数。然而,实际上,它们可能是完全不同的功能。

此示例使用%5,因为它对于示例来说足够简单。唯一真正的要求是这两个函数是独立的。

请参阅http://en.wikipedia.org/wiki/Double_hashing