我最近一直在学习哈希表。有几个碰撞分辨率的例子,其中一个是二次探测。为什么有人会使用二次探测?他知道哈希表总是不到半满吗?如果是这样的话,为什么他会开始使用这么大的桌子?
答案 0 :(得分:2)
为什么有人会使用二次探测?
假设我们需要一些冲突解决算法,
二次探测在闭合哈希表中可以是一种更有效的算法,因为它可以更好地避免线性探测可能发生的聚类问题,尽管它不能免疫。
二次探测并不完美,但it does offer some advantages over alternatives:
二次(或其他形式)链接的优点是
- 更简单的存储管理逻辑(无动态分配)
- 更快的插入(为了更简单的存储)
- 通常降低存储要求
他是否知道哈希表总是不到半满?
不一定;它取决于所使用的调整大小策略,如果有的话。
考虑您对QP的学习主要是教育。在我的经验中,实际的哈希表实现通常不会使用open addressing,。
答案 1 :(得分:0)
二次重组是一种非常简单快速的方法,可以避免线性哈希的聚类问题。它通常仅在表格大小为素数时使用(由于其他原因也可能有用)。
为避免担心“表格半满”,最简单的方法是在某个时刻切换到线性探针。 (您可以将此类切换的阈值测试放在 if(index> = size){index - = size;} 块中,以避免任何性能损失。