请解释杂音哈希?

时间:2009-06-29 07:44:09

标签: algorithm hashtable collision

我刚发现杂音哈希,似乎是最快的已知和相当抗冲突。我试图在完整源代码中挖掘更多关于算法或实现的内容,但我很难理解它。有人可以在这里解释所使用的算法,或者在完整的源代码中实现它,最好是在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/

对不起我的英语和我的愚蠢。 干杯

2 个答案:

答案 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)

我自己的:

enter image description here

答案 1 :(得分:4)

代码可用 here 。 m和r是算法使用的常数。 k * = m表示取变量k并将其乘以m。 k ^ = k>> r表示取k并右移r位(例如,如果r是2 110101将变为001101),然后用k对其进行异或。

希望能让你完成剩下的工作。

此致