- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在查看 MurmurHash (sites.google.com/site/murmurhash/)我正在以一种黑盒子的方式使用它,而不是在这个阶段试图理解数学。
但是,我确实稍微看了一下代码并且担心它看起来是如何工作的......这是代码:
uint64_t MurmurHash64A ( const void * key, int len, unsigned int seed )
{
const uint64_t m = 0xc6a4a7935bd1e995;
const int r = 47;
uint64_t h = seed ^ (len * m);
const uint64_t * data = (const uint64_t *)key;
const uint64_t * end = data + (len/8);
while(data != end)
{
uint64_t k = *data++;
k *= m;
k ^= k >> r;
k *= m;
h ^= k;
h *= m;
}
const unsigned char * data2 = (const unsigned char*)data;
switch(len & 7)
{
case 7: h ^= uint64_t(data2[6]) << 48;
case 6: h ^= uint64_t(data2[5]) << 40;
case 5: h ^= uint64_t(data2[4]) << 32;
case 4: h ^= uint64_t(data2[3]) << 24;
case 3: h ^= uint64_t(data2[2]) << 16;
case 2: h ^= uint64_t(data2[1]) << 8;
case 1: h ^= uint64_t(data2[0]);
h *= m;
};
h ^= h >> r;
h *= m;
h ^= h >> r;
return h;
}
请注意,这是适用于 64 位机器的 64 位版本。我的问题是我不明白它是如何通过你发送的 key 的。例如,如果我向它发送一个指向字符串“ABC”的指针。我可以看到我会向它发送一个指向第一个字符“A”且长度为 3 的指针。
我有限的 C++ 知识告诉我,它创建了一个指向与传入指针相同位置的指针“数据”。但是然后在其中通过获取“数据”并将字符串的长度除以 8 添加到它来计算 key 的结尾。因此,如果 key 小于 8,则不会触发 while 循环,并且不会完成第一部分的数学运算。有谁知道为什么要除以 8?
是否因为第一个数学位只适用于 8 个字符及以上的键(如果是,为什么)?
提前致谢。C
最佳答案
算法一次处理8个字节传递过来的数据(uint64_t是8个字节)。第一个循环将组合所有 8 字节的集合以生成一个 8 字节的 key 。然后开关将使用剩余的字节(在您的示例中传递“ABC”的所有 3 个字节)并处理它以将它们考虑到最终结果中。
关于c++ - MurmurHash - 它如何遍历 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3979207/
我正在使用 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
我是一名优秀的程序员,十分优秀!