我刚发现杂音哈希,似乎是最快的已知和相当抗冲突。我试图在完整源代码中挖掘更多关于算法或实现的内容,但我很难理解它。有人可以在这里解释所使用的算法,或者在完整的源代码中实现它,最好是在C中。我从作者网站上读到了C源代码但是不知道,比如:什么是seed,h,k,m? 这是什么意思:
k *= m;
k ^= k >> r;
k *= m;
h *= m;
h ^= k;
data += 4;
len -= 4;
???
参考:http://murmurhash.googlepages.com/
对不起我的英语和我的愚蠢。 干杯
答案 0 :(得分:5)
Murmur 算法的最佳解释是Murmur Hash Wikipedia page:
Murmur3_32(key, len, seed) //Note: In this version, all integer arithmetic is performed //with unsigned 32 bit integers. In the case of overflow, //the result is constrained by the application //of modulo 232 arithmetic. c1 ← 0xcc9e2d51 c2 ← 0x1b873593 r1 ← 15 r2 ← 13 m ← 5 n ← 0xe6546b64 hash ← seed for each fourByteChunk of key k ← fourByteChunk k ← k × c1 k ← (k ROL r1) k ← k × c2 hash ← hash XOR k hash ← (hash ROL r2) hash ← hash × m + n with any remainingBytesInKey remainingBytes ← SwapEndianOrderOf(remainingBytesInKey) // Note: Endian swapping is only necessary on big-endian machines. remainingBytes ← remainingBytes × c1 remainingBytes ← (remainingBytes ROL r1) remainingBytes ← remainingBytes × c2 hash ← hash XOR remainingBytes hash ← hash XOR len hash ← hash XOR (hash SHR 16) hash ← hash × 0x85ebca6b hash ← hash XOR (hash SRH 13) hash ← hash × 0xc2b2ae35 hash ← hash XOR (hash SHR 16)
我自己的:
答案 1 :(得分:4)
代码可用 here 。 m和r是算法使用的常数。 k * = m表示取变量k并将其乘以m。 k ^ = k>> r表示取k并右移r位(例如,如果r是2 110101将变为001101),然后用k对其进行异或。
希望能让你完成剩下的工作。
此致