问题标签 [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.
java - Java,使 murmur2 散列在字节数组的一部分上工作
我在字节数组上使用 murmur2 散列,但我只想散列字节的子集,murmur2 只允许我从 0 开始散列数组,但我想指定非 0 开始偏移量以及结束偏移量大批。
我尝试了各种更改,但它总是导致我的哈希冲突测试从 0 变为非常高的数字。我不想使用 murmur3,因为它不适合像 murmur2 这样的单个小方法,在我的测试中,murmur2 也快一点。
这是我的碰撞测试仪,适用于任何想要破解它的人
注意:上面的碰撞测试需要一台 8GB 内存的电脑。
ruby - Ruby 内部结构以及如何保证唯一的哈希值
Ruby 中的哈希仅使用其哈希值(用于字符串和数字)。在内部,它使用Murmur 哈希函数。我想知道如果两个不同键具有相同哈希值的概率不为零,如何做到这一点。
hash - MurmurHash3的逆
我正在寻找一个MurmurHash3_x64_128的反函数,在这个 Java 版本中实现。请注意,不同之处在于初始化h1
和h2
通过一些幻数对种子进行异或运算。此外,实际上我只对 33 - 64 位感兴趣(因为我试图找出32 -> 32 bits 的简化版本的逆。
我发现了不错的博文,遗憾的是,它使用了算法的不同变体。
根据 wiki,该算法在密码学上不是安全的,因此应该存在逆算法。
c++ - C++ 我们应该在 MurmurHash3 参数中传递什么?
我对应该为 MurmurHash3_x86_128() 提供什么参数感到困惑。murmurhash3 代码可以在https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp找到。方法定义如下。
我在上述方法中传递了以下值,但我的编译器给了我分段错误。我究竟做错了什么 ?
python - Python:缺少 Python.h 文件
我正在使用 Ubuntu 16.04。我正在尝试安装 Murmurhash python 库,但它抛出错误: command 'x86_64-linux-gnu-gcc' failed with exit status 1 。我在互联网上查看,据说这个错误是由于缺少 python 头文件造成的。所以我做了
但错误仍然存在。错误是因为我安装了 Anaconda 还是什么?有人可以帮助我如何纠正这个错误。错误如下:
python - Scala MurmurHash3 库与 Python mmh3 库不匹配
我需要在 Python 和 Scala 中使用 MurmurHash 字符串。然而,他们给出了非常不同的结果。Scala 的内置MurmurHash3
库似乎没有提供与我尝试过的任何其他库(包括在线库)相同的结果。奇怪的是它似乎匹配单个字符而不是多个字符。这里有些例子:
Python:
斯卡拉:
我已经尝试过使用有符号和无符号整数,因为我知道 Java 已经签名并且 python 正在包装的 C 实现正在使用无符号。但即使使用 NumPy 转换为带符号的 int 也无济于事。这个网站似乎同意python实现:
http://murmurhash.shorelabs.com/
关于这里可能发生什么的任何想法?
c++11 - C ++ MurmurHash3为不同的键返回相同的值
当我有很多键值时,我对如何调用 MurmurHash3_x86_128() 感到困惑。murmurhash3 代码可以在https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp找到。方法定义如下。
我使用 for 循环传递不同的键值,如下所示,但哈希值返回仍然相同。如果我要删除 for 循环并传递单个键值,那么值是不同的。我究竟做错了什么 ?
php - PHP Murmurhash3 和 MySql Murmurhash3 有时不匹配
我正在使用 Murmurhash3 为文本条目创建唯一的哈希值。创建文本条目时,我使用这个 php 实现,它返回一个 32 位散列整数,以获取散列值。哈希存储在 BINARY(16) 数据库列中。我还需要更新我们现有的数据库,所以我使用这个 MySql 实现来更新数据库。为了匹配 php 创建的哈希,我将其转换为基础并将其小写。
它大约 80% 的时间与 php 版本匹配,这显然不会削减它。例如,散列字符串 'engtest'15d15m
在 php 和3uqiuqa
MySql 中创建。但是,字符串 'engtest sentence' 在两者中创建了相同的哈希值。我可能做错了什么?
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 的实现/导入树。transform
from sklearn.feature_extraction._hashing import transform
transform
Murmurhash3.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
(上)相同的哈希?
hash - 从多部分主键生成 C* 桶哈希
我将拥有非常宽的 C* 表。为了防止它们变得太宽,我遇到了一个非常适合我的策略。它在此视频中进行了介绍。 明智地存储分区
这种策略的好处是不需要“查找表”(它很快),坏处是需要知道桶的最大数量并最终没有更多桶来使用(不可扩展)。我知道我的最大桶大小,所以我会试试这个。
通过从表的主键计算散列,这可以与其余的主键一起用作存储桶部分。
我想出了以下方法来确保(我认为?)哈希对于特定的主键总是相同的。
使用番石榴散列:
我使用 sha512 的原因是能够拥有最大字符数为 256(512 位)的字符串,否则结果将永远不会相同(根据我的测试似乎)。
我远不是哈希大师,因此我要问以下问题。
要求:在不同节点/机器上的不同 JVM 执行之间,对于给定的 Cassandra 主键,结果应该始终相同吗?
- 我可以依靠上述方法来完成这项工作吗?
- 有没有更好的散列大字符串的解决方案,所以它们总是会为给定的字符串产生相同的结果?
- 我是否总是需要从字符串中进行哈希处理,或者是否有更好的方法来为 C* 主键执行此操作并始终产生相同的结果?
拜托,我不想讨论特定表的数据建模,我只想有一个存储桶策略。
编辑:
进一步阐述并提出了这一点,因此字符串的长度可以是任意的。你对这个有什么看法?