问题标签 [murmurhash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
445 浏览

java - Java,使 murmur2 散列在字节数组的一部分上工作

我在字节数组上使用 murmur2 散列,但我只想散列字节的子集,murmur2 只允许我从 0 开始散列数组,但我想指定非 0 开始偏移量以及结束偏移量大批。

我尝试了各种更改,但它总是导致我的哈希冲突测试从 0 变为非常高的数字。我不想使用 murmur3,因为它不适合像 murmur2 这样的单个小方法,在我的测试中,murmur2 也快一点。

这是我的碰撞测试仪,适用于任何想要破解它的人

注意:上面的碰撞测试需要一台 8GB 内存的电脑。

0 投票
2 回答
906 浏览

ruby - Ruby 内部结构以及如何保证唯一的哈希值

Ruby 中的哈希仅使用其哈希值(用于字符串和数字)。在内部,它使用Murmur 哈希函数。我想知道如果两个不同键具有相同哈希值的概率不为零,如何做到这一点

0 投票
0 回答
1136 浏览

hash - MurmurHash3的逆

我正在寻找一个MurmurHash3_x64_128的反函数,在这个 Java 版本中实现。请注意,不同之处在于初始化h1h2通过一些幻数对种子进行异或运算。此外,实际上我只对 33 - 64 位感兴趣(因为我试图找出32 -> 32 bits 的简化版本的逆。

我发现了不错的博文,遗憾的是,它使用了算法的不同变体。

根据 wiki,该算法在密码学上不是安全的,因此应该存在逆算法。

0 投票
3 回答
2461 浏览

c++ - C++ 我们应该在 MurmurHash3 参数中传递什么?

我对应该为 MurmurHash3_x86_128() 提供什么参数感到困惑。murmurhash3 代码可以在https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp找到。方法定义如下。

我在上述方法中传递了以下值,但我的编译器给了我分段错误。我究竟做错了什么 ?

0 投票
1 回答
1094 浏览

python - Python:缺少 Python.h 文件

我正在使用 Ubuntu 16.04。我正在尝试安装 Murmurhash python 库,但它抛出错误: command 'x86_64-linux-gnu-gcc' failed with exit status 1 。我在互联网上查看,据说这个错误是由于缺少 python 头文件造成的。所以我做了

但错误仍然存​​在。错误是因为我安装了 Anaconda 还是什么?有人可以帮助我如何纠正这个错误。错误如下:

0 投票
2 回答
1827 浏览

python - Scala MurmurHash3 库与 Python mmh3 库不匹配

我需要在 Python 和 Scala 中使用 MurmurHash 字符串。然而,他们给出了非常不同的结果。Scala 的内置MurmurHash3库似乎没有提供与我尝试过的任何其他库(包括在线库)相同的结果。奇怪的是它似乎匹配单个字符而不是多个字符。这里有些例子:

Python:

斯卡拉:

我已经尝试过使用有符号和无符号整数,因为我知道 Java 已经签名并且 python 正在包装的 C 实现正在使用无符号。但即使使用 NumPy 转换为带符号的 int 也无济于事。这个网站似乎同意python实现:

http://murmurhash.shorelabs.com/

关于这里可能发生什么的任何想法?

0 投票
2 回答
459 浏览

c++11 - C ++ MurmurHash3为不同的键返回相同的值

当我有很多键值时,我对如何调用 MurmurHash3_x86_128() 感到困惑。murmurhash3 代码可以在https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp找到。方法定义如下。

我使用 for 循环传递不同的键值,如下所示,但哈希值返回仍然相同。如果我要删除 for 循环并传递单个键值,那么值是不同的。我究竟做错了什么 ?

0 投票
1 回答
668 浏览

php - PHP Murmurhash3 和 MySql Murmurhash3 有时不匹配

我正在使用 Murmurhash3 为文本条目创建唯一的哈希值。创建文本条目时,我使用这个 php 实现,它返回一个 32 位散列整数,以获取散列值。哈希存储在 BINARY(16) 数据库列中。我还需要更新我们现有的数据库,所以我使用这个 MySql 实现来更新数据库。为了匹配 php 创建的哈希,我将其转换为基础并将其小写。

它大约 80% 的时间与 php 版本匹配,这显然不会削减它。例如,散列字符串 'engtest'15d15m在 php 和3uqiuqaMySql 中创建。但是,字符串 'engtest sentence' 在两者中创建了相同的哈希值。我可能做错了什么?

0 投票
2 回答
2879 浏览

javascript - Murmurhash3 的 Javascript 实现给出与 Python 的 sklearn 中可用的转换所使用的 Murmurhash3.cpp 相同的结果

(非常抱歉,我不允许添加许多 URL 来帮助我更好地解释我在这篇文章中的问题,因为我是 StackOverflow 的新手,而且我的 StackOverflow 帐户的权限非常低)。

概括

谁能指导我如何修改murmurhash3.js(下),使其产生与MurmurHash3.cpp(下)相同的哈希?我根据我的需要为 MurmurHash3.cpp 提供了一个简单的 python 代码“simple_python_wrapper.py”。如果您安装了 sklearn,simple_python_wrapper.py 应该可以在您的计算机上运行。

我在使用sklearn(一个 Python 机器学习库)时大量使用Murmurhash3.cpp(如下所示):在我的一个机器学习项目中。深入使用sklearn 的实现/导入树。transformfrom sklearn.feature_extraction._hashing import transformtransformMurmurhash3.cpp

更多细节

hash % (2^18) {即“哈希模数 2^18”} 基于 MurmurHash3.cpp

hash % (2^18) {即“哈希模数 2^18”} 基于 murmurhash3.js

murmurhash3.js

这是我用来测试 javascript 的 HTML 代码 + Javascript

https://jsbin.com/gicomikike/edit?html,js,输出

simple_python_wrapper.py

这利用了 sklearn 的导入树中的 MurmurHash3.cpp。

输出

MurmurHash3.cpp

让我再解释一下。

from sklearn.feature_extraction._hashing import transform 利用此代码,该代码利用此代码https://github.com/scikit-learn/scikit-learn/blob/412996f09b6756752dfd3736c306d46fca8f1aa1/sklearn/feature_extraction/_hashing.pyx ,而 from sklearn.utils.murmurhash cimport murmurhash3_bytes_s32 后者又利用 此代码,该代码https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/utils/murmurhash.pyx 基于此 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/utils/src/MurmurHash3。 cp所以,MurmurHash3.cpp 非常重要。我需要这个确切的 MurmurHash3.cpp 的 Javascript 版本,这样 Javascript 代码和 MurmurHash3.cpp 会产生相同的结果

我需要这个,因为我想让我的一些机器学习工具在线可用,并且需要在客户端的 Web 浏览器上完成散列。

到目前为止,我已经找到了一些 MurmurHash3 的 Javascript 实现。但是,murmurhash3.jshttps://github.com/whitequark/murmurhash3-js/blob/master/murmurhash3.js似乎(就代码结构而言)最接近 sklearn 使用的 MurmurHash3.cpp。但是我仍然没有从他们两个那里得到相同的哈希值。

谁能指导我如何修改murmurhash3.js(上),使其产生与MurmurHash3.cpp(上)相同的哈希?

0 投票
1 回答
244 浏览

hash - 从多部分主键生成 C* 桶哈希

我将拥有非常宽的 C* 表。为了防止它们变得太宽,我遇到了一个非常适合我的策略。它在此视频中进行了介绍。 明智地存储分区

这种策略的好处是不需要“查找表”(它很快),坏处是需要知道桶的最大数量并最终没有更多桶来使用(不可扩展)。我知道我的最大桶大小,所以我会试试这个。

通过从表的主键计算散列,这可以与其余的主键一起用作存储桶部分。

我想出了以下方法来确保(我认为?)哈希对于特定的主键总是相同的。

使用番石榴散列:

我使用 sha512 的原因是能够拥有最大字符数为 256(512 位)的字符串,否则结果将永远不会相同(根据我的测试似乎)。

我远不是哈希大师,因此我要问以下问题。

要求:在不同节点/机器上的不同 JVM 执行之间,对于给定的 Cassandra 主键,结果应该始终相同吗?

  1. 我可以依靠上述方法来完成这项工作吗?
  2. 有没有更好的散列大字符串的解决方案,所以它们总是会为给定的字符串产生相同的结果?
  3. 我是否总是需要从字符串中进行哈希处理,或者是否有更好的方法来为 C* 主键执行此操作并始终产生相同的结果?

拜托,我不想讨论特定表的数据建模,我只想有一个存储桶策略。

编辑:

进一步阐述并提出了这一点,因此字符串的长度可以是任意的。你对这个有什么看法?