यूनिवर्सल हैशिंग
गणित और कंप्यूटिंग में, यूनिवर्सल हैशिंग (यादृच्छिक एल्गोरिथ्म या डेटा संरचना में) निश्चित गणितीय गुण के साथ हैश फ़ंक्शन के समूह से यादृच्छिक रूप से हैश फ़ंक्शन का चयन करने को संदर्भित करता है (नीचे परिभाषा देखें)। यह प्रत्याशित रूप से कम संख्या में संघटन की गारंटी देता है, भले ही डेटा किसी प्रतिद्वंद्वी द्वारा चुना गया हो। कई यूनिवर्सल समूह (हैशिंग पूर्णांक, वैक्टर, स्ट्रिंग्स के लिए) ज्ञात हैं, और उनका मूल्यांकन प्रायः बहुत कुशल होता है। कंप्यूटर विज्ञान में यूनिवर्सल हैशिंग के कई उपयोग हैं, उदाहरण के लिए हैश टेबल, यादृच्छिक एल्गोरिदम और क्रिप्टोग्राफी के कार्यान्वयन में।
परिचय
माना कि हम कुछ यूनिवर्स से कीज़ को बिन्स (लेबल ) में मैप करना चाहते हैं। एल्गोरिदम को कीज़ के कुछ डेटा सेट को संभालना होगा, जो पहले से ज्ञात नहीं है। प्रायः, हैशिंग का लक्ष्य कम संख्या में संघटनों ( से कीज़ जो एक ही बिन में आती है) को प्राप्त करना है। नियतात्मक हैश फ़ंक्शन प्रतिकूल सेटिंग में कोई गारंटी नहीं दे सकता है यदि , क्योंकि प्रतिद्वंद्वी को बिन की पूर्वचित्र के रूप में चुन सकता है। इसका अर्थ यह है कि सभी डेटा कीज़ एक ही बिन में आ जाती हैं, जिससे हैशिंग अनुपयोगी हो जाती है। इसके अलावा, नियतात्मक हैश फ़ंक्शन रीहैशिंग की अनुमति नहीं देता है- कभी-कभी इनपुट डेटा हैश फ़ंक्शन (उदाहरण के लिए बहुत अधिक संघटन होते हैं) के लिए व्यर्थ हो जाता है, इसलिए कोई हैश फ़ंक्शन को बदलना चाहेगा।
इन समस्याओं का समाधान हैश फ़ंक्शंस के समूह से किसी फ़ंक्शन को यादृच्छिक रूप से चुनना है। फ़ंक्शंस के समूह को यूनिवर्सल समूह कहा जाता है यदि, ।
दूसरे शब्दों में, जब हैश फ़ंक्शन को से यादृच्छिक रूप से समान रूप से खींचा जाता है, तो यूनिवर्स की कोई भी दो अलग-अलग कीज़ अधिकतम की संभावना के साथ टकराती हैं। यदि हैश फ़ंक्शन प्रत्येक कीज़ को वास्तव में यादृच्छिक हैश कोड निर्दिष्ट करता है तो हम टकराव की बिल्कुल यही संभावना की अपेक्षा करेंगे।
कभी-कभी, परिभाषा को स्थिर कारक द्वारा शिथिल कर दिया जाता है, जिसके लिए केवल संघटन की संभावना की आवश्यकता होती है न कि की। यह अवधारणा 1977 में कार्टर और वेगमैन[1] द्वारा प्रस्तुत की गई थी, और कंप्यूटर विज्ञान में इसके कई अनुप्रयोग पाए गए हैं (उदाहरण के लिए देखें[2])।
यदि संघटन की संभावना पर हमारी ऊपरी सीमा है, तो हम कहते हैं कि हमारे पास -लगभग सार्वभौमिकता है। इसलिए उदाहरण के लिए, यूनिवर्सल समूह में -लगभग सार्वभौमिकता होती है।
कई, लेकिन सभी नहीं, यूनिवर्सल समूह में निम्नलिखित दृढ़ एकसमान असमानता गुण होते हैं-
, जब को समूह से यादृच्छिक रूप से निकाला जाता है, तो अंतर समान रूप से में वितरित होता है।
ध्यान दें कि सार्वभौमिकता की परिभाषा केवल इस बात से संबंधित है कि क्या , जो संघटनों की गणना करता है। एकसमान असमानता गुण अधिक दृढ़ होता है।
(इसी प्रकार, यूनिवर्सल समूह XOR यूनिवर्सल हो सकता है यदि , मान को में समान रूप से वितरित किया जाता है जहां बिटवाइज़ विशिष्ट या ऑपरेशन है। यह केवल तभी संभव है जब दो की घात हो।)
एक और भी दृढ़ स्थिति युग्मानूसार स्वतंत्रता है- हमारे पास यह गुण है जब हमारे पास संभावना है कि हैश मानों के किसी भी युग्म के लिए हैश होगा जैसे कि वे पूरी तरह से यादृच्छिक थे- । युग्मानूसार स्वतंत्रता को कभी-कभी दृढ़ सार्वभौमिकता कहा जाता है।
एक अन्य गुण एकरूपता है. हम कहते हैं कि समूह एक समान है यदि सभी हैश मान समान रूप से संभावित हैं- किसी भी हैश मान के लिए। सार्वभौमिकता का तात्पर्य एकरूपता नहीं है। हालाँकि, दृढ़ सार्वभौमिकता का तात्पर्य एकरूपता से है।
समान दूरी के गुण वाले समूह को देखते हुए, कोई हैश फ़ंक्शन में मानों के साथ एक समान रूप से वितरित यादृच्छिक स्थिरांक जोड़कर एक जोड़ीदार स्वतंत्र या दृढ़ता से सार्वभौमिक हैश परिवार का उत्पादन कर सकता है।
, जो टकरावों को गिनता है। एकसमान अंतर गुण अधिक मजबूत होता है।
(इसी प्रकार, एक सार्वभौमिक परिवार XOR सार्वभौमिक हो सकता है यदि , मूल्य में समान रूप से वितरित किया जाता है कहाँ बिटवाइज़ एक्सक्लूसिव या ऑपरेशन है। यह तभी संभव है जब दो की शक्ति है।)
एक और भी मजबूत स्थिति जोड़ीवार स्वतंत्र है: हमारे पास यह संपत्ति कब है हमें इसकी संभावना है हैश मानों के किसी भी जोड़े को हैश कर देगा ऐसा लगता है मानो वे बिल्कुल यादृच्छिक थे: . जोड़ीवार स्वतंत्रता को कभी-कभी मजबूत सार्वभौमिकता कहा जाता है।
एक अन्य गुण है एकरूपता. हम कहते हैं कि एक परिवार एक समान है यदि सभी हैश मान समान रूप से संभावित हैं: किसी भी हैश मान के लिए . सार्वभौमिकता का अर्थ एकरूपता नहीं है। हालाँकि, मजबूत सार्वभौमिकता का तात्पर्य एकरूपता से है।
समान दूरी की संपत्ति वाले एक परिवार को देखते हुए, कोई भी मूल्यों के साथ एक समान रूप से वितरित यादृच्छिक स्थिरांक जोड़कर एक जोड़ीदार स्वतंत्र या दृढ़ता से सार्वभौमिक हैश परिवार का उत्पादन कर सकता है। हैश फ़ंक्शंस के लिए। (इसी प्रकार, यदि दो की शक्ति है, हम एक्सओआर सार्वभौमिक हैश परिवार से एक विशेष या समान रूप से वितरित यादृच्छिक स्थिरांक के साथ जोड़ीदार स्वतंत्रता प्राप्त कर सकते हैं।) चूंकि स्थिरांक द्वारा बदलाव कभी-कभी अनुप्रयोगों में अप्रासंगिक होता है (उदाहरण के लिए हैश तालिकाएं), एक सावधानीपूर्वक अंतर समान दूरी संपत्ति और जोड़ीदार स्वतंत्र के बीच कभी-कभी नहीं बनाया जाता है।[3] कुछ अनुप्रयोगों (जैसे हैश टेबल) के लिए, हैश मानों के कम से कम महत्वपूर्ण बिट्स का भी सार्वभौमिक होना महत्वपूर्ण है। जब एक परिवार दृढ़ता से सार्वभौमिक होता है, तो इसकी गारंटी होती है: यदि एक सशक्त सार्वभौमिक परिवार है , फिर परिवार के कार्यों से बना सभी के लिए के लिए भी दृढ़ता से सार्वभौमिक है . दुर्भाग्य से, यह बात (केवल) सार्वभौमिक परिवारों के लिए सच नहीं है। उदाहरण के लिए, परिवार पहचान फ़ंक्शन से बना है स्पष्ट रूप से सार्वभौमिक है, लेकिन परिवार कार्य से बना है सार्वभौमिक होने में विफल रहता है।
UMAC और Poly1305-AES और कई अन्य संदेश प्रमाणीकरण कोड एल्गोरिदम यूनिवर्सल हैशिंग पर आधारित हैं।[4][5] ऐसे अनुप्रयोगों में, सॉफ़्टवेयर प्रत्येक संदेश के लिए एक नया हैश फ़ंक्शन चुनता है, जो उस संदेश के लिए एक अद्वितीय नॉन पर आधारित होता है।
कई हैश तालिका कार्यान्वयन सार्वभौमिक हैशिंग पर आधारित हैं। ऐसे अनुप्रयोगों में, आम तौर पर सॉफ़्टवेयर एक नया हैश फ़ंक्शन तभी चुनता है जब उसे पता चलता है कि बहुत सारी कुंजियाँ टकरा गई हैं; तब तक, एक ही हैश फ़ंक्शन का बार-बार उपयोग किया जाता रहेगा। (कुछ टकराव समाधान योजनाएं, जैसे कि गतिशील उत्तम हैशिंग , हर बार टकराव होने पर एक नया हैश फ़ंक्शन चुनती हैं। अन्य टकराव समाधान योजनाएं, जैसे कि कोयल हैशिंग और 2-विकल्प हैशिंग, एक नया हैश फ़ंक्शन चुनने से पहले कई टकरावों की अनुमति देती हैं ). पूर्णांकों, वैक्टरों और के लिए सबसे तेज़ ज्ञात सार्वभौमिक और दृढ़ता से सार्वभौमिक हैश फ़ंक्शंस का एक सर्वेक्षण स्ट्रिंग्स पाई जाती है.[6]
गणितीय गारंटी
किसी भी निश्चित सेट के लिए का कुंजियाँ, एक सार्वभौमिक परिवार का उपयोग करने से निम्नलिखित गुणों की गारंटी मिलती है।
- किसी भी निश्चित के लिए में , बिन में चाबियों की अपेक्षित संख्या है . अलग-अलग चेनिंग द्वारा हैश तालिकाओं को लागू करते समय, यह संख्या कुंजी से जुड़े ऑपरेशन के अपेक्षित चलने के समय के समानुपाती होती है (उदाहरण के लिए कोई क्वेरी, सम्मिलन या विलोपन)।
- चाबियों के जोड़े की अपेक्षित संख्या में साथ जो टकराये () ऊपर से घिरा हुआ है , जो कि उचित है . जब डिब्बे की संख्या, में रैखिक चुना गया है (यानी, एक फ़ंक्शन द्वारा निर्धारित किया जाता है ), टक्करों की अपेक्षित संख्या है . में हैशिंग करते समय डिब्बे, कम से कम आधे की संभावना के साथ कोई टकराव नहीं होता है।
- डिब्बे में चाबियों की अपेक्षित संख्या कम से कम उनमें कुंजियाँ ऊपर से बाउंड होती हैं .[7] इस प्रकार, यदि प्रत्येक बिन की क्षमता को औसत आकार से तीन गुना तक सीमित कर दिया जाए (), भरे हुए डिब्बे में चाबियों की कुल संख्या अधिकतम है . यह केवल हैश परिवार के साथ लागू होता है जिसकी टकराव की संभावना ऊपर से बंधी होती है . यदि किसी कमज़ोर परिभाषा का उपयोग किया जाता है, तो उसे सीमित कर दें , यह परिणाम अब सत्य नहीं है।[7]
जैसा कि उपरोक्त गारंटी किसी भी निश्चित सेट के लिए लागू होती है , यदि डेटा सेट किसी प्रतिद्वंद्वी द्वारा चुना गया है तो वे धारण करते हैं। हालाँकि, प्रतिद्वंद्वी को एल्गोरिदम के हैश फ़ंक्शन के यादृच्छिक चयन से पहले (या उससे स्वतंत्र) यह विकल्प चुनना होगा। यदि प्रतिद्वंद्वी एल्गोरिथ्म की यादृच्छिक पसंद का निरीक्षण कर सकता है, तो यादृच्छिकता का कोई उद्देश्य नहीं है, और स्थिति नियतात्मक हैशिंग के समान है।
दूसरी और तीसरी गारंटी आमतौर पर डबल हैशिंग के संयोजन में उपयोग की जाती है। उदाहरण के लिए, कुछ को संभालने के लिए एक यादृच्छिक एल्गोरिदम तैयार किया जा सकता है टकरावों की संख्या. यदि यह बहुत अधिक टकराव देखता है, तो यह एक और यादृच्छिक टकराव चुनता है परिवार से और दोहराता है. सार्वभौमिकता गारंटी देती है कि दोहराव की संख्या एक ज्यामितीय वितरण है।
निर्माण
चूँकि किसी भी कंप्यूटर डेटा को एक या अधिक मशीनी शब्दों के रूप में दर्शाया जा सकता है, इसलिए आमतौर पर तीन प्रकार के डोमेन के लिए हैश फ़ंक्शन की आवश्यकता होती है: मशीनी शब्द (पूर्णांक); मशीनी शब्दों के निश्चित-लंबाई वाले वैक्टर; और चर-लंबाई वाले वेक्टर (स्ट्रिंग्स)।
पूर्णांकों को हैश करना
यह खंड हैशिंग पूर्णांकों के मामले को संदर्भित करता है जो मशीन शब्दों में फिट होते हैं; इस प्रकार, गुणा, जोड़, भाग आदि जैसे ऑपरेशन सस्ते मशीन-स्तरीय निर्देश हैं। ब्रह्माण्ड को हैशेड होने दीजिये .
कार्टर और वेगमैन का मूल प्रस्ताव[1]एक प्राइम चुनना था और परिभाषित करें
कहाँ बेतरतीब ढंग से चुने गए पूर्णांक मॉड्यूलो हैं साथ . (यह एक रैखिक सर्वांगसम जनरेटर का एकल पुनरावृत्ति है।)
उसे देखने के लिए एक सार्वभौमिक परिवार है, इस पर ध्यान दें केवल तभी धारण करता है जब
कुछ पूर्णांक के लिए बीच में और . तब से , अगर उनका अंतर शून्येतर है और इसका व्युत्क्रम मापांक है . के लिए समाधान पैदावार
- .
वहाँ हैं के लिए संभावित विकल्प (तब से बाहर रखा गया है) और, अलग-अलग अनुमत सीमा में, दाहिनी ओर के लिए संभावित गैर-शून्य मान। इस प्रकार टकराव की संभावना है
- .
देखने का दूसरा तरीका एक सार्वभौमिक परिवार सांख्यिकीय दूरी की धारणा के माध्यम से है। अंतर लिखिए जैसा
- .
तब से शून्येतर है और में समान रूप से वितरित किया जाता है , यह इस प्रकार है कि मापांक में भी समान रूप से वितरित किया जाता है . का वितरण इस प्रकार लगभग एक समान है, संभावना में अंतर तक नमूनों के बीच. परिणामस्वरूप, एक समान परिवार से सांख्यिकीय दूरी होती है जो कि जब नगण्य हो जाता है .
सरल हैश फ़ंक्शंस का परिवार
केवल लगभग सार्वभौमिक है: सभी के लिए .[1] इसके अलावा, यह विश्लेषण लगभग कड़ा है; कार्टर और वेगमैन [1]बताते हैं कि जब कभी भी .
मॉड्यूलर अंकगणित से बचना
हैशिंग पूर्णांकों के लिए कला की स्थिति डाइट्ज़फेलबिंगर एट अल द्वारा वर्णित बहु-शिफ्ट योजना है। 1997 में।[8] मॉड्यूलर अंकगणित से बचकर, इस विधि को लागू करना बहुत आसान है और व्यवहार में भी काफी तेजी से चलता है (आमतौर पर कम से कम चार के कारक से)[9]). योजना मानती है कि डिब्बे की संख्या दो की शक्ति है, . होने देना एक मशीन शब्द में बिट्स की संख्या हो। फिर हैश फ़ंक्शंस को विषम सकारात्मक पूर्णांकों पर पैरामीटराइज़ किया जाता है (यह एक शब्द में फिट बैठता है बिट्स)। मूल्यांकन करना , गुणा करें द्वारा मापांक और फिर उच्च क्रम बनाए रखें हैश कोड के रूप में बिट्स। गणितीय संकेतन में, यह है
यह योजना एक समान अंतर संपत्ति को संतुष्ट नहीं करती है और केवल है-लगभग-सार्वभौमिक; किसी के लिए , .
हैश फ़ंक्शन के व्यवहार को समझने के लिए, ध्यान दें कि, यदि और फिर, समान उच्चतम-क्रम वाले 'एम' बिट्स हों इसके उच्चतम क्रम के एम बिट्स के रूप में या तो सभी 1 या सभी 0 हैं (यह इस पर निर्भर करता है कि क्या या बड़ा है)। मान लें कि सबसे कम महत्वपूर्ण सेट बिट पद पर प्रकट होता है . तब से एक यादृच्छिक विषम पूर्णांक है और विषम पूर्णांकों का रिंग में व्युत्क्रम होता है (गणित) , यह इस प्रकार है कि के बीच समान रूप से वितरित किया जाएगा -बिट पूर्णांक स्थिति पर सबसे कम महत्वपूर्ण सेट बिट के साथ . इसलिए संभावना यह है कि ये बिट्स सभी 0 या सभी 1 हैं . दूसरी ओर, यदि , फिर उच्च-क्रम के एम बिट्स
इसमें 0 और 1 दोनों शामिल हैं, इसलिए
यह निश्चित है . अंततः, यदि फिर बिट का
1 और है यदि और केवल यदि बिट्स 1 भी हैं, जो प्रायिकता से घटित होता है .
यह विश्लेषण कड़ा है, जैसा कि उदाहरण से दिखाया जा सकता है और . वास्तव में 'सार्वभौमिक' हैश फ़ंक्शन प्राप्त करने के लिए, कोई मल्टीपल-ऐड-शिफ्ट योजना का उपयोग कर सकता है जो उच्च-क्रम बिट्स चुनता है
कहाँ के साथ एक यादृच्छिक धनात्मक पूर्णांक है और के साथ एक यादृच्छिक गैर-नकारात्मक पूर्णांक है . इसके लिए अंकगणित करने की आवश्यकता है -बिट अहस्ताक्षरित पूर्णांक। मल्टीपल-शिफ्ट का यह संस्करण डाइट्ज़फेलबिंगर के कारण है, और बाद में वोल्फेल द्वारा इसका अधिक सटीक विश्लेषण किया गया।[10]
हैशिंग वेक्टर
यह अनुभाग मशीनी शब्दों के एक निश्चित-लंबाई वाले वेक्टर को हैश करने से संबंधित है। इनपुट को वेक्टर के रूप में समझें का मशीनी शब्द (पूर्णांक) प्रत्येक बिट)। अगर समान अंतर संपत्ति वाला एक सार्वभौमिक परिवार है, निम्नलिखित परिवार (कार्टर और वेगमैन के समय का है)।[1] इसमें समान अंतर गुण भी है (और इसलिए सार्वभौमिक है):
- , जहां प्रत्येक यादृच्छिक रूप से स्वतंत्र रूप से चुना जाता है।
अगर दो की घात है, एक योग को अनन्य या से प्रतिस्थापित कर सकता है।[11] व्यवहार में, यदि डबल-सटीक अंकगणित उपलब्ध है, तो इसे हैश फ़ंक्शंस के मल्टीपल-शिफ्ट हैश परिवार के साथ त्वरित किया जाता है।[12]एक वेक्टर के साथ हैश फ़ंक्शन को प्रारंभ करें यादृच्छिक विषम पूर्णांकों पर प्रत्येक बिट. फिर यदि डिब्बे की संख्या है के लिए :
- .
गुणन की संख्या को आधा करना संभव है, जो व्यवहार में मोटे तौर पर दो गुना गति में बदल जाता है।[11]एक वेक्टर के साथ हैश फ़ंक्शन को प्रारंभ करें यादृच्छिक विषम पूर्णांकों पर प्रत्येक बिट. निम्नलिखित हैश परिवार सार्वभौमिक है:[13]
- .
यदि डबल-प्रिसिजन ऑपरेशन उपलब्ध नहीं हैं, तो कोई इनपुट को आधे-शब्दों के वेक्टर के रूप में व्याख्या कर सकता है (-बिट पूर्णांक)। इसके बाद एल्गोरिदम का उपयोग किया जाएगा गुणन, कहाँ वेक्टर में आधे शब्दों की संख्या थी। इस प्रकार, एल्गोरिदम इनपुट के प्रति शब्द एक गुणन की दर से चलता है।
उसी योजना का उपयोग पूर्णांकों को हैश करने के लिए भी किया जा सकता है, उनके बिट्स को बाइट्स के वैक्टर के रूप में व्याख्या करके। इस संस्करण में, वेक्टर तकनीक को सारणीबद्ध हैशिंग के रूप में जाना जाता है और यह गुणन-आधारित सार्वभौमिक हैशिंग योजनाओं के लिए एक व्यावहारिक विकल्प प्रदान करता है।[14] उच्च गति पर मजबूत सार्वभौमिकता भी संभव है।[15] एक वेक्टर के साथ हैश फ़ंक्शन को प्रारंभ करें यादृच्छिक पूर्णांकों पर बिट्स गणना करना
- .
परिणाम दृढ़ता से सार्वभौमिक है बिट्स प्रायोगिक तौर पर, यह हाल के इंटेल प्रोसेसर पर 0.2 सीपीयू चक्र प्रति बाइट पर चलता हुआ पाया गया .
हैशिंग स्ट्रिंग
यह मशीनी शब्दों के एक चर-आकार वाले वेक्टर को हैश करने को संदर्भित करता है। यदि स्ट्रिंग की लंबाई को एक छोटी संख्या से सीमित किया जा सकता है, तो ऊपर से वेक्टर समाधान का उपयोग करना सबसे अच्छा है (वैचारिक रूप से ऊपरी सीमा तक शून्य के साथ वेक्टर को पैडिंग करना)। आवश्यक स्थान स्ट्रिंग की अधिकतम लंबाई है, लेकिन मूल्यांकन करने का समय है की लंबाई मात्र है . जब तक स्ट्रिंग में शून्य वर्जित हैं, सार्वभौमिकता को प्रभावित किए बिना हैश फ़ंक्शन का मूल्यांकन करते समय शून्य-पैडिंग को अनदेखा किया जा सकता है।[11]ध्यान दें कि यदि स्ट्रिंग में शून्य की अनुमति है, तो पैडिंग से पहले सभी स्ट्रिंग्स में एक काल्पनिक गैर-शून्य (उदाहरण के लिए, 1) वर्ण जोड़ना सबसे अच्छा हो सकता है: इससे यह सुनिश्चित होगा कि सार्वभौमिकता प्रभावित नहीं होती है।[15]
अब मान लीजिए कि हम हैश करना चाहते हैं , जहां पर एक अच्छा बंधन है एक प्राथमिकता ज्ञात नहीं है. द्वारा प्रस्तावित एक सार्वभौमिक परिवार [12] स्ट्रिंग का इलाज करता है एक बहुपद मॉड्यूलो के गुणांक के रूप में एक बड़ा अभाज्य। अगर , होने देना एक प्रमुख बनें और परिभाषित करें:
- , कहाँ समान रूप से यादृच्छिक है और यूनिवर्सल फ़ैमिली मैपिंग पूर्णांक डोमेन से यादृच्छिक रूप से चुना जाता है .
मॉड्यूलर अंकगणित के गुणों का उपयोग करके, बड़े स्ट्रिंग के लिए बड़ी संख्या उत्पन्न किए बिना उपरोक्त गणना की जा सकती है:[16]
uint hash(String x, int a, int p)
uint h = INITIAL_VALUE
for (uint i=0 ; i < x.length ; ++i)
h = ((h*a) + x[i]) mod p
return h
यह रोलिंग हैश#राबिन-कार्प रोलिंग हैश|राबिन-कार्प रोलिंग हैश एक रैखिक सर्वांगसम जनरेटर पर आधारित है।[17] उपरोक्त एल्गोरिदम को मल्टीप्लिकेटिव हैश फ़ंक्शन के रूप में भी जाना जाता है।[18] व्यवहार में, मॉड ऑपरेटर और पैरामीटर पी को केवल पूर्णांक को ओवरफ्लो करने की अनुमति देकर पूरी तरह से टाला जा सकता है क्योंकि यह कई प्रोग्रामिंग भाषाओं में मॉड (मैक्स-इंट-वैल्यू + 1) के बराबर है। नीचे दी गई तालिका कुछ लोकप्रिय कार्यान्वयनों के लिए h और a को प्रारंभ करने के लिए चुने गए मान दिखाती है।
Implementation | INITIAL_VALUE | a |
---|---|---|
Bernstein's hash function djb2[19] | 5381 | 33 |
STLPort 4.6.2 | 0 | 5 |
Kernighan and Ritchie's hash function[20] | 0 | 31 |
java.lang.String.hashCode() [21]
|
0 | 31 |
दो तारों पर विचार करें और जाने लंबे समय तक की लंबाई हो; विश्लेषण के लिए, छोटी स्ट्रिंग को संकल्पनात्मक रूप से लंबाई तक शून्य के साथ गद्देदार किया गया है . आवेदन करने से पहले टक्कर इसका आशय है गुणांक वाले बहुपद का मूल है . इस बहुपद में अधिकतम है जड़ें मॉड्यूलो , इसलिए टकराव की संभावना अधिकतम है . यादृच्छिक के माध्यम से टकराव की संभावना कुल टकराव की संभावना लाता है . इस प्रकार, यदि प्रधान हैशेड स्ट्रिंग्स की लंबाई की तुलना में पर्याप्त रूप से बड़ा है, परिवार सार्वभौमिक (सांख्यिकीय दूरी में) के बहुत करीब है।
अज्ञात-लंबाई स्ट्रिंग को निश्चित-लंबाई वाले हैश मानों में हैश करने के लिए उपयोग किए जाने वाले हैश फ़ंक्शंस के अन्य सार्वभौमिक परिवारों में राबिन फ़िंगरप्रिंट और बुजस शामिल हैं।
मॉड्यूलर अंकगणित से बचना
मॉड्यूलर अंकगणित के कम्प्यूटेशनल दंड को कम करने के लिए, व्यवहार में तीन युक्तियों का उपयोग किया जाता है:[11]# कोई प्रधान चुनता है दो की घात के करीब होना, जैसे मेर्सन प्रीमियम यह अंकगणित मॉड्यूलो की अनुमति देता है विभाजन के बिना लागू किया जाना है (जोड़ और बदलाव जैसे तेज़ संचालन का उपयोग करके)। उदाहरण के लिए, आधुनिक आर्किटेक्चर पर कोई भी काम कर सकता है , जबकि के 32-बिट मान हैं.
- कोई ब्लॉक पर वेक्टर हैशिंग लागू कर सकता है। उदाहरण के लिए, कोई स्ट्रिंग के प्रत्येक 16-शब्द ब्लॉक पर वेक्टर हैशिंग लागू करता है, और स्ट्रिंग हैशिंग को लागू करता है परिणाम। चूंकि धीमी स्ट्रिंग हैशिंग को काफी छोटे वेक्टर पर लागू किया जाता है, यह अनिवार्य रूप से वेक्टर हैशिंग जितना तेज़ होगा।
- कोई व्यक्ति भाजक के रूप में दो की शक्ति को चुनता है, जिससे अंकगणित मॉड्यूलो की अनुमति मिलती है विभाजन के बिना लागू किया जाना है (बिट मास्किंग के तेज़ संचालन का उपयोग करके)। UMAC#NH हैश-फ़ंक्शन परिवार|NH हैश-फ़ंक्शन परिवार यह दृष्टिकोण अपनाता है।
यह भी देखें
- के-स्वतंत्र हैशिंग
- रोलिंग हैशिंग
- सारणीकरण हैशिंग
- न्यूनतम-वार स्वतंत्रता
- यूनिवर्सल वन-वे हैश फ़ंक्शन
- कम-विसंगति अनुक्रम
- उत्तम हैशिंग
संदर्भ
- ↑ 1.0 1.1 1.2 1.3 1.4 Carter, Larry; Wegman, Mark N. (1979). "Universal Classes of Hash Functions". Journal of Computer and System Sciences. 18 (2): 143–154. doi:10.1016/0022-0000(79)90044-8. Conference version in STOC'77.
- ↑ Miltersen, Peter Bro. "Universal Hashing" (PDF). Archived from the original (PDF) on 24 May 2011. Retrieved 24 June 2009.
- ↑ Motwani, Rajeev; Raghavan, Prabhakar (1995). Randomized Algorithms. Cambridge University Press. p. 221. ISBN 0-521-47465-5.
- ↑ David Wagner, ed. "Advances in Cryptology - CRYPTO 2008". p. 145.
- ↑ Jean-Philippe Aumasson, Willi Meier, Raphael Phan, Luca Henzen. "The Hash Function BLAKE". 2014. p. 10.
- ↑ Thorup, Mikkel (2015). "High Speed Hashing for Integers and Strings". arXiv:1504.06804 [cs.DS].
- ↑ 7.0 7.1 Baran, Ilya; Demaine, Erik D.; Pătraşcu, Mihai (2008). "Subquadratic Algorithms for 3SUM" (PDF). Algorithmica. 50 (4): 584–596. doi:10.1007/s00453-007-9036-3. S2CID 9855995.
- ↑ Dietzfelbinger, Martin; Hagerup, Torben; Katajainen, Jyrki; Penttonen, Martti (1997). "A Reliable Randomized Algorithm for the Closest-Pair Problem" (Postscript). Journal of Algorithms. 25 (1): 19–51. doi:10.1006/jagm.1997.0873. Retrieved 10 February 2011.
- ↑ Thorup, Mikkel (18 December 2009). "Text-book algorithms at SODA".
- ↑ Woelfel, Philipp (1999). Efficient Strongly Universal and Optimally Universal Hashing. Mathematical Foundations of Computer Science 1999. LNCS. Vol. 1672. pp. 262–272. doi:10.1007/3-540-48340-3_24.
- ↑ 11.0 11.1 11.2 11.3 Thorup, Mikkel (2009). String hashing for linear probing. Proc. 20th ACM-SIAM Symposium on Discrete Algorithms (SODA). pp. 655–664. CiteSeerX 10.1.1.215.4253. doi:10.1137/1.9781611973068.72. ISBN 978-0-89871-680-1., section 5.3
- ↑ 12.0 12.1 Dietzfelbinger, Martin; Gil, Joseph; Matias, Yossi; Pippenger, Nicholas (1992). Polynomial Hash Functions Are Reliable (Extended Abstract). Proc. 19th International Colloquium on Automata, Languages and Programming (ICALP). pp. 235–246.
- ↑ Black, J.; Halevi, S.; Krawczyk, H.; Krovetz, T. (1999). UMAC: Fast and Secure Message Authentication (PDF). Advances in Cryptology (CRYPTO '99)., Equation 1
- ↑ Pătraşcu, Mihai; Thorup, Mikkel (2011). The power of simple tabulation hashing. Proceedings of the 43rd annual ACM Symposium on Theory of Computing (STOC '11). pp. 1–10. arXiv:1011.5200. doi:10.1145/1993636.1993638. ISBN 9781450306911.
- ↑ 15.0 15.1 Kaser, Owen; Lemire, Daniel (2013). "Strongly universal string hashing is fast". Computer Journal. Oxford University Press. 57 (11): 1624–1638. arXiv:1202.4961. doi:10.1093/comjnl/bxt070.
- ↑ "Hebrew University Course Slides" (PDF).
- ↑ Robert Uzgalis. "Library Hash Functions". 1996.
- ↑ Kankowsk, Peter. "Hash functions: An empirical comparison".
- ↑ Yigit, Ozan. "String hash functions".
- ↑ Kernighan; Ritchie (1988). "6". The C Programming Language (2nd ed.). pp. 118. ISBN 0-13-110362-8.
{{cite book}}
: CS1 maint: multiple names: authors list (link) - ↑ "String (Java Platform SE 6)". docs.oracle.com. Retrieved 2015-06-10.
अग्रिम पठन
- Knuth, Donald Ervin (1998). The Art of Computer Programming, Vol. III: Sorting and Searching (3rd ed.). Reading, Mass; London: Addison-Wesley. ISBN 0-201-89685-0.