हैशिंग फ़ंक्शन में एक मॉड के रूप में प्राइम नंबर का उपयोग करना सबसे अच्छा क्यों है?


57

अगर मेरे पास १ से १०० तक के प्रमुख मूल्यों की सूची है और मैं उन्हें ११ बाल्टियों की एक श्रेणी में व्यवस्थित करना चाहता हूं, तो मुझे एक मॉड फंक्शन बनाना सिखाया जाता है।

H=kmod 11

अब सभी मानों को 9 पंक्तियों में एक के बाद एक रखा जाएगा। उदाहरण के लिए, पहली बाल्टी में । दूसरे में आदि होंगे।0,11,221,12,23

मान लीजिए कि मैंने एक बुरा लड़का बनने का फैसला किया और अपने हैशिंग फ़ंक्शन के रूप में एक गैर-प्राइम का उपयोग किया - 12. 12. हाशिंग फ़ंक्शन का उपयोग करना

H=kmod 12

साथ एक बाल्टी तालिका में परिणाम होगा पहली बाल्टी में, आदि।0,12,241,13,25

मूलतः वे एक ही चीज हैं। मैंने टकरावों को कम नहीं किया और मैंने प्राइम नंबर हैश कोड का उपयोग करके चीजों को बेहतर तरीके से नहीं फैलाया और मैं यह नहीं देख सकता कि यह कैसे फायदेमंद है।


प्रासंगिक सवाल है, कारण है कि हम में हैश समारोह XOR का उपयोग stackoverflow.com/questions/5889238/...
शुवा

जवाबों:


62

कुंजियों के सेट पर विचार करें और एक हैश तालिका जहाँ बाल्टियों की संख्या । के बाद से का एक कारक है , कुंजी है कि के गुणज हैं बाल्टी कि के गुणज हैं करने के लिए टुकड़ों में बांटा की जाएगी :K={0,1,...,100}m=1231233

  • कुंजी को बकेट लिए किया जाएगा ।{0,12,24,36,...}0
  • कुंजी बाल्टी किया जाएगा ।{3,15,27,39,...}3
  • कुंजी को बाल्टी करने के लिए किया जाएगा ।{6,18,30,42,...}6
  • कीज़ को बाल्टी करने के लिए किया जाएगा ।{9,21,33,45,...}9

यदि को समान रूप से वितरित किया जाता है (अर्थात, प्रत्येक कुंजी समान रूप से होने की संभावना है), तो का चुनाव इतना महत्वपूर्ण नहीं है। लेकिन, यदि को समान रूप से वितरित नहीं किया जाता है, तो क्या होता है? कल्पना कीजिए कि जिन कुंजियों की सबसे अधिक संभावना है, वे के गुणक हैं । इस स्थिति में, सभी बकेट जो गुणक नहीं हैं, उच्च संभावना के साथ खाली होंगे (जो हैश टेबल प्रदर्शन के मामले में वास्तव में खराब है)।KKmK33

यह स्थिति अधिक सामान्य है कि ऐसा लग सकता है। उदाहरण के लिए, कल्पना कीजिए कि आप उन वस्तुओं पर नज़र रख रहे हैं, जहाँ वे स्मृति में संग्रहीत हैं। यदि आपके कंप्यूटर का शब्द आकार चार बाइट्स है, तो आपके पास हैशिंग कुंजी होगी जो गुणक हैं । यह कहने की ज़रूरत नहीं है कि को से चुनने के लिए एक भयानक विकल्प होगा: आपके पास बाल्टी पूरी तरह से खाली होगी, और आपकी सभी चाबियां शेष बाल्टी में टकराएंगी।4m43m/4m/4

सामान्य रूप में:

प्रत्येक कुंजी जो बकेट की संख्या के साथ एक सामान्य कारक साझा करती है उसे बकेट में हैश किया जाएगा जो इस कारक का एक गुणक है।Km

इसलिए, टकराव कम करने के लिए, यह महत्वपूर्ण के बीच आम कारण की संख्या को कम करने के लिए है और के तत्वों । यह कैसे हासिल किया जा सकता है? एक ऐसी संख्या होने के लिए का चयन करें जिसके बहुत कम कारक हैं: एक अभाज्य संख्याmKm


मैंने अभी देखा कि मेरी क्वेरी आपके उत्तर के साथ संरेखण में है। क्या आपको लगता है कि मेरी क्वेरी में हैश फ़ंक्शन अच्छा है?
ओवरएक्सचेंज

