ここで提案されているような C/C++ でマーマーハッシュ関数を使用しています: https://sites.google.com/site/murmurhash/ (MurmurHash2.cpp)。このメソッドを異なるキーで複数回呼び出しています。ただし、動作は決定論的ではありません。同じキーに対して、異なる結果が得られることがあります (同じキー、同じ長さ、同じシード、異なる戻り値)。私はそれをデバッグし、次の行との違いがあるようです:
line 33: unsigned int k = *(unsigned int *)data;
その行の後には、メソッドの同じ入力に対して異なる k 値があり、返される最終的な h も異なります。
私は何かを誤解しましたか?この動作を引き起こす問題は何ですか? 前もって感謝します!
呼び出しに関する詳細:
呼び出しは Lua コードから行われ、Lua コードは次のシグネチャを持つ C 関数を呼び出します。
int preparehash(lua_State *L)
次に、この関数は Lua スタックからパラメーターを読み取り、MurmurHash2 を使用する次の関数を呼び出します。
unsigned int hashing(const char *a, unsigned int seed) {
int len = (int)sizeof(a);
unsigned int b = MurmurHash2(a,len,seed);
return b;
}