मैं एक ऐसे सिस्टम पर काम कर रहा हूं जहां हैश टकराव एक समस्या होगी। अनिवार्य रूप से एक ऐसी प्रणाली है जो हैश-टेबल + वृक्ष संरचना में वस्तुओं का संदर्भ देती है। हालांकि सवाल में सिस्टम पहले टेक्स्ट-फाइलों को संकलित करता है जिसमें ढांचे में पथ शामिल होते हैं जिसमें बाइनरी फाइल होती है जिसमें इसके बजाय हैश वैल्यू होते हैं। यह प्रदर्शन कारणों से किया जाता है। हालांकि इस टकराव की वजह से बहुत खराब है क्योंकि संरचना एक ही हैश मान के साथ 2 आइटमों को स्टोर नहीं कर सकती है; किसी आइटम के लिए पूछने वाले भाग में यह जानने के लिए पर्याप्त जानकारी नहीं होगी कि उसे किसकी आवश्यकता है।क्या 32-बिट हैश बनाम दो 16 बिट हैंश के बीच टकराव दर अंतर है?
मेरा प्रारंभिक विचार यह है कि 2 हैश, या तो 2 अलग-अलग एल्गोरिदम का उपयोग करते हैं, या एक ही एल्गोरिदम दो बार, 2 लवण के साथ अधिक टकराव प्रतिरोधी होगा। विभिन्न हैशिंग एल्गोरिदम के लिए एक ही हैश वाले दो आइटम बहुत ही असंभव होंगे।
मैं अंतरिक्ष कारणों से हैश मान 32-बिट्स रखने की उम्मीद कर रहा था, इसलिए मैंने सोचा कि मैं 32-बिट एल्गोरिदम के बजाय दो 16-बिट एल्गोरिदम का उपयोग करने के लिए स्विच कर सकता हूं। लेकिन इससे संभावित हैश मूल्यों की सीमा में वृद्धि नहीं होगी ...
मुझे पता है कि दो 32-बिट हैंश पर स्विचिंग अधिक टक्कर प्रतिरोधी होगी, लेकिन मुझे आश्चर्य है कि अगर 2 16-बिट हैश पर स्विच करना कम से कम कुछ है एक 32-बिट हैश पर लाभ? मैं सबसे गणितीय इच्छुक व्यक्ति नहीं हूँ, इसलिए मैं भी कैसे सुचना यह बल के अलावा अन्य एक जवाब के लिए जाँच शुरू करने के लिए नहीं पता ...
सिस्टम पर कुछ पृष्ठभूमि:
द्वाराआइटम दिया जाता है नाम इंसान, वे यादृच्छिक तार नहीं हैं, और आम तौर पर शब्दों, अक्षरों और संख्याओं से बने होते हैं जिनमें कोई सफेद जगह नहीं होती है। यह एक नेस्टेड हैश संरचना है, इसलिए यदि आपके पास {a => {b => {c => 'blah'}}} जैसा कुछ था, तो आपको ए/बी/सी के मूल्य प्राप्त करके 'blah' मान प्राप्त होगा, संकलित अनुरोध तत्काल अनुक्रम में 3 हैश मान होंगे, ए, बी, और फिर सी के हैंश मान।
किसी दिए गए स्तर पर टकराव होने पर केवल एक समस्या है। शीर्ष स्तर और निचले स्तर पर किसी आइटम के बीच टक्कर ठीक है। आपके पास {a => {a => {...}}} हो सकता है, जो कि विभिन्न स्तरों पर टकराव की गारंटी देता है (कोई समस्या नहीं)।
अभ्यास में किसी भी दिए गए स्तर की संभावना हैश के लिए 100 से कम मूल्य होंगे, और कोई भी स्तर पर डुप्लीकेट नहीं होगा।
मैंने अपनाई हैशिंग एल्गोरिदम का परीक्षण करने के लिए (जिसे भूल गया, लेकिन मैंने इसका आविष्कार नहीं किया) मैंने सीपीएएन पर्ल मॉड्यूल की पूरी सूची डाउनलोड की, सभी नामस्थान/मॉड्यूल को अद्वितीय शब्दों में विभाजित किया, और आखिरकार टकराव की तलाश में प्रत्येक को धोया , मुझे 0 टकराव का सामना करना पड़ा। इसका मतलब है कि एपीगोरिदम के पास सीपीएएन नेमस्पेस सूची में प्रत्येक अद्वितीय शब्द के लिए एक अलग हैश मान है (या मैंने यह गलत किया है)। यह मेरे लिए काफी अच्छा लगता है, लेकिन यह अभी भी मेरे दिमाग में घबराहट है।
मैं 2 अलग नमक मूल्यों के साथ एक ही 16 बिट हैश एल्गोरिदम का उपयोग करने के बारे में थोड़ा चिंतित हूं; फिर हैश मानों को तत्काल सहसंबंधित किया जाता है। –
@IraBaxter मैंने नमक कहा, लेकिन मुझे लगता है कि मैं गलत था। मेरा मतलब है कि एक ही एल्गोरिदम का उपयोग करें, लेकिन दूसरी बार एक मान उपसर्ग करें। एल्गोरिदम प्रत्येक स्ट्रिंग को बदलते हुए स्ट्रिंग को फिसलता है और हर बार बदलता है जैसे कि "ab" और "ba" के अलग-अलग मान होंगे। और चूंकि मुझे दूसरे तारों के मूल्य को उपसर्ग करने के समान समान तारों (हैश का बिंदु) पर टक्कर के बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि दूसरे भाग में एक अलग हैश होने के बाद पहले ही चलाने के बाद 2 आइटमों के लिए पर्याप्त होना चाहिए । (फिर मैं फिर से पुष्टि करना चाहूंगा) – Exodist
@ आईआरए-बैक्सटर: यदि हैश एल्गोरिदम क्रिप्टोग्राफिक रूप से सुरक्षित है, तो ऐसा कोई सहसंबंध नहीं होना चाहिए। हालांकि यह एक ऐसा है जिसे अनदेखा नहीं किया जाना चाहिए। – btilly