【问题标题】:Using a prime number for the size of a HashTable使用素数作为 HashTable 的大小
【发布时间】:2013-08-04 23:09:04
【问题描述】:

我一直在阅读有关 HashTables 的教科书,它说在重新散列时使用质数作为数组的大小,但它没有解释原因。我也用谷歌搜索了它,我发现的最佳答案是“出于技术原因”,这些原因是什么为什么应该使用质数来表示 HashTable 的大小?

【问题讨论】:

    标签: data-structures hash hashtable


    【解决方案1】:

    这取决于哈希函数。具体来说,为哈希表大小选择一个素数可以弥补所使用的哈希函数较差的事实,并且通常会为在执行期间自然一起出现的值返回全等哈希值。哈希表大小的质数提高了哈希函数可能具有的任何“周期”与哈希表大小相对质数的可能性。

    如果使用出色的哈希函数,例如加密哈希函数,您可以使用任何哈希表大小而无需担心。 2 的幂很便宜,因为除法变成了位掩码。

    【讨论】:

      【解决方案2】:

      我已经读到在 java 中 hashmap 的大小是 2 的幂,那是因为它有帮助 在数组上均匀分布元素。我认为使用素数也是为了避免碰撞和平均分配元素。桶索引决定为hashcode%arraysize, 现在,如果 size 是任何合数,那么碰撞的可能性就更大。

      【讨论】:

        猜你喜欢
        • 2012-04-26
        • 2015-02-11
        • 2012-10-11
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        • 2013-03-04
        • 2021-02-25
        • 2012-03-02
        相关资源
        最近更新 更多