让我们说我使用线性探测来创建一个700到800万个元素之间的哈希来处理冲突。如何确定需要多少桶?
答案 0 :(得分:1)
没有完美的答案......桶的数量会影响内存使用和性能,并且特定元素更容易发生冲突(与您的哈希函数和表大小相结合 - 例如,素数的桶数趋向于比2的权力更宽容,你可能想要的桶越多。
因此,如果您需要精确调整,最好的方法是获取真实的数据并尝试一系列负载因子(即#surle中的#元素),看看内存/性能权衡最适合您的位置。
如果你只是想要一个通常有用的负载因子作为出发点,如果你有一个中途不错的哈希函数,也许可以尝试.7到.8。换句话说,对于桶数来说,一个常用的球场数字将是800万/ .7或/ .8,即10到1140万。
如果你认真对待这个问题,并且没有其他充分理由坚持下去(例如,使用即时压缩支持元素删除而不是"墓碑"标记一次使用的桶,元素查找/删除必须跳过并继续探测),你应该放弃线性探测,因为它会比大多数替代方案给你带来更多的碰撞。