मैं इस दिलचस्प विषय (आईएमओ) के बारे में बहुत कुछ पढ़ रहा हूं। लेकिन मैं पूरी तरह से एक बात समझ में नहीं आ रही है:शब्दकोश <,> आकार, GetHashCode और प्राइम नंबर?
शब्दकोश आकार अभाज्य संख्या की क्षमता (निकटतम अभाज्य संख्या को डबल्स) बढ़ती जा रही है (जब पुनः आबंटन): है क्योंकि:
int index = hashCode % [Dictionary Capacity];
- तो हम देख सकते हैं कि प्राइम संख्या
[Dictionary Capacity]
के लिए यहां उपयोग की जाती है क्योंकि उनके ग्रेटेस्ट कॉमोनफ़ैक्टर1
है। और यह टकराव से बचने के लिए में सहायता करता है।
इसके अलावा
मैं लागू करने के कई नमूने GetHashCode()
देखा है:
public override int GetHashCode()
{
unchecked
{
int hash = 17;
// Suitable nullity checks etc, of course :)
hash = hash * 23 + field1.GetHashCode();
hash = hash * 23 + field2.GetHashCode();
hash = hash * 23 + field3.GetHashCode();
return hash;
}
}
मुझे समझ नहीं आता:
यहाँ जॉन स्कीट से एक नमूना है:
क्वेस्टी getHashCode
की पीढ़ी में Dictionary capacity
और:
पर रूढ़ अंक में दोनों उपयोग किया जाता है करता है?
उपरोक्त कोड में, वहाँ एक अच्छा मौका है कि वापसी मान नहीं अभाज्य संख्या हो जाएगा क्योंकि [कृपया मुझे सही कर अगर मैं गलत हूँ]
- की वजह से गुणा द्वारा
23
- प्रत्येक क्षेत्र के लिए
GetHashCode()
मूल्य के अतिरिक्त।
उदाहरण के लिए: (11,17,173 अभाज्य संख्या हैं)
int hash = 17;
hash = hash * 23 + 11; //402
hash = hash * 23 + 17; //9263
hash = hash * 23 + 173 //213222
return hash;
213222 एक प्रमुख नहीं है।
इसके अलावा किसी भी गणित नियम नहीं है जो राज्य:
(not a prime number) + (prime number) = (prime number)
है और न ही
(not a prime number) * (prime number) = (prime number)
है और न ही
(not a prime number) * (not a prime number) = (prime number)
तो क्या मुझे याद आ रही है?
आपने यह GetHashCode कार्यान्वयन कहाँ देखा? – Tigran
@ टिग्रान http://stackoverflow.com/a/263416/859154 –
मैंने कभी भी कहीं भी नहीं पढ़ा है कि हैश कोड प्राइम होना चाहिए, या यहां तक कि अगर यह प्रमुख है तो यह बेहतर होगा - उन्हें क्या होना चाहिए जितना संभव हो उतना समान रूप से वितरित किया जाना चाहिए उनकी पूरी रेंज। – MiMo