提问者:小点点

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


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


共2个答案

匿名用户

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

假设我们需要一些碰撞解决算法,

二次探测在封闭哈希表中是一种更有效的算法,因为它更好地避免了线性探测可能出现的聚类问题,尽管它也不能幸免。

(来自维基百科)

二次探测并不完美,但它确实比其他方法提供了一些优势:

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

  • 存储管理的更简单逻辑(无动态分配)
  • 更快的插入(因为存储更简单)
  • 总体上减少了存储需求

(来自mjv的回答)

他知道哈希表永远是半满不到的吗?

不一定;这取决于使用的大小调整策略(如果有的话)。

考虑到你对QP的学习主要是教育性的。根据我的经验,实际的哈希表实现不经常使用开放寻址。

匿名用户

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

为了避免任何对“表半满”的担忧,在某个时候切换到线性探测是最简单的。(您可以将这种切换的阈值测试放在通常的if(index