現在作成しているbloomfilterのプログラムでmurmurhash3を使用したいと考えているのですが、関数の引数のkey以外の意味が理解することが出来ず困っています。
Wikipediaやgithubなどで説明を探したのですが引数につい理解することができませんでした.
関数の引数がどういったもなのか教えてください。
また、murmurhashについての説明のある論文など教えていただけると幸いです。
以下が現在参考にしているプログラムになります.
uint32_t murmur3_32(const uint8_t* key, size_t len, uint32_t seed)
{
uint32_t h = seed;
uint32_t k;
/* Read in groups of 4. /
for (size_t i = len >>2; i; i--) {
// Here is a source of differing results across endiannesses.
// A swap here has no effects on hash properties though.
k = ((uint32_t)key);
key += sizeof(uint32_t);
h ^= murmur_32_scramble(k);
h = (h <<13) | (h >>19);
h = h * 5 + 0xe6546b64;
}
/ Read the rest. /
k = 0;
for (size_t i = len &3; i; i--) {
k <<= 8;
k |= key[i - 1];
}
// A swap is not necessary here because the preceeding loop already
// places the low bytes in the low places according to whatever endianness
// we use. Swaps only apply when the memory is copied in a chunk.
h ^= murmur_32_scramble(k);
/ Finalize. */
h ^= len;
h ^= h >>16;
h *= 0x85ebca6b;
h ^= h >>13;
h *= 0xc2b2ae35;
h ^= h >>16;
return h;
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/07 04:00