为什么我们只根据负载因子动态调整哈希表大小? 如果我们选择在均匀分布散列策略中检测到碰撞时几何增加表格大小,我们可能会产生任何影响。
答案 0 :(得分:0)
假设哈希函数是好的,加载因子大致是碰撞的概率,所以这两个想法并不相距甚远。
使用加载因子是因为它易于计算,并且在统计上没有噪声,实际的碰撞是。
另一个原因是遍历表中所有元素的成本。仍然需要检查空桶,因此加载因子上的括号也是枚举所有存储元素的最差性能的括号。
使用它们调整工作台尺寸时,碰撞模式中的自然噪音是个问题。我们永远不会完全遵循您提出的政策。即使载荷因子为25%,我们也会在每次插入时以1/4的概率逐步增长(比如因子G> 1)表,然后再次以概率1 /(4G)等表示。我们将如何决定什么时候收缩一张桌子?当然不是每次都没有碰撞!
因此实际上我们必须计算“窗口”中的碰撞与插入,并在比率超过高阈值和低阈值时进行调整。窗口必须相当大才能很好地滤除噪声。它需要存储和计算开销来维护。这可能是不值得的,至少对于大多数时候使用的小表来说。
尽管如此,在数据库中,表格较大且操作很多的设置中,实际统计数据用于优化性能。我不确定在真实软件中这个优化中是否包含哈希表大小,但它是可能的。我可以想象的最可能的原因是不愿意接受哈希函数失败的微小风险。