当有超过sizeof(邻居)实际哈希冲突时,Hopscotch Hash Tables会发生什么?

时间:2013-05-26 18:33:58

标签: data-structures hash hashtable hash-collision hopscotch-hashing

相关链接:http://en.wikipedia.org/wiki/Hopscotch_hashing

Hopscotch哈希表看起来很棒,但我没有在文献中找到这个问题的答案:如果我的邻居大小是N并且(由于渎职或运气极差)会发生什么?我插入所有N + 1个元素哈希到相同的确切值?

2 个答案:

答案 0 :(得分:2)

在原始article中写道需要调整表的大小:

  

最后,请注意,如果通过h将多个常数项目进行哈希处理   在给定的存储桶中,需要调整表的大小。幸运的是,正如我们所展示的那样,一个普遍的   哈希函数h,给定H = 32时发生此类调整大小的概率是   1/32!

答案 1 :(得分:1)

有两种情况我们需要调整hopscotch hash的大小

  1. 您有给定存储桶的H碰撞
  2. 负载因子实在太大而无法找到空闲存储桶。在实践中,您应该为搜索免费存储桶设置一个上限。
  3. 鉴于通用哈希函数,你只有1/32!有机会进入案例#1,换句话说,如果你连续插入2 ^ 35个元素,那么你有一次机会因碰撞而调整大小。

    案例#2是在实践中调整大小的更受欢迎的原因,你可以参考一些二次实现来决定他们如何决定调整大小[C#hashmap和Google稀疏hashmap],因为它的集群没有真正的线性探测实现缺点,即不能保证不断查找。