मैं इस की तर्ज पर कुछ के साथ .net स्रोत कल से कुछ के माध्यम से देख रहा था और देखा GetHashcode के कई कार्यान्वयन:नेट GetHashcode बिट स्थानांतरण ऑपरेशन
(i1 << 5) + i^i2
मैं समझता हूँ कि क्या कोड कर रहे हैं और क्यों कर रहा है । मैं क्या जानना चाहता हूं कि उन्होंने क्यों उपयोग किया (i1 < < 5) + मैं इसके बजाय (i1 < < 5) - i।
अधिकांश ढांचे का उपयोग मैंने देखा है- क्योंकि यह 31 तक गुणा करने के बराबर है जो कि प्रमुख है, लेकिन माइक्रोसॉफ्ट तरीका 33 से गुणा करने के बराबर है जिसमें 11 और 3 कारक हैं और इस प्रकार यह प्रमुख नहीं है।
क्या इसके लिए कोई ज्ञात औचित्य है? कोई उचित परिकल्पना?
ठीक है, मुझे पता चला कि माइक्रोसॉफ्ट 33 का उपयोग क्यों करता है। इसे बर्नस्टीन हैश कहा जाता है। यह पता चला है कि 33 में कुछ जादुई गुण हैं जो हैश कोड का अच्छा वितरण करते हैं और क्यों बहुत कम सैद्धांतिक ज्ञान है। –