MurmurHash
Contents
MurmurHash
介绍一种分布均匀的哈希算法——MurmurHash。它是由Austin Appleby在2008年发明的,并且经历了3次迭代,现在是MurmurHash3算法能够产生32位和128位的哈希值。MurmurHash不是加密型哈希函数,因而大多用于哈希式查找(hash-based lookups)。这个算法被多个开源项目引用,包括,nginx、libstdc++、Hadoop、libmemcached、npm、Guava等。MurmurHash的名字来源于内部循环multiply(MU)和rotate(R)。与这个算法一起发布的还有SMHasher哈希测试套件。
算法
MurmurHash3 的核心在于如下代码片段:
|
|
其中c1
输入数据的当前4字节块,h
是最终的哈希值。rotl
是位左旋转(rotate left)。
检验哈希函数的分布特性
SMHasher使用了术语**填充因子(fill factor)**来描述哈希函数的随机分布特性。填充因子就是给定一个表大小为N,键数目为K,如果所有键随机均匀分布在表的前F个槽,而F+1到N槽都是空的,那么 X=100*(F/N) 就是这个哈希函数的填充因子,可以认为这个哈希分布与在表上占据%X槽位的随机分布一致。
代数公式:
|
|
其中k
是键的数目,n
是槽的总数,r
是每个槽上的键数的均方根。
另
除此以外还有一些著名的哈希算法如:jenkins hash function、CityHash、Pearson hashing、Fowler-Noll-Vo hash function等。
参考阅读
MurmurHash in wikipedia Murmurhash3 wiki on github Murmurhash3 project Hash Distribution Hash FillFactor
Author zoro.wang
LastMod 2016-10-09