我发现了大量的双散列示例,所有示例都告诉我,当你第二次散列时,你必须使用 %5。
我的问题是为什么是5?是您始终使用 5 的协议还是它是如何工作的?
一个例子:https ://www.cs.washington.edu/education/courses/326/00wi/handouts/lecture16/sld025.htm
我发现了大量的双散列示例,所有示例都告诉我,当你第二次散列时,你必须使用 %5。
我的问题是为什么是5?是您始终使用 5 的协议还是它是如何工作的?
一个例子:https ://www.cs.washington.edu/education/courses/326/00wi/handouts/lecture16/sld025.htm
不,第二个散列函数可以是任何你想要的。理想情况下,它应该有平等的机会到达哈希数组的每个单元格。
我的猜测是您没有从其他来源查找任何双重哈希示例。为简单起见,您使用的源决定% 5
多次使用。
在有 N 个位置的哈希表中,想法是使用两个独立的哈希函数 h1(key) 和 h2(key),然后使用探测序列
h1 % N, (h1 + h2) % N, (h1 + 2*h2) % N, (h1 + 3*h2) % N, ...
您要确保 h2 和 N 的最大公约数为 1,否则您无法到达表中的所有位置。
有几种方案可以实现,例如:
您并不总是使用 5,甚至也不总是使用 %。
在你的例子中。%7 和 %5 是您的散列函数。然而,实际上,它们可能是完全不同的功能。
此示例使用 %5,因为它对于示例来说足够简单。唯一真正的要求是这两个功能是独立的。