【发布时间】:2016-10-08 07:27:01
【问题描述】:
假设我正在创建一个包含 7 到 800 万个元素的散列,使用线性探测来处理冲突。如何确定需要多少个存储桶?
【问题讨论】:
标签: data-structures hash hashtable hash-collision
假设我正在创建一个包含 7 到 800 万个元素的散列,使用线性探测来处理冲突。如何确定需要多少个存储桶?
【问题讨论】:
标签: data-structures hash hashtable hash-collision
没有完美的答案...存储桶的数量会影响内存使用和性能,并且特定元素更容易发生冲突(结合您的哈希函数和表大小 - 例如,质数的存储桶往往会比 2 的幂更宽容)你可能想要的桶越多。
因此,如果您需要精确调优,最好的方法是获取真实数据并尝试一系列负载因子(即 # 个元素到 # 个存储桶),看看内存/性能权衡最适合您的位置。
如果您只是想要一个通常有用的负载因子作为出发点,如果您有一个不错的哈希函数,也许可以尝试 0.7 到 0.8。换句话说,桶数的一个合理的大致数字是 800 万 / .7 或 / .8,即约 10 到 1140 万。
如果您认真考虑积极地调整它,并且没有其他充分的理由坚持使用它(例如,使用立即压缩来支持元素删除,而不是“墓碑”标记曾经使用过的桶来查找哪些元素/删除必须跳过并继续探测),您应该停止线性探测,因为它会给您带来比大多数替代方案更多的冲突。
【讨论】: