1

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

我的问题是为什么是5?是您始终使用 5 的协议还是它是如何工作的?

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

4

3 回答 3

2

不,第二个散列函数可以是任何你想要的。理想情况下,它应该有平等的机会到达哈希数组的每个单元格。

我的猜测是您没有从其他来源查找任何双重哈希示例。为简单起见,您使用的源决定% 5多次使用。

于 2012-12-20T13:53:15.437 回答
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] 中给出一个奇数
于 2012-12-20T14:04:42.190 回答
1

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

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

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

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

于 2012-12-20T13:58:44.027 回答