java—数组中的双哈希表示

xzabzqsa  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(338)

我一直在尝试做双重散列,但我混淆了使用双重散列函数h'时会发生什么。
当第一个哈希函数发生冲突时,是否会将第二个哈希函数的值添加到第一个哈希函数的值中?
我尝试了很多方法,但都没能解决这个问题,问题是下面链接的图像:
http://postimg.org/image/k6ko6e0gp/
如何用双重散列来解决这个问题?数组中已有3个元素,需要再插入3个元素

8zzbczxx

8zzbczxx1#

双重散列是解决冲突的一种方法(将多个键散列到单个索引)。在双哈希中,将使用两个哈希函数;在发生冲突的情况下,将使用第二个散列函数来查找步长,在该步长下,应在表中搜索一个空单元格以放置键。此链接概述了可能的冲突解决方法。http://www.cs.utexas.edu/users/mitra/csspring2016/cs313/lectures/hash.html
在您的例子中,在检查了附加的图像之后,很明显键16会与索引6中的其他键发生冲突,因此,您必须应用第二个哈希函数来确定步长。从第一个散列的索引开始,应检查每个(步长)元素是否有空单元。一旦发现空电池,钥匙应放在该电池中。例如,第一个哈希索引为0,步长为2,然后索引为0、2、4。。应该检查。请记住,有时,探测需要绕到表的开头以找到空单元格。
因此,根据所附的图像,键16的步长为2。因此,从6开始,步长为2,下一个可用插槽是索引1,它是空闲的:)
如果在这种情况下找不到空单元格,则应使用新的容量调整哈希表的大小。这被称为重新灰化,这通常是一个昂贵的操作,因为它需要重新灰化表中的所有元素。应在工作台达到一定尺寸阈值后进行。

相关问题