使用二次探测哈希表实现的原因

时间:2013-04-13 20:34:16

标签: data-structures hashtable quadratic-probing

我最近一直在学习哈希表。有几个碰撞分辨率的例子,其中一个是二次探测。为什么有人会使用二次探测?他知道哈希表总是不到半满吗?如果是这样的话,为什么他会开始使用这么大的桌子?

2 个答案:

答案 0 :(得分:2)

  

为什么有人会使用二次探测?

假设我们需要一些冲突解决算法,

  

二次探测在闭合哈希表中可以是一种更有效的算法,因为它可以更好地避免线性探测可能发生的聚类问题,尽管它不能免疫。

(From Wikipedia)

二次探测并不完美,但it does offer some advantages over alternatives:

  

二次(或其他形式)链接的优点是

     
      
  • 更简单的存储管理逻辑(无动态分配)
  •   
  • 更快的插入(为了更简单的存储)
  •   
  • 通常降低存储要求
  •   

(from mjv's answer)

  

他是否知道哈希表总是不到半满?

不一定;它取决于所使用的调整大小策略,如果有的话。

考虑您对QP的学习主要是教育。在我的经验中,实际的哈希表实现通常不会使用open addressing,

答案 1 :(得分:0)

二次重组是一种非常简单快速的方法,可以避免线性哈希的聚类问题。它通常仅在表格大小为素数时使用(由于其他原因也可能有用)。

为避免担心“表格半满”,最简单的方法是在某个时刻切换到线性探针。 (您可以将此类切换的阈值测试放在 if(index> = size){index - = size;} 块中,以避免任何性能损失。