murmur哈希 - 是什么呢?(MurmurHash - what is it?)

2019-06-26 23:20发布

我一直在试图得到一个什么样的高度认识murmur哈希一样。

我读过的基本描述,但还没有找到的时候使用它,为什么一个很好的解释。 我知道它的速度非常快,但想知道更多一点。

我问了一个相关的问题 ,我怎么能适应UUID成Redis的位集合,并使用murmur哈希有人建议。 它的工作原理,但我想了解风险/收益。

Answer 1:

杂音是良好的通用散列函数,适用于非加密使用一个家庭。 正如奥斯汀·阿普尔比说,murmur哈希提供了以下好处:

  • 简单(在生成的汇编指令数的术语)。
  • 良好的销售(通过卡方检验用于几乎所有的按键组和桶的大小。
  • 良好的雪崩行为(0.5%最大偏差)。
  • 良好抗冲突性(通过鲍勃詹的frog.c折磨测试。没有冲突可能对4个字节的密钥,不小(1至7位)的差异)。
  • 在Intel / AMD的硬件强大的性能,哈希质量和CPU消耗之间很好的折衷。

你当然可以用它来凑的UUID(像任何其他先进的散列函数:CityHash,詹金斯,保罗谢长廷,等...)。 现在,Redis的位集被限制为4 GB位(512 MB)。 所以需要减少数据(UUID)的128位至32位(散列值)。 无论哈希函数的质量,就会有冲突。

使用像杂音的工程哈希函数将最大限度地分布的质量,最大限度地减少冲突的数量,但它不提供其他担保。

这里有一些链接比较通用Hash函数的质量:

http://www.azillionmonkeys.com/qed/hash.html

http://www.strchr.com/hash_functions

http://blog.aggregateknowledge.com/2011/12/05/choosing-a-good-hash-function-part-1/

http://blog.aggregateknowledge.com/2011/12/29/choosing-a-good-hash-function-part-2/

http://blog.aggregateknowledge.com/2012/02/02/choosing-a-good-hash-function-part-3/



Answer 2:

我知道我这么晚才回复,但它可以帮助任何其他人...

杂音哈希是一个非加密散列函数 ,其用于基于散列查找窗口 ,它采用3个基本操作作为一个整体乘 , 旋转和XOR 。 它采用多种常量这只是有通过将2次基本的测试,使其良好的散列函数。

  1. 雪崩测试
  2. 卡方检验

你可以看这个视频,我提出,为杂音散列的详细解释。



文章来源: MurmurHash - what is it?