Aus einer kurzen Inspektion der Quellen sieht es so aus, als würde der Algorithmus mit 32 Bits gleichzeitig arbeiten. Die Python-Version erhält diese, indem sie einfach 4 Bytes gleichzeitig aus der Eingabezeichenfolge aufnimmt, während die Haskell-Version jedes Zeichen in einen einzelnen 32-Bit-Unicode-Index konvertiert.
Es ist daher nicht verwunderlich, dass sie zu anderen Ergebnissen führen.
Das %code% Paket (ich bin der Autor) verspricht nicht, das zu berechnen dieselben Hashes wie andere Sprachen. Wenn Sie sich darauf verlassen, dass Hashes mit anderer Software, die Hashes berechnet, kompatibel sind, schlage ich vor, dass Sie %code% wrappers erstellen, die Hashes nach Ihren Wünschen berechnen. Insbesondere für Text müssen Sie mindestens die Kodierung angeben. In Ihrem Fall könnten Sie den Text mit %code% in eine ASCII-Zeichenkette umwandeln, die Ihnen jedoch immer noch nicht denselben Hashwert liefert, da die %code% -Instanz mehr Platzhalter ist.
Übrigens, ich verbessere dieses Paket nicht aktiv, weil MurmurHash2 durch MurmurHash3 ersetzt wurde, aber ich akzeptiere weiterhin Patches.
Das murmur-hash
Paket (ich bin der Autor) verspricht nicht, das zu berechnen dieselben Hashes wie andere Sprachen. Wenn Sie sich darauf verlassen, dass Hashes mit anderer Software, die Hashes berechnet, kompatibel sind, schlage ich vor, dass Sie newtype
wrappers erstellen, die Hashes nach Ihren Wünschen berechnen. Insbesondere für Text müssen Sie mindestens die Kodierung angeben. In Ihrem Fall könnten Sie den Text mit Data.ByteString.Char8.pack
in eine ASCII-Zeichenkette umwandeln, die Ihnen jedoch immer noch nicht denselben Hashwert liefert, da die ByteString
-Instanz mehr Platzhalter ist.
Übrigens, ich verbessere dieses Paket nicht aktiv, weil MurmurHash2 durch MurmurHash3 ersetzt wurde, aber ich akzeptiere weiterhin Patches.
Aus einer kurzen Inspektion der Quellen sieht es so aus, als würde der Algorithmus mit 32 Bits gleichzeitig arbeiten. Die Python-Version erhält diese, indem sie einfach 4 Bytes gleichzeitig aus der Eingabezeichenfolge aufnimmt, während die Haskell-Version jedes Zeichen in einen einzelnen 32-Bit-Unicode-Index konvertiert.
Es ist daher nicht verwunderlich, dass sie zu anderen Ergebnissen führen.
Tags und Links python haskell hash mismatch murmurhash