【发布时间】:2009-10-21 21:16:51
【问题描述】:
我如何决定何时对整个哈希表进行重新散列?
【问题讨论】:
我如何决定何时对整个哈希表进行重新散列?
【问题讨论】:
这在很大程度上取决于您如何解决冲突。如果您使用线性探测,则性能通常会在负载因子远高于 60% 左右时开始严重下降。如果你使用双重散列,80-85% 的负载因子通常是相当合理的。如果您使用碰撞链接,则性能通常在负载因子高达 150% 或更高的情况下保持合理。
我有时甚至创建了一个带有平衡树的哈希表来解决冲突。在这种情况下,您几乎可以忘记重新散列 - 在项目数超过表大小至少几个数量级之前,性能不会开始明显下降。 p>
【讨论】:
通常,您有一个哈希表,其中包含分布在 M 个插槽数组中的 N 个元素。
有一个用户在实例化哈希表时定义的百分比值(称为“growthFactor”)以这种方式使用:
if (growthRatio < (N/M))
Rehash();
重新散列意味着您的 M 个插槽数组应调整大小以包含更多元素(比当前大小大(或大 2 倍)的素数是理想的),并且您的元素必须分布在新的更大数组中。
这个值应该设置在 0.6 到 0.8 之间。
【讨论】:
经验法则是在表格占满 3/4 后重新调整大小。
【讨论】: