Пожалуйста, объясните хеш-шепот?

Я только что узнал хрипот бормотания, кажется, самый быстрый и стойкий к столкновению. Я попытался больше вычислить алгоритм или реализацию в полном исходном коде, но мне трудно понять его. Может ли кто-нибудь здесь объяснить используемый алгоритм или реализовать его в полном исходном коде, желательно на C. Я читаю исходный код C с веб-сайта автора, но понятия не имею, например: что такое семя, h, k, m? что это означает:

k *= m; 
k ^= k >> r; 
k *= m; 

h *= m; 
h ^= k;

data += 4;
len -= 4;

???

Ссылка: http://murmurhash.googlepages.com/

Извините за мой английский и мою глупость. Приветствия

Ответы

Ответ 1

Код доступен здесь. m и r - константы, используемые алгоритмом. k * = m означает взять переменную k и умножить ее на m. k ^ = k → r означает, что взять k и правое смещение битов r (например, если r равно 2 110101, станет 001101), а затем XOR с k.

Надеюсь, что вам будет достаточно, чтобы работать с остальными.

Привет

Ответ 2

Лучшее объяснение алгоритма Murmur находится на странице Википедии Murmur Hash:

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)

И мой собственный:

введите описание изображения здесь