当我应该做的整个哈希表的老调重弹?(When should I do rehashing of en

2019-08-31 07:57发布

如何时应该怎么做换汤不换药整个哈希表的我决定?

Answer 1:

这取决于你如何解决冲突的一个很大。 如果用户线性探测,性能通常开始与客座率超过60%左右的高得多相当严重下降。 如果使用双散列,80-85%的负载系数通常是相当合理的。 如果您使用的碰撞链接,表现通常保持合理与客座率高达%约150或以上。

我有时甚至创建与冲突解决平衡树的哈希表。 在这种情况下,你几乎可以忘掉重新哈希-性能不启动,直到项目的数量按数量至少一对夫妇的订单超过了表的大小显着地恶化。



Answer 2:

通常,有一个包含分布在M个时隙的阵列的N个元素的哈希表。

有实例化以这种方式使用的哈希表时由用户定义的百分比值(称为“生长因子”):

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

的翻版意味着你的M个时隙的阵列应被调整为包含多个元素(一个素数比当前的大小(或2x更大)是理想的更高)和您的元素必须分配新的更大的阵列英寸

这样的值应该为0.6和0.8之间的事情。



Answer 3:

经验法则是调整表一旦它的3/4。



文章来源: When should I do rehashing of entire hash table?