我一直在尝试进行双重哈希,但是我对使用双重哈希函数h'时发生的事情感到困惑。
当第一个哈希函数发生冲突时,是否将二级哈希函数的值添加到第一个哈希函数的值?
我尝试了很多方法而且无法解决这个问题,所讨论的问题是以下链接中的图像:
http://postimg.org/image/k6ko6e0gp/
如何通过双重散列解决这个问题?数组中已有3个元素,还需要插入3个元素
答案 0 :(得分:2)
双重散列是一种解决冲突的方法(多个键散列到单个索引)。在双重散列中,将使用两个散列函数;在发生冲突的情况下,将使用第二个散列函数来查找用于搜索表的空白单元以放置密钥的步长。此链接概述了可能的冲突解决方法。 http://www.cs.utexas.edu/users/mitra/csSpring2016/cs313/lectures/hash.html
在您的情况下,在检查附加的图像后,很明显键16将与索引6中的某个其他键冲突,因此,您将必须应用第二个哈希函数来确定步长。从第一个散列的索引,应检查每个(步长)元素的空单元格。找到空单元格后,密钥应放在该单元格中。例如,第一个哈希索引为0,步长为2,则应检查索引0,2,4 ..请记住,有时,探测需要环绕到表的开头以找到空单元格。
因此,根据附带的图像,键16的步长为2.因此,从6开始,步长为2,下一个可用的时隙是索引1,这是免费的:)
如果在这种情况下找不到空单元格,则应使用新容量调整哈希表的大小。这称为rehashing,通常是一种代价高昂的操作,因为它需要重新散列表中的所有元素。在表格达到一定的大小阈值后,应该完成一次。