- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我需要(但找不到)MurmurHash 的纯 python(无 c++)实现,我太新手了,不能自己写。速度或内存使用对我的项目来说并不重要。
我找到了一个尝试 here ,但它仅限于 31 位散列,我真的需要 64 位散列。
注意:对于那些需要快速实现的人,有一个 MurmurHash2 库 here和一个 MurmurHash3 库 here
最佳答案
这是未经测试的(对不起!),但这是我想出的一个版本。Python 允许使用任意大的整数,因此我为前 8 个字节(或 64 位)创建了一个掩码,然后我将其(通过按位与)应用于所有可能产生大于 64 位整数的算术结果。也许其他人可以评论一般方法和可能的字节序问题等。
def bytes_to_long(bytes):
assert len(bytes) == 8
return sum((b << (k * 8) for k, b in enumerate(bytes)))
def murmur(data, seed):
m = 0xc6a4a7935bd1e995
r = 47
MASK = 2 ** 64 - 1
data_as_bytes = bytearray(data)
h = seed ^ ((m * len(data_as_bytes)) & MASK)
for ll in range(0, len(data_as_bytes), 8):
k = bytes_to_long(data_as_bytes[ll:ll + 8])
k = (k * m) & MASK
k = k ^ ((k >> r) & MASK)
k = (k * m) & MASK
h = (h ^ k)
h = (h * m) & MASK
l = len(data_as_bytes) & 7
if l >= 7:
h = (h ^ (data_as_bytes[6] << 48))
if l >= 6:
h = (h ^ (data_as_bytes[5] << 40))
if l >= 5:
h = (h ^ (data_as_bytes[4] << 32))
if l >= 4:
h = (h ^ (data_as_bytes[3] << 24))
if l >= 3:
h = (h ^ (data_as_bytes[4] << 16))
if l >= 2:
h = (h ^ (data_as_bytes[4] << 8))
if l >= 1:
h = (h ^ data_as_bytes[4])
h = (h * m) & MASK
h = h ^ ((h >> r) & MASK)
h = (h * m) & MASK
h = h ^ ((h >> r) & MASK)
return h
关于python - MurmurHash 有纯 python 实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305290/
我正在使用 C/C++ 中的 murmurhash 函数,就像这里建议的那样:https://sites.google.com/site/murmurhash/ (MurmurHash2.cpp)。我
我用 Murmur hash 对 800 000 个字符串值进行哈希处理,这导致了很多冲突(冲突),大约有 17 个冲突(不同的字符串给出相同的哈希值),这是否正常,任何人都知道 murmur has
我一直在努力深入了解 MurmurHash 是什么做。 我已经阅读了基本说明,但还没有找到关于何时使用它以及为什么使用它的良好解释。我知道它非常快,但想了解更多。 我问了一个相关的question关于
我正在查看 MurmurHash (sites.google.com/site/murmurhash/)我正在以一种黑盒子的方式使用它,而不是在这个阶段试图理解数学。 但是,我确实稍微看了一下代码并且
在 Scala 2.10 中,MurmurHash 由于某种原因已被弃用,说我现在应该使用 MurmurHash3。但 API 不同,MurmurHash3 没有有用的 scaladocs -> 失败
我正在用 C 语言实现散列表和散列函数,听说 Murmurhash 是适合此目的的快速算法。为此提供的查找一些 C 代码: uint32_t murmur3_32(const char *key, u
我需要(但找不到)MurmurHash 的纯 python(无 c++)实现,我太新手了,不能自己写。速度或内存使用对我的项目来说并不重要。 我找到了一个尝试 here ,但它仅限于 31 位散列,我
我需要使用 murmurhash 对 NSString 进行哈希处理我被迫这样做,因为其他团队正在这样做,我需要在 x86 平台上使用 64 位 key 长度,有人在 objective-C 中实现或
我正在使用 SBT 0.13.2(也可以是 0.13.5),并且正在尝试为 2.10 编写一个项目并将其交叉编译为 2.9 和 2.10。它使用 scala.util.hashing.MurmurHa
编辑:请参阅评论以获取正确答案。 大家好,我在安装 NLP 程序 SpaCY 时遇到了一个问题。 我尝试了 pip install -U spacy 和 pip install spacy,但我似乎遇
我正在尝试使用 MurmurHash(在 64 位计算机上返回 64 位哈希值)并已将简单的 3 个字母字符串“yes”发送给它,如下所示 char* charptr = "yes"; cout *
Haskell 和 Python 似乎不同意 Murmurhash2 结果。 Python、Java 和 PHP 返回相同的结果,但 Haskell 没有。关于 Haskell 上的 Murmurha
我正在编写一个 BloomFilter 并想使用 Scala 的默认 MurmurHash3 实现:scala.util.MurmurHash3。我的编译失败,但是出现以下编译错误: [error]
查看使用接受字符串并返回 64 位带符号整数值的哈希算法。 它不必在密码学上是可靠的,只要提供一个合适的冲突率就可以用作分布式存储的 key 。 我在看 murmur hash that seems
我是一名优秀的程序员,十分优秀!