哈希

前言

最近在工作中碰到了哈希相关的事情,这里就简单探讨下哈希算法。

1.哈希表的长度为什么是素数

在哈希表中,我们需要用哈希表的长度作为除数进行模运算。对于素数而言,它的公因子只有1和它本身,因此使用素数取模时,可以保证取模结果尽量是平均分布的,即可以降低哈希冲突。

当然取模结果的分布情况跟被除数(hashkey)也有关系,但在hashkey相同的情况下,永远是素数比非素数的分布情况更好一些。因此哈希表的长度都为素数。

2.哈希算法

哈希算法有很多,针对不同的场景,不同类型(整型、字符型的hashkey,也有很多定制的哈希算法。目前最常用的、应用最广泛的字符型哈希算法是time33算法,其实就是针对每一个字符,不停✖️33,得到最终的hashkey。

time33算法的初始值是5381,为什么是5381呢?据说是经过验证后发现5381的分布情况会好一些。

整数型哈希算法一般都是根据实际场景需求来自己设置。比如两个key、三个key,应该如何设置乘数,调整位置,将其统一起来得到一个固定的、分布情况较好的哈希算法,降低哈希冲突。这些仍有待验证...


标题:哈希
作者:staymeloo7
联系方式:staycoolsun@gmail.com

    评论
    0 评论
avatar

取消