@overexchange: मैंने आपके प्रश्न का उत्तर दियायह उत्तर आपके लिए रुचि का भी हो सकता है।
मारियो सेरवेरा

ऐसा क्यों होता है, यदि K तिरछा हो तो केवल m का चुनाव मायने रखता है? क्या यह सही नहीं है कि K के समान रूप से वितरित होने पर भी हम खराब मी के साथ खराब प्रदर्शन करेंगे?
vorou

यह इस बात पर निर्भर करता है कि आप "खराब " से क्या मतलब है । यदि आपका मतलब "हैश टेबल में तत्वों की संख्या की तुलना में छोटा है" (यानी, उच्च लोड कारक ), तो, प्रदर्शन खराब होगा। हालांकि, यदि आप "अभाज्य नहीं" का अर्थ करते हैं, तो यह तथ्य इतना महत्वपूर्ण नहीं है यदि सभी कुंजियाँ समान रूप से होने की संभावना है क्योंकि उन्हें हैश तालिका में समान रूप से वितरित किया जाएगा। प्रश्न स्वयं एक उदाहरण प्रदान करता है। m
मारियो सेरवेरा

16

क्या टकराव की संभावना कम है primes का उपयोग करना आपकी चाबियों के वितरण पर निर्भर करता है।

यदि आपकी कई कुंजियों में और आपका हैश फंक्शन , तो ये चाबियां बाल्टी के छोटे से उपसमूह में जाती हैं, यदि विभाजित करता है । इसलिए आपको ऐसे की संख्या कम से कम करनी चाहिए , जिसे प्राइम चुनकर हासिल किया जा सकता है।a+kbH(n)=nmodmbnb

यदि दूसरी ओर आप से बाल्टियाँ रखना पसंद करते हैं और आप जानते हैं कि गुणकों में भिन्नताएँ उन भिन्नताओं की तुलना में अधिक होती हैं जो और गुणक हैं , तो आप अपने बहुत ही विशेष अनुप्रयोग के लिए चुन सकते हैं ।1112112312


1
लेकिन अगर मेरी चाबियों का फॉर्म नहीं है तो कोई फर्क नहीं पड़ता? क्या वह सही है? a+k×bm
कोडीबगस्टीन

1
@ लिमरे, यदि आपकी कुंजियाँ समान रूप से वितरित हैं, तो कोई मायने नहीं रखता। यदि वे नहीं हैं, तो यह से पदार्थ के लिए सटीक वितरण पर निर्भर करेगा या नहीं। mm
एपीग्रामग्राम

बस पिछले संपादन को वापस कर दिया, मैं भूल गया कि । 12>11
frafl

3
क्या आपका मतलब यह था कि "बाल्टी के एक छोटे से उपसमूह पर जाएँ, यदि विभाजित करता है "? bm
मिखाइल डबोव

8

क्या इसका प्रभाव पड़ता है (यह भी) इस बात पर निर्भर करता है कि आप टकरावों का इलाज कैसे करते हैं। ओपन हैशिंग के कुछ वेरिएंट का उपयोग करते समय, प्राइम्स गारंटी का उपयोग करके खाली स्लॉट पाए जाते हैं जब तक कि टेबल पर्याप्त रूप से खाली न हो जाए।

उदाहरण के लिए, निम्नलिखित दिखाने की कोशिश करें:

मान लें कि हम एक तत्व को संबोधित करने के हैश कि सम्मिलित करना चाहते हैं और पदों की कोशिश कर रहा द्वारा टक्कर हल के लिए बाद में ।aa+i2i=1,2,

दिखाएँ कि यह प्रक्रिया हमेशा एक खाली स्थिति पैदा करती है यदि हैश तालिका आकार , से बड़ा अभाज्य है , और सभी पदों में से कम से कम आधे खाली हैं।pp3

संकेत: इस तथ्य का उपयोग करें कि अवशेष वर्ग वलय modulo एक फ़ील्ड है यदि अभाज्य है और इसलिए में अधिकांश समाधान हैं।ppi2=c2


2

अपने हैश फंक्शन फॉर्म की है जहां प्रधानमंत्री है और यादृच्छिक, तो संभावना में चुना जाता है वह यह है कि एक ही बाल्टी को हैश 2 अलग चाबियाँ । तो , जो बहुत छोटा है।h(k)=a×kmodmma1mm=1009Pr{h(x)=h(y),xy}=0.00099108027

इस योजना को यूनिवर्सल हैशिंग के रूप में जाना जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.