Murmurhash 2 Ergebnisse zu Python und Haskell

8
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123haskell ___ Haskell ist eine funktionale Programmiersprache mit starker statischer Typisierung, verzögerungsfreier Auswertung, umfangreicher Parallelitäts- und Parallelitätsunterstützung und einzigartigen Abstraktionsfunktionen. ___ qstnhdr ___ Murmurhash 2 Ergebnisse zu Python und Haskell ___ answer16363234 ___

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.

    
___ tag123hash ___ Eine Hash-Funktion ist eine wohldefinierte Prozedur oder mathematische Funktion, die eine große Datenmenge in ein kleines Datum umwandelt, normalerweise eine ganze Zahl. Bei Fragen zum Twitter- und Facebook-Symbol verwenden Sie den Hashtag. Verwenden Sie bei Fragen zu URLs und HTML-Ankern die Fragment-ID. Bei Fragen zu Rubys Hash-Typ verwenden Sie Ruby-Hash. ___ tag123mismatch ___ Die Nichtübereinstimmung bezieht sich auf einen Fehler bei der Übereinstimmung oder Übereinstimmung. Dies kann mehrdeutig sein. Mehr spezifische Tags wie [type-mismatch] oder [inputmismatchexception] sind möglicherweise besser geeignet. ___ tag123murmurhash ___ MurmurHash ist eine nicht-kryptografische Hash-Funktion, die für eine allgemeine Hash-basierte Suche geeignet ist. ___ answer16377266 ___

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.

    
___
Axel Advento 03.05.2013, 07:18
quelle

2 Antworten

3

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.

    
nominolo 04.05.2013, 17:51
quelle
5

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.

    
hammar 03.05.2013 16:07
quelle