2009-06-29 14 views
16

मैंने अभी murmur हैश को पाया, सबसे तेज़ ज्ञात और काफी टकराव प्रतिरोधी प्रतीत होता है। मैंने पूर्ण स्रोत कोड में एल्गोरिदम या कार्यान्वयन के बारे में अधिक जानकारी देने की कोशिश की, लेकिन मुझे इसे समझने में कठिनाई हो रही है। क्या कोई यहां इस्तेमाल किए गए एल्गोरिदम को समझा सकता है, या इसे पूर्ण स्रोत कोड में कार्यान्वित कर सकता है, अधिमानतः सी में। मैं लेखक वेबसाइट से सी स्रोत कोड पढ़ता हूं लेकिन मुझे कोई जानकारी नहीं है, जैसे: बीज, एच, के, एम क्या है? इसका क्या मतलब है:कृपया murmur हैश समझाओ?

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 क्या आपने * [विकिपीडिया] (http://en.wikipedia.org/wiki/MurmurHash) लेख पर देखा है? –

उत्तर

4

कोड here उपलब्ध है। एम और आर एल्गोरिदम द्वारा उपयोग किए जाने वाले स्थिरांक हैं। के * = एम का अर्थ परिवर्तनीय के ले लो और एम द्वारा इसे एकाधिक। के^= के >> आर का मतलब है ले लेना और बिट्स आर स्थानों को सही स्थानांतरित करना (उदाहरण के लिए यदि आर 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

संबंधित मुद्दे