0

ここで提案されているような 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;
}
4

1 に答える 1

1

のタイプは表示されませんでしたdataが、その行は

unsigned int k = *(unsigned int *)data;

根本的に間違っているように見え、異なる値が表示される理由を説明できます。dataの幅が と異なる場合、unsigned intまたは位置合わせが異なる場合、 の一部のバイトは、kたまたま の上位ワードにあるガベージを受け取る可能性があります*data

于 2013-04-02T11:52:26.357 に答える