首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Python和Haskell的Murmurhash 2结果

关于Python和Haskell的Murmurhash 2结果
EN

Stack Overflow用户
提问于 2013-05-03 15:18:17
回答 2查看 1.4K关注 0票数 8

Haskell和Python在Murmurhash2结果上似乎并不一致。Java和PHP返回了相同的结果,但是Haskell没有。关于Haskell上的Murmurhash2,我是不是做错了什么?

以下是我为Haskell Murmurhash2编写的代码:

代码语言:javascript
复制
import Data.Digest.Murmur32

    main = do
    print $ asWord32 $ hash32WithSeed 1 "woohoo"

下面是用Python编写的代码:

代码语言:javascript
复制
import murmur

if __name__ == "__main__":
    print murmur.string_hash("woohoo", 1)

Python返回3650852671,而Haskell返回3966683799

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-05 01:51:48

murmur-hash包(我是它的作者)并不保证像其他语言那样计算相同的哈希值。如果您依赖散列来与其他计算散列的软件兼容,我建议您创建newtype包装器,以您想要的方式计算散列。特别是对于文本,您至少需要指定编码。在本例中,您可以使用Data.ByteString.Char8.pack将文本转换为ASCII字符串,但由于ByteString实例更像是一个占位符,因此这仍然不会给出相同的哈希值。

顺便说一句,我并没有积极改进这个包,因为MurmurHash2已经被MurmurHash3取代了,但我一直在接受补丁。

票数 3
EN

Stack Overflow用户

发布于 2013-05-04 00:07:21

从对源代码的快速检查中可以看出,该算法一次操作32位。Python版本通过一次从输入字符串中获取4个字节来获取这些字符,而Haskell版本将每个字符转换为一个32位Unicode索引。

因此,它们产生不同的结果也就不足为奇了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16353659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档