【问题标题】:How do I figure out how many buckets are required for a Hash table based on the number of elements? [closed]如何根据元素的数量确定哈希表需要多少个桶? [关闭]
【发布时间】:2016-10-08 07:27:01
【问题描述】:

假设我正在创建一个包含 7 到 800 万个元素的散列,使用线性探测来处理冲突。如何确定需要多少个存储桶?

【问题讨论】:

    标签: data-structures hash hashtable hash-collision


    【解决方案1】:

    没有完美的答案...存储桶的数量会影响内存使用和性能,并且特定元素更容易发生冲突(结合您的哈希函数和表大小 - 例如,质数的存储桶往往会比 2 的幂更宽容)你可能想要的桶越多。

    因此,如果您需要精确调优,最好的方法是获取真实数据并尝试一系列负载因子(即 # 个元素到 # 个存储桶),看看内存/性能权衡最适合您的位置。

    如果您只是想要一个通常有用的负载因子作为出发点,如果您有一个不错的哈希函数,也许可以尝试 0.7 到 0.8。换句话说,桶数的一个合理的大致数字是 800 万 / .7 或 / .8,即约 10 到 1140 万。

    如果您认真考虑积极地调整它,并且没有其他充分的理由坚持使用它(例如,使用立即压缩来支持元素删除,而不是“墓碑”标记曾经使用过的桶来查找哪些元素/删除必须跳过并继续探测),您应该停止线性探测,因为它会给您带来比大多数替代方案更多的冲突。

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2016-07-19
      • 2016-11-02
      • 2013-06-30
      相关资源
      最近更新 更多