2009-06-29 15 views
16

私はちょうど騒ぎハッシュを発見した、最も速く知られているとかなり衝突耐性があるようです。私は完全なソースコードでアルゴリズムや実装の詳細を掘り下げようとしましたが、理解が難しいです。誰かがここでアルゴリズムを説明したり、完全なソースコード、好ましくはCで実装することができましたか?私は著者のウェブサイトからCソースコードを読みましたが、種、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://ja.wikipedia.org/wiki/MurmurHash)の記事を見ましたか? –

答えて

4

コードは hereです。 mとrはアルゴリズムで使用される定数です。 k * = mは変数kをmで倍数にすることを意味します。 k^= k >> rはkを取ってr個のビットを右シフトすることを意味する(例えば、rが2の場合、110101は001101になる)。

残りの部分を十分に処理できることを望みます。

よろしく

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

関連する問題