मेरे पास ऑब्जेक्ट का हैश उत्पन्न करने के लिए निम्न कोड था:क्या यह हैश फ़ंक्शन असामान्य रूप से अक्सर टकराएगा?
public int GetHashCode(MyType obj)
{
return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}
I.e. मैं सभी गुणों के हैश कोड जोड़ता हूं और फिर इसका हैश लेता हूं।
समीक्षा में, एक सहकर्मी ने सुझाव दिया कि यह बहुत बार टकराएगा। मुझे यकीन नहीं है कि यह सच है क्योंकि:
- यह देखते हुए कि हैश कोड सकारात्मक और नकारात्मक संख्याओं के बीच समान आवृत्ति के साथ चुने गए हैं और वे चारों ओर लपेटते हैं, मुझे नहीं लगता कि हमें संभावना के बारे में कोई अतिरिक्त जानकारी मिलती है संख्याओं के विपरीत इन संख्याओं के योग के रूप में
- इस सीमा तक कि उनकी राशि गैर-यादृच्छिक है, हैश कोड उन संख्याओं को बनाने के लिए डिज़ाइन किए गए हैं जो "एक साथ बंद" हो जाते हैं, "बहुत अलग" हो जाते हैं, इसलिए गैर-समान रूप से भोजन करना समारोह में वितरित मूल्य एक मुद्दा नहीं होना चाहिए
कौन सही है?
यह सी # में है, अगर उत्तर भाषा-विशिष्ट है।
अपने सहकर्मी के कारण क्या था उत्तर दिया गया है सकते हैं? –