【发布时间】:2011-01-23 02:11:30
【问题描述】:
我对哈希表进行了一些研究,并且一直遵循经验法则,即当有一定数量的条目(最大或通过 75% 之类的负载因子)时,应该扩展哈希表.
几乎总是,建议将哈希表的大小加倍(或加倍加 1,即 2n+1)。但是,我还没有找到一个很好的理由。
为什么要将大小增加一倍,而不是增加 25%,或者将其增加到下一个素数或下 k 个素数(例如三个)的大小?
我已经知道,选择一个素数的初始哈希表大小通常是一个好主意,至少如果您的哈希函数使用诸如通用哈希之类的模数。我知道这就是为什么通常建议使用 2n+1 而不是 2n(例如,http://www.concentric.net/~Ttwang/tech/hashsize.htm)
然而,正如我所说,我还没有看到任何真正的解释来解释为什么加倍或加倍实际上是一个不错的选择,而不是其他选择新哈希表大小的方法。
(是的,我已经阅读了关于哈希表的维基百科文章 :) http://en.wikipedia.org/wiki/Hash_table
【问题讨论】:
-
我相信这个问题背后的基本问题可以用一种更通用的方式来表述,而不仅仅是哈希表特有的问题。比如:“为什么许多集合通过将内部数组的大小增加一倍来调整自己的大小?”有关一个很好的解释,请参阅 Pete Kirkham 的回答:stackoverflow.com/questions/1424826/why-is-vector-array-doubled/…
标签: algorithm data-structures hash hashtable