我刚发现杂音杂音,似乎是最快的已知和相当抗碰撞。我试图在完整的源代码中挖掘更多关于算法或实现的信息,但是我很难理解它。这里有人能解释一下使用的算法吗,或者用完整的源代码实现它,最好是用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/
对不起我的英语和我的愚蠢。
干杯
最佳答案
杂音算法的最佳解释是在Murmur Hash Wikipedia page上:
杂音3_32(基音,len,seed)
//注意:在这个版本中,执行所有整数运算
//使用无符号32位整数。如果溢出,
//结果受应用程序约束
/模232算术的。
C1☆0xCC9E2D51
C2☆0x1B873593
r1☆15
r2☆13
m☆5
N☆0xE6546B64
散列☆种子
对于每四个密钥
K☆福比泰克
K☆K×C1
K☆(K rol r1)
K☆K×C2
散列☆散列异或k
散列☆(散列rol r2)
散列☆散列×m+n
有任何剩余的
剩余字节☆swapendianorderof(剩余字节)
//注意:endian交换仅在big endian机器上是必要的。
剩余字节☆剩余字节×C1
剩余字节☆(剩余字节rol r1)
剩余字节☆剩余字节×C2
散列☆散列异或剩余字节
散列☆散列异或长度
散列☆散列异或(散列SHR 16)
散列☆散列×0x85ebca6b
散列☆散列异或(散列srh 13)
散列☆散列×0xc2b2ae35
散列☆散列异或(散列SHR 16)
还有我自己的: