【问题标题】:When should I do rehashing of entire hash table?我应该什么时候对整个哈希表进行重新散列?
【发布时间】:2009-10-21 21:16:51
【问题描述】:

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

【问题讨论】:

    标签: algorithm hash hashtable


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      if (growthRatio < (N/M))
        Rehash();
      

      重新散列意味着您的 M 个插槽数组应调整大小以包含更多元素(比当前大小大(或大 2 倍)的素数是理想的),并且您的元素必须分布在新的更大数组中。

      这个值应该设置在 0.6 到 0.8 之间。

      【讨论】:

      • 只是 FWIW,通常称为“负载因子”而不是“增长因子”。
      【解决方案3】:

      经验法则是在表格占满 3/4 后重新调整大小。

      【讨论】:

        猜你喜欢
        • 2018-05-30
        • 1970-01-01
        • 2015-03-30
        • 1970-01-01
        • 2012-12-25
        • 2021-03-23
        • 2016-07-11
        • 2014-07-30
        相关资源
        最近更新 更多