当前位置: 首页 > 面试题库 >

MurmurHash-什么?

林玮
2023-03-14
问题内容

我一直在试图对MurmurHash的功能有一个较高的了解。

我已经阅读了基本说明,但尚未找到何时使用它以及为什么使用的很好解释。我知道它很快,但是想知道更多。

我问了一个有关如何将UUID放入Redis位集中的相关问题,有人建议使用MurmurHash。它可以工作,但是我想了解风险/好处。


问题答案:

Murmur是一系列良好的通用哈希函数,适用于非加密用途。如Austin Appleby所述,MurmurHash具有以下优点:

  • 简单(就生成的汇编指令而言)。
  • 良好的分布(通过几乎所有键集和存储桶大小的卡方检验。
  • 良好的雪崩行为(最大偏差为0.5%)。
  • 良好的抗碰撞能力(通过了鲍勃·詹金的frog.c酷刑测试。4字节密钥不可能发生冲突,差异不大(1至7位)。
  • 在Intel / AMD硬件上具有出色的性能,在哈希质量和CPU消耗之间进行了很好的权衡。

您当然可以使用它来对UUID进行哈希处理(就像其他任何高级哈希函数一样:CityHash,Jenkins,Paul
Hsieh的等等)。现在,Redis位集限制为4 GB位(512
MB)。因此,您需要将128位数据(UUID)减少到32位(哈希值)。无论哈希函数的质量如何,都将发生冲突。

使用像Murmur这样的工程哈希函数可以最大程度地提高分发质量,并最大程度减少冲突次数,但是它没有其他保证。

以下是一些比较通用哈希函数质量的链接:

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/



 类似资料:
  • MurmurHash 是一个快速可靠的生成各种哈希数据的函数,支持 32位到128位的哈希值。

  • 问题内容: 什么是selenium? 当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“selenium的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。由此,我推断出Selenium是一组工具,并且该集合包括IDE,WebDriver

  • 我创建了一个类(正如书中所说)来保存从键盘输入的一个人的姓名和姓氏,然后还有另一个类,它将一个人的国家代码、区号和号码封装为字符串 Person将用作Hashmap中的键 Class封装了和。许多对象组成了一个表示电话簿的HashMap。 实现了

  • 我一直在努力学习什么是EJB bean,这意味着他们的实例在池中被管理,等等。真的不能很好地掌握它们。 你能给我解释一下它们到底是什么吗(实际上对于一个Java程序员来说)?他们是做什么的?他们的目的是什么?为什么要真正使用它们?(为什么不坚持?)也许是一个示例应用程序? 请仅参考更新的信息,即。关于EJB的过时信息可能具有误导性。 对于EJB学习初学者,请注意: EJB基于分布式对象,这是指运行

  • 硒是什么? 当你打开Selenium的官方页面,首先看到的是“什么是Selenium”中的“Selenium自动浏览器”。节。“硒的哪一部分对我合适?”下面提供了Selenium WebDriver和Selenium IDE之间的选择。由此,我推断Selenium是一个工具集合,该集合包括IDE、WebDriver API(语言绑定)、网格、Selenium独立服务器、浏览器驱动程序。一个人必须下

  • 问题内容: 我是一名即将毕业的计算机科学专业的学生,​​在我的整个编码生涯中,我发现很少使用枚举的实例,除了典型的情况(例如代表标准纸牌的面孔)外,还使用了枚举。 您是否知道在日常编码中使用枚举的任何巧妙方法? 为什么枚举如此重要,在什么情况下应该能够确定建立枚举是最佳方法? 问题答案: 这些是主要的论点,以及短的例子。 的情况 从Java 6开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除