2009-06-29 3 views
16

방금 ​​나는 중얼 ​​거림 해시를 발견했으며, 가장 빨리 알려졌으며 충돌 저항력이 강한 것으로 보입니다. 전체 소스 코드에서 알고리즘이나 구현에 대해 더 많은 것을 파헤려고했지만 이해하는데 어려움이 있습니다. 여기에 누군가 알고리즘을 설명했거나 전체 소스 코드에서 구현할 수 있습니다. 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/

죄송합니다. 건배

+7

당신이 위키 피 디아 봤어? http://en.wikipedia.org/wiki/MurmurHash – merkuro

+12

@merkuro [Wikipedia] (http://en.wikipedia.org/wiki/MurmurHash) 기사에서 * 보았습니까? –

답변

4

코드는 here입니다. m 및 r은 알고리즘에서 사용하는 상수입니다. k * = m은 변수 k를 취해 m으로 배수하는 것을 의미합니다. k^= k >> r은 k를 취하여 r 개의 비트를 오른쪽으로 시프트한다는 의미입니다 (예 : r이 2 인 경우 110101은 001101이됩니다). 그런 다음 k와 XOR합니다.

희망은 나머지 작업을 수행 할 수 있습니다.

감사

2

가 중얼 거림 알고리즘의 가장 좋은 설명은 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

+0

그건 코드예요. 사실, 꽤 읽을 수있는 의사 코드이지만, 여전히 "설명"을 이해하지 못합니다. 단계가 수행하는 것을 얻고, 여러 언어로 작성할 수 있지만 각 단계가 해시에 기여하는 것을 얻지는 않습니다. (나는이 해답이나 무엇이든 공격하지 않는 좋은 설명을 계속 찾고있다.) – Noein

+0

@Noein 방금 추가 한 예쁜 그림은 무엇인가? –

+1

글쎄, 그것은 내가 이해할 수 있습니다 ...하지만 아마도 나 자신보다 앞섰습니다; 다이어그램은 의사 코드보다 실제 구현을 보지 않고 버전을 작성하는 데 도움이되었습니다. 감사합니다;) – Noein

관련 문제