什么时候应该重新整理哈希表呢?

时间:2009-10-21 21:16:51

标签: algorithm hash hashtable

如何决定何时对整个哈希表进行重新整理?

3 个答案:

答案 0 :(得分:7)

这在很大程度上取决于你如何解决冲突。如果您使用线性探测,性能通常会在负载因子远高于60%左右时开始下降。如果使用双重散列,则80-85%的负载系数通常非常合理。如果使用碰撞链,性能通常保持合理,载荷因子可达150%左右或更高。

我有时甚至创建了一个带有平衡树的哈希表来进行冲突解决。在这种情况下,您可以几乎忘记重新散列 - 在项目数量超过表格大小至少几个数量级之前,性能不会明显恶化。“ p>

答案 1 :(得分:3)

通常,您有一个哈希表,其中包含以M个插槽的数组分布的N个元素。

在实例化以这种方式使用的哈希表时,用户定义了一个百分比值(称为“growthFactor”):

if (growthRatio < (N/M))
  Rehash();
重新散列意味着你的M个插槽数组应该调整大小以包含更多元素(大于当前大小(或大2倍)的素数是理想的)并且你的元素必须分布在新的更大的数组中。

此值应设置为介于0.6和0.8之间。

答案 2 :(得分:0)

经验法则是在桌子3/4满后重新调整大小。