8

Haskell と Python は Murmurhash2 の結果に同意していないようです。Python、Java、および PHP は同じ結果を返しましたが、Haskell はそうではありません。Haskell の Murmurhash2 に関して何か間違ったことをしていますか?

Haskell Murmurhash2 のコードは次のとおりです。

import Data.Digest.Murmur32

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

そして、Python で書かれたコードは次のとおりです。

import murmur

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

Python は 3650852671 を返しましたが、Haskell は 3966683799 を返しました。

4

2 に答える 2

3

murmur-hashパッケージ (私はその作成者です) は、他の言語と同じハッシュを計算することを約束していません。ハッシュを計算する他のソフトウェアとの互換性を維持するためにハッシュに依存している場合はnewtype、希望どおりにハッシュを計算するラッパーを作成することをお勧めします。特にテキストの場合、少なくともエンコーディングを指定する必要があります。あなたの場合、 を使用してテキストを ASCII 文字列に変換できますが、インスタンスはプレースホルダーに近いData.ByteString.Char8.packため、それでも同じハッシュは得られません。ByteString

ところで、MurmurHash2 は MurmurHash3 に取って代わられたので、私はそのパッケージを積極的に改善していませんが、パッチは受け入れ続けています。

于 2013-05-04T17:51:48.047 に答える