परफेक्ट हैश फ़ंक्शन: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Hash function without any collisions}} File:Hash table 4 1 1 0 0 0 0 LL.svg|thumb|240px|right|दिखाए गए चार नामों के ल...")
 
No edit summary
Line 1: Line 1:
{{Short description|Hash function without any collisions}}
{{Short description|Hash function without any collisions}}
[[File:Hash table 4 1 1 0 0 0 0 LL.svg|thumb|240px|right|दिखाए गए चार नामों के लिए एक आदर्श हैश फ़ंक्शन]]
[[File:Hash table 4 1 1 0 0 0 0 LL.svg|thumb|240px|right|दिखाए गए चार नामों के लिए एक आदर्श हैश फलन ]]
[[File:Hash table 4 1 0 0 0 0 0 LL.svg|thumb|240px|right|दिखाए गए चार नामों के लिए एक न्यूनतम उत्तम हैश फ़ंक्शन]][[कंप्यूटर विज्ञान]] में, एक आदर्श हैश फ़ंक्शन {{mvar|h}} एक सेट के लिए {{mvar|S}} एक [[हैश फंकशन]] है जो अलग-अलग तत्वों को मैप करता है {{mvar|S}} के एक सेट के लिए {{mvar|m}} पूर्णांक, बिना किसी हैश टकराव के। गणितीय शब्दों में, यह एक [[इंजेक्शन समारोह]] है।
[[File:Hash table 4 1 0 0 0 0 0 LL.svg|thumb|240px|right|दिखाए गए चार नामों के लिए एक न्यूनतम उत्तम हैश फलन ]][[कंप्यूटर विज्ञान]] में, एक आदर्श हैश फलन {{mvar|h}} एक समुच्चय के लिए {{mvar|S}} एक [[हैश फंकशन]] है जो अलग-अलग तत्वों को मानचित्र करता है {{mvar|S}} के एक समुच्चय के लिए {{mvar|m}} पूर्णांक, बिना किसी हैश टकराव के। गणितीय शब्दों में, यह एक [[इंजेक्शन समारोह|इंजेक्शन फलन]]   है।


लगातार सबसे खराब स्थिति वाले एक्सेस समय के साथ [[ तालिका देखो ]] को लागू करने के लिए परफेक्ट हैश फ़ंक्शंस का उपयोग किया जा सकता है। किसी भी हैश फ़ंक्शन की तरह, एक आदर्श हैश फ़ंक्शन का उपयोग [[हैश तालिका]]ओं को लागू करने के लिए किया जा सकता है, इस लाभ के साथ कि कोई हैश तालिका#टकराव समाधान लागू नहीं करना पड़ता है। इसके अलावा, यदि कुंजियाँ डेटा में नहीं हैं और यदि यह ज्ञात है कि क्वेरी की गई कुंजियाँ मान्य होंगी, तो कुंजियों को लुकअप तालिका में संग्रहीत करने की आवश्यकता नहीं है, जिससे स्थान की बचत होती है।
लगातार सबसे खराब स्थिति वाले एक्सेस समय के साथ [[ तालिका देखो |तालिका देखो]] को क्रियान्वित करने के लिए परफेक्ट हैश फ़ंक्शंस का उपयोग किया जा सकता है। किसी भी हैश फलन की तरह, एक आदर्श हैश फलन का उपयोग [[हैश तालिका]]ओं को क्रियान्वित करने के लिए किया जा सकता है, इस लाभ के साथ कि कोई हैश तालिका#टकराव समाधान क्रियान्वित नहीं करना पड़ता है। इसके अलावा, यदि कुंजियाँ डेटा में नहीं हैं और यदि यह ज्ञात है कि क्वेरी की गई कुंजियाँ मान्य होंगी, तब कुंजियों को लुकअप तालिका में संग्रहीत करने की आवश्यकता नहीं है, जिससे स्थान की बचत होती है।


परफेक्ट हैश फ़ंक्शंस के नुकसान ये हैं {{mvar|S}} को सही हैश फ़ंक्शन के निर्माण के लिए जाना जाना चाहिए। यदि गैर-गतिशील पूर्ण हैश फ़ंक्शंस को फिर से बनाने की आवश्यकता है {{mvar|S}} परिवर्तन। बार-बार बदलने के लिए {{mvar|S}} [[ गतिशील उत्तम हैशिंग ]] का उपयोग अतिरिक्त स्थान की कीमत पर किया जा सकता है।<ref name="DynamicPerfectHashing" />सही हैश फ़ंक्शन को संग्रहीत करने के लिए स्थान की आवश्यकता है {{math|''O''(''n'')}}.
परफेक्ट हैश फ़ंक्शंस के नुकसान ये हैं {{mvar|S}} को सही हैश फलन के निर्माण के लिए जाना जाना चाहिए। यदि गैर-गतिशील पूर्ण हैश फ़ंक्शंस को फिर से बनाने की आवश्यकता है {{mvar|S}} परिवर्तन। बार-बार बदलने के लिए {{mvar|S}} [[ गतिशील उत्तम हैशिंग |गतिशील उत्तम हैशिंग]] का उपयोग अतिरिक्त स्थान की कीमत पर किया जा सकता है।<ref name="DynamicPerfectHashing" />सही हैश फलन को संग्रहीत करने के लिए स्थान की आवश्यकता है {{math|''O''(''n'')}}.


सही हैश फ़ंक्शंस के लिए महत्वपूर्ण प्रदर्शन पैरामीटर मूल्यांकन समय हैं, जो स्थिर होना चाहिए, निर्माण समय और प्रतिनिधित्व आकार।
सही हैश फ़ंक्शंस के लिए महत्वपूर्ण प्रदर्शन पैरामीटर मूल्यांकन समय हैं, जो स्थिर होना चाहिए, निर्माण समय और प्रतिनिधित्व आकार।


==आवेदन==
==आवेदन==
सीमित सीमा में मानों के साथ एक आदर्श हैश फ़ंक्शन का उपयोग कुशल लुकअप संचालन के लिए कुंजी लगाकर किया जा सकता है {{mvar|S}} (या अन्य संबद्ध मान) फ़ंक्शन के आउटपुट द्वारा अनुक्रमित लुकअप तालिका में। इसके बाद कोई यह जांच सकता है कि कोई कुंजी मौजूद है या नहीं {{mvar|S}}, या तालिका के सेल में उस कुंजी की तलाश करके उससे जुड़े मान को देखें। सबसे खराब स्थिति की जटिलता में ऐसे प्रत्येक लुकअप में लगातार समय लगता है।<ref name="inventor"/>सही हैशिंग के साथ, संबंधित डेटा को तालिका तक एकल पहुंच के साथ पढ़ा या लिखा जा सकता है।<ref>{{citation
सीमित सीमा में मानों के साथ एक आदर्श हैश फलन का उपयोग कुशल लुकअप संचालन के लिए कुंजी लगाकर किया जा सकता है {{mvar|S}} (या अन्य संबद्ध मान) फलन के आउटपुट द्वारा अनुक्रमित लुकअप तालिका में। इसके पश्चात् कोई यह जांच सकता है कि कोई कुंजी मौजूद है या नहीं {{mvar|S}}, या तालिका के सेल में उस कुंजी की तलाश करके उससे जुड़े मान को देखें। सबसे खराब स्थिति की जटिलता में ऐसे प्रत्येक लुकअप में लगातार समय लगता है।<ref name="inventor"/>सही हैशिंग के साथ, संबंधित डेटा को तालिका तक एकल पहुंच के साथ पढ़ा या लिखा जा सकता है।<ref>{{citation
  | last1 = Lu | first1 = Yi | author1-link = Yi Lu (computer scientist)
  | last1 = Lu | first1 = Yi | author1-link = Yi Lu (computer scientist)
  | last2 = Prabhakar | first2 = Balaji | author2-link = Balaji Prabhakar
  | last2 = Prabhakar | first2 = Balaji | author2-link = Balaji Prabhakar
Line 24: Line 24:
सही हैशिंग के लिए महत्वपूर्ण प्रदर्शन पैरामीटर प्रतिनिधित्व आकार, मूल्यांकन समय, निर्माण समय और इसके अतिरिक्त सीमा की आवश्यकता हैं <math>\frac{m}{n}</math>.<ref name="CHD"/>मूल्यांकन का समय उतना ही तेज़ हो सकता है {{math|''O''(''1'')}}, जो इष्टतम है.<ref name="inventor"/><ref name="CHD"/>निर्माण का समय कम से कम होना चाहिए {{math|''O''(''n'')}}, क्योंकि प्रत्येक तत्व में {{mvar|S}} पर विचार करने की आवश्यकता है, और {{mvar|S}} रोकना {{mvar|n}}तत्व. इस निचली सीमा को व्यवहार में हासिल किया जा सकता है।<ref name="CHD"/>
सही हैशिंग के लिए महत्वपूर्ण प्रदर्शन पैरामीटर प्रतिनिधित्व आकार, मूल्यांकन समय, निर्माण समय और इसके अतिरिक्त सीमा की आवश्यकता हैं <math>\frac{m}{n}</math>.<ref name="CHD"/>मूल्यांकन का समय उतना ही तेज़ हो सकता है {{math|''O''(''1'')}}, जो इष्टतम है.<ref name="inventor"/><ref name="CHD"/>निर्माण का समय कम से कम होना चाहिए {{math|''O''(''n'')}}, क्योंकि प्रत्येक तत्व में {{mvar|S}} पर विचार करने की आवश्यकता है, और {{mvar|S}} रोकना {{mvar|n}}तत्व. इस निचली सीमा को व्यवहार में हासिल किया जा सकता है।<ref name="CHD"/>


प्रतिनिधित्व आकार के लिए निचली सीमा निर्भर करती है {{mvar|m}} और {{mvar|n}}. होने देना {{math|''m'' {{=}} (1+&epsilon;) ''n''}} और {{mvar|h}} एक आदर्श हैश फ़ंक्शन। निचली सीमा के लिए एक अच्छा सन्निकटन है <math>\log e - \varepsilon \log \frac{1+\varepsilon}{\varepsilon}</math> प्रति तत्व बिट्स. न्यूनतम उत्तम हैशिंग के लिए, {{math|&epsilon; {{=}} 0}}, निचली सीमा है {{math|log e ≈ 1.44}} प्रति तत्व बिट्स।<ref name="CHD"/>
प्रतिनिधित्व आकार के लिए निचली सीमा निर्भर करती है {{mvar|m}} और {{mvar|n}}. होने देना {{math|''m'' {{=}} (1+&epsilon;) ''n''}} और {{mvar|h}} एक आदर्श हैश फलन । निचली सीमा के लिए एक अच्छा सन्निकटन है <math>\log e - \varepsilon \log \frac{1+\varepsilon}{\varepsilon}</math> प्रति तत्व बिट्स. न्यूनतम उत्तम हैशिंग के लिए, {{math|&epsilon; {{=}} 0}}, निचली सीमा है {{math|log e ≈ 1.44}} प्रति तत्व बिट्स।<ref name="CHD"/>




==निर्माण==
==निर्माण==
एक विशिष्ट सेट के लिए एक आदर्श हैश फ़ंक्शन {{mvar|S}} जिसका मूल्यांकन निरंतर समय में किया जा सकता है, और एक छोटी सी सीमा में मूल्यों के साथ, [[यादृच्छिक एल्गोरिदम]] द्वारा कई ऑपरेशनों में पाया जा सकता है जो एस के आकार के लिए आनुपातिक है।
एक विशिष्ट समुच्चय के लिए एक आदर्श हैश फलन {{mvar|S}} जिसका मूल्यांकन निरंतर समय में किया जा सकता है, और एक छोटी सी सीमा में मूल्यों के साथ, [[यादृच्छिक एल्गोरिदम]] द्वारा अनेक ऑपरेशनों में पाया जा सकता है जो एस के आकार के लिए आनुपातिक है।
का मूल निर्माण {{harvtxt|Fredman|Komlós|Szemerédi|1984}} किसी सेट को मैप करने के लिए दो-स्तरीय योजना का उपयोग करता है {{mvar|S}} का {{mvar|n}} तत्वों की एक श्रृंखला के लिए {{math|''O''(''n'')}} सूचकांक, और फिर प्रत्येक सूचकांक को हैश मानों की श्रेणी में मैप करें। इनके निर्माण का प्रथम स्तर एक बड़े प्राइम को चुनता है {{mvar|p}} ([[ब्रह्मांड (गणित)]] के आकार से भी बड़ा {{mvar|S}} खींचा गया है), और एक पैरामीटर {{mvar|k}}, और प्रत्येक तत्व को मैप करता है {{mvar|x}} का {{mvar|S}} सूचकांक के लिए
का मूल निर्माण {{harvtxt|Fredman|Komlós|Szemerédi|1984}} किसी समुच्चय को मानचित्र करने के लिए दो-स्तरीय योजना का उपयोग करता है {{mvar|S}} का {{mvar|n}} तत्वों की एक श्रृंखला के लिए {{math|''O''(''n'')}} सूचकांक, और फिर प्रत्येक सूचकांक को हैश मानों की श्रेणी में मानचित्र करें। इनके निर्माण का प्रथम स्तर एक बड़े प्राइम को चुनता है {{mvar|p}} ([[ब्रह्मांड (गणित)]] के आकार से भी बड़ा {{mvar|S}} खींचा गया है), और एक पैरामीटर {{mvar|k}}, और प्रत्येक तत्व को मानचित्र करता है {{mvar|x}} का {{mvar|S}} सूचकांक के लिए
:<math>g(x)=(kx\bmod p)\bmod n.</math>
:<math>g(x)=(kx\bmod p)\bmod n.</math>
अगर {{mvar|k}} को यादृच्छिक रूप से चुना जाता है, इस चरण में टकराव होने की संभावना है, लेकिन तत्वों की संख्या {{mvar|n<sub>i</sub>}} जो एक साथ एक ही सूचकांक पर मैप किए जाते हैं {{mvar|i}} छोटा होने की संभावना है.
अगर {{mvar|k}} को यादृच्छिक रूप से चुना जाता है, इस चरण में टकराव होने की संभावना है, लेकिन तत्वों की संख्या {{mvar|n<sub>i</sub>}} जो एक साथ एक ही सूचकांक पर मानचित्र किए जाते हैं {{mvar|i}} छोटा होने की संभावना है.
उनके निर्माण का दूसरा स्तर असंयुक्त श्रेणियाँ निर्दिष्ट करता है {{math|''O''(''n<sub>i</sub>''<sup>2</sup>)}}प्रत्येक सूचकांक के लिए पूर्णांक {{mvar|i}}. यह रैखिक मॉड्यूलर फ़ंक्शंस के दूसरे सेट का उपयोग करता है, प्रत्येक सूचकांक के लिए एक {{mvar|i}}, प्रत्येक सदस्य को मैप करने के लिए {{mvar|x}} का {{mvar|S}} से जुड़ी सीमा में {{math|''g''(''x'')}}.<ref name="inventor">{{citation
उनके निर्माण का दूसरा स्तर असंयुक्त श्रेणियाँ निर्दिष्ट करता है {{math|''O''(''n<sub>i</sub>''<sup>2</sup>)}}प्रत्येक सूचकांक के लिए पूर्णांक {{mvar|i}}. यह रैखिक मॉड्यूलर फ़ंक्शंस के दूसरे समुच्चय का उपयोग करता है, प्रत्येक सूचकांक के लिए एक {{mvar|i}}, प्रत्येक सदस्य को मानचित्र करने के लिए {{mvar|x}} का {{mvar|S}} से जुड़ी सीमा में {{math|''g''(''x'')}}.<ref name="inventor">{{citation
  | last1 = Fredman | first1 = Michael L. | author1-link = Michael Fredman
  | last1 = Fredman | first1 = Michael L. | author1-link = Michael Fredman
  | last2 = Komlós | first2 = János | author2-link = János Komlós (mathematician)
  | last2 = Komlós | first2 = János | author2-link = János Komlós (mathematician)
Line 44: Line 44:
  | volume = 31
  | volume = 31
  | year = 1984| s2cid = 5399743 }}</ref>
  | year = 1984| s2cid = 5399743 }}</ref>
जैसा {{harvtxt|Fredman|Komlós|Szemerédi|1984}}दिखाएँ, पैरामीटर का एक विकल्प मौजूद है {{mvar|k}} जैसे कि श्रेणियों की लंबाई का योग {{mvar|n}} के विभिन्न मान {{math|''g''(''x'')}} है {{math|''O''(''n'')}}. इसके अतिरिक्त, प्रत्येक मान के लिए {{math|''g''(''x'')}}, एक रैखिक मॉड्यूलर फ़ंक्शन मौजूद है जो संबंधित उपसमुच्चय को मैप करता है {{mvar|S}} उस मान से संबद्ध सीमा में। दोनों {{mvar|k}}, और प्रत्येक मान के लिए दूसरे स्तर के फ़ंक्शन {{math|''g''(''x'')}}, बहुपद समय में मानों को यादृच्छिक रूप से चुनकर तब तक पाया जा सकता है जब तक कि कोई कार्यशील मान न मिल जाए।<ref name="inventor"/>
जैसा {{harvtxt|Fredman|Komlós|Szemerédi|1984}}दिखाएँ, पैरामीटर का एक विकल्प मौजूद है {{mvar|k}} जैसे कि श्रेणियों की लंबाई का योग {{mvar|n}} के विभिन्न मान {{math|''g''(''x'')}} है {{math|''O''(''n'')}}. इसके अतिरिक्त, प्रत्येक मान के लिए {{math|''g''(''x'')}}, एक रैखिक मॉड्यूलर फलन मौजूद है जो संबंधित उपसमुच्चय को मानचित्र करता है {{mvar|S}} उस मान से संबद्ध सीमा में। दोनों {{mvar|k}}, और प्रत्येक मान के लिए दूसरे स्तर के फलन {{math|''g''(''x'')}}, बहुपद समय में मानों को यादृच्छिक रूप से चुनकर तब तक पाया जा सकता है जब तक कि कोई कार्यशील मान न मिल जाए।<ref name="inventor"/>


हैश फ़ंक्शन को स्वयं संग्रहण स्थान की आवश्यकता होती है {{math|''O''(''n'')}} संचय करना {{mvar|k}}, {{mvar|p}}, और दूसरे स्तर के सभी रैखिक मॉड्यूलर फ़ंक्शन। किसी दी गई कुंजी के हैश मान की गणना करना {{mvar|x}} कंप्यूटिंग द्वारा निरंतर समय में निष्पादित किया जा सकता है {{math|''g''(''x'')}}, से जुड़े दूसरे स्तर के फ़ंक्शन को देख रहे हैं {{math|''g''(''x'')}}, और इस फ़ंक्शन को लागू करना {{mvar|x}}.
हैश फलन को स्वयं संग्रहण स्थान की आवश्यकता होती है {{math|''O''(''n'')}} संचय करना {{mvar|k}}, {{mvar|p}}, और दूसरे स्तर के सभी रैखिक मॉड्यूलर फलन । किसी दी गई कुंजी के हैश मान की गणना करना {{mvar|x}} कंप्यूटिंग द्वारा निरंतर समय में निष्पादित किया जा सकता है {{math|''g''(''x'')}}, से जुड़े दूसरे स्तर के फलन को देख रहे हैं {{math|''g''(''x'')}}, और इस फलन को क्रियान्वित करना {{mvar|x}}.
शीर्ष स्तर पर बड़ी संख्या में मानों के साथ इस दो-स्तरीय योजना का एक संशोधित संस्करण का उपयोग एक आदर्श हैश फ़ंक्शन बनाने के लिए किया जा सकता है जो मैप करता है {{mvar|S}} लंबाई की एक छोटी सीमा में {{math|''n'' + ''o''(''n'')}}.<ref name="inventor"/>
शीर्ष स्तर पर बड़ी संख्या में मानों के साथ इस दो-स्तरीय योजना का एक संशोधित संस्करण का उपयोग एक आदर्श हैश फलन बनाने के लिए किया जा सकता है जो मानचित्र करता है {{mvar|S}} लंबाई की एक छोटी सीमा में {{math|''n'' + ''o''(''n'')}}.<ref name="inventor"/>


एक आदर्श हैश फ़ंक्शन के निर्माण के लिए एक और हालिया विधि का वर्णन किया गया है {{harvtxt|Belazzougui|Botelho|Dietzfelbinger|2009}} हैश, डिसप्लेस और कंप्रेस के रूप में। यहां प्रथम-स्तरीय हैश फ़ंक्शन है {{mvar|g}} का उपयोग तत्वों को किसी श्रेणी में मैप करने के लिए भी किया जाता है {{mvar|r}} पूर्णांक. तत्व {{math|''x'' ∈ ''S''}} को बाल्टी में संग्रहित किया जाता है {{mvar|B<sub>g(x)</sub>}}.<ref name="CHD" />
एक आदर्श हैश फलन के निर्माण के लिए एक और हालिया विधि का वर्णन किया गया है हैश, डिसप्लेस और कंप्रेस के रूप में। यहां प्रथम-स्तरीय हैश फलन है {{mvar|g}} का उपयोग तत्वों को किसी श्रेणी में मानचित्र करने के लिए भी किया जाता है {{mvar|r}} पूर्णांक. तत्व {{math|''x'' ∈ ''S''}} को बाल्टी में संग्रहित किया जाता है {{mvar|B<sub>g(x)</sub>}}.<ref name="CHD" />


फिर, आकार के घटते क्रम में, प्रत्येक बाल्टी के तत्वों को स्वतंत्र पूर्ण यादृच्छिक हैश फ़ंक्शन के अनुक्रम के हैश फ़ंक्शन द्वारा हैश किया जाता है {{math|(&Phi;<sub>1</sub>, &Phi;<sub>2</sub>, &Phi;<sub>3</sub>, ...)}}, प्रारंभ स्थल {{math|&Phi;<sub>1</sub>}}. यदि हैश फ़ंक्शन बकेट के लिए कोई टकराव उत्पन्न नहीं करता है, और परिणामी मान अभी तक अन्य बकेट के अन्य तत्वों द्वारा कब्जा नहीं किया गया है, तो उस बकेट के लिए फ़ंक्शन चुना जाता है। यदि नहीं, तो अनुक्रम में अगले हैश फ़ंक्शन का परीक्षण किया जाता है।<ref name="CHD" />
फिर, आकार के घटते क्रम में, प्रत्येक बाल्टी के तत्वों को स्वतंत्र पूर्ण यादृच्छिक हैश फलन के अनुक्रम के हैश फलन द्वारा हैश किया जाता है {{math|(&Phi;<sub>1</sub>, &Phi;<sub>2</sub>, &Phi;<sub>3</sub>, ...)}}, प्रारंभ स्थल {{math|&Phi;<sub>1</sub>}}. यदि हैश फलन बकेट के लिए कोई टकराव उत्पन्न नहीं करता है, और परिणामी मान अभी तक अन्य बकेट के अन्य तत्वों द्वारा कब्जा नहीं किया गया है, तब उस बकेट के लिए फलन चुना जाता है। यदि नहीं, तब अनुक्रम में अगले हैश फलन का परीक्षण किया जाता है।<ref name="CHD" />


सही हैश फ़ंक्शन का मूल्यांकन करने के लिए {{math|''h''(''x'')}} किसी को केवल बकेट इंडेक्स की मैपिंग σ को सहेजना होगा {{math|''g''(''x'')}} अनुक्रम में सही हैश फ़ंक्शन पर, जिसके परिणामस्वरूप {{math|h(x) {{=}} &Phi;<sub>σ(g(x))</sub>}}.<ref name="CHD" />
सही हैश फलन का मूल्यांकन करने के लिए {{math|''h''(''x'')}} किसी को केवल बकेट इंडेक्स की मैपिंग σ को सहेजना होगा {{math|''g''(''x'')}} अनुक्रम में सही हैश फलन पर, जिसके परिणामस्वरूप {{math|h(x) {{=}} &Phi;<sub>σ(g(x))</sub>}}.<ref name="CHD" />


अंत में, प्रतिनिधित्व आकार को कम करने के लिए, ({{math|σ(i))<sub>0 ≤ i < r</sub>}} को एक ऐसे रूप में संपीड़ित किया जाता है जो अभी भी मूल्यांकन की अनुमति देता है {{math|''O''(''1'')}}.<ref name="CHD" />
अंत में, प्रतिनिधित्व आकार को कम करने के लिए, ({{math|σ(i))<sub>0 ≤ i < r</sub>}} को एक ऐसे रूप में संपीड़ित किया जाता है जो अभी भी मूल्यांकन की अनुमति देता है {{math|''O''(''1'')}}.<ref name="CHD" />


इस दृष्टिकोण के लिए रैखिक समय की आवश्यकता है {{mvar|n}} निर्माण के लिए, और निरंतर मूल्यांकन समय। प्रतिनिधित्व आकार में है {{math|''O''(''n'')}}, और प्राप्त सीमा पर निर्भर करता है। उदाहरण के लिए, साथ {{math|''m'' {{=}} 1.23''n''}} {{harvtxt|Belazzougui|Botelho|Dietzfelbinger|2009}} ने 10 मिलियन प्रविष्टियों के दिए गए उदाहरण सेट के लिए 3.03 बिट्स/कुंजी और 1.40 बिट्स/कुंजी के बीच एक प्रतिनिधित्व आकार हासिल किया, कम मूल्यों के लिए उच्च गणना समय की आवश्यकता होती है। इस परिदृश्य में निचली सीमा 0.88 बिट/कुंजी है।<ref name="CHD" />
इस दृष्टिकोण के लिए रैखिक समय की आवश्यकता है {{mvar|n}} निर्माण के लिए, और निरंतर मूल्यांकन समय। प्रतिनिधित्व आकार में है {{math|''O''(''n'')}}, और प्राप्त सीमा पर निर्भर करता है। उदाहरण के लिए, साथ {{math|''m'' {{=}} 1.23''n''}} ने 10 मिलियन प्रविष्टियों के दिए गए उदाहरण समुच्चय के लिए 3.03 बिट्स/कुंजी और 1.40 बिट्स/कुंजी के मध्य एक प्रतिनिधित्व आकार हासिल किया, कम मूल्यों के लिए उच्च गणना समय की आवश्यकता होती है। इस परिदृश्य में निचली सीमा 0.88 बिट/कुंजी है।<ref name="CHD" />
{{missing information|section|RecSplit & "fingerprinting" [https://epubs.siam.org/doi/pdf/10.1137/1.9781611976007.14 recsplit paper]|date=March 2023}}
 
===छद्मकोड===
===छद्मकोड===
  एल्गोरिथम ''हैश, डिस्प्लेस, और कंप्रेस'' है
  एल्गोरिथम ''हैश, डिस्प्लेस, और कंप्रेस'' है
Line 68: Line 66:
  (5) एल के लिए{{thin space}}←{{thin space}}1,2,...
  (5) एल के लिए{{thin space}}←{{thin space}}1,2,...
  (6) K बनाते हुए दोहराएँ<sub>i</sub>{{thin space}}←{{thin space}}{{{math|&Phi;}}<sub>l</sub>(x)|x{{thin space}}∈{{thin space}}B<sub>i</sub>}
  (6) K बनाते हुए दोहराएँ<sub>i</sub>{{thin space}}←{{thin space}}{{{math|&Phi;}}<sub>l</sub>(x)|x{{thin space}}∈{{thin space}}B<sub>i</sub>}
  (6) जब तक |के<sub>i</sub>|=|बी<sub>i</sub>| और के<sub>i</sub>∩{j|T[j]=1}={{thin space}}&खाली सेट;
  (6) जब तक |के<sub>i</sub>|=|बी<sub>i</sub>| और के<sub>i</sub>∩{j|T[j]=1}={{thin space}}&खाली समुच्चय ;
  (7) चलो σ(i):= सफल एल
  (7) चलो σ(i):= सफल एल
  (8) सभी जे के लिए{{thin space}}∈{{thin space}}क<sub>i</sub> चलो टी[जे]:={{thin space}}1
  (8) सभी जे के लिए{{thin space}}∈{{thin space}}क<sub>i</sub> चलो टी[जे]:={{thin space}}1
Line 74: Line 72:


==अंतरिक्ष निचली सीमा==
==अंतरिक्ष निचली सीमा==
का उपयोग {{math|''O''(''n'')}} कार्य को संग्रहीत करने के लिए जानकारी के शब्द {{harvtxt|Fredman|Komlós|Szemerédi|1984}} लगभग-इष्टतम है: कोई भी पूर्ण हैश फ़ंक्शन जिसकी गणना निरंतर समय में की जा सकती है
का उपयोग {{math|''O''(''n'')}} कार्य को संग्रहीत करने के लिए जानकारी के शब्द लगभग-इष्टतम है: कोई भी पूर्ण हैश फलन जिसकी गणना निरंतर समय में की जा सकती है
के आकार के समानुपाती कम से कम बिट्स की संख्या की आवश्यकता होती है {{mvar|S}}.<ref>{{citation
के आकार के समानुपाती कम से कम बिट्स की संख्या की आवश्यकता होती है {{mvar|S}}.<ref>{{citation
  | last1 = Fredman | first1 = Michael L. | author1-link = Michael Fredman
  | last1 = Fredman | first1 = Michael L. | author1-link = Michael Fredman
Line 90: Line 88:
बिट्स/कुंजी.<ref name="CHD" />
बिट्स/कुंजी.<ref name="CHD" />


सही हैश फ़ंक्शंस के लिए, सबसे पहले यह माना जाता है कि की सीमा {{mvar|h}} से घिरा है {{mvar|n}} जैसा {{math|''m'' {{=}} (1+&epsilon;) ''n''}}. द्वारा दिए गए सूत्र के साथ {{harvtxt|Belazzougui|Botelho|Dietzfelbinger|2009}} और एक ब्रह्मांड के लिए (गणित) <math>U\supseteq S</math> जिसका आकार {{math|{{!}}''U''{{!}} {{=}} ''u''}} अनंत की ओर जाता है, अंतरिक्ष निचली सीमा है
सही हैश फ़ंक्शंस के लिए, सबसे पहले यह माना जाता है कि की सीमा {{mvar|h}} से घिरा है {{mvar|n}} जैसा {{math|''m'' {{=}} (1+&epsilon;) ''n''}}. द्वारा दिए गए सूत्र के साथ और एक ब्रह्मांड के लिए (गणित) <math>U\supseteq S</math> जिसका आकार {{math|{{!}}''U''{{!}} {{=}} ''u''}} अनंत की ओर जाता है, अंतरिक्ष निचली सीमा है
:<math>\log_2e-\varepsilon \log\frac{1+\varepsilon}{\varepsilon}</math>
:<math>\log_2e-\varepsilon \log\frac{1+\varepsilon}{\varepsilon}</math>
बिट्स/कुंजी, माइनस {{math|log(''n'')}} कुल मिलाकर बिट्स।<ref name="CHD" />
बिट्स/कुंजी, माइनस {{math|log(''n'')}} कुल मिलाकर बिट्स।<ref name="CHD" />
Line 98: Line 96:


===मेमोरी पता पहचान===
===मेमोरी पता पहचान===
परफेक्ट हैशिंग का एक तुच्छ लेकिन व्यापक उदाहरण कंप्यूटर की (वर्चुअल) [[ आभासी मेमोरी ]] में निहित है। चूँकि वर्चुअल मेमोरी का प्रत्येक बाइट एक विशिष्ट, अद्वितीय, सीधे पता योग्य भंडारण स्थान है, मेमोरी में संग्रहीत (प्रारंभिक) [[पॉइंटर (कंप्यूटर प्रोग्रामिंग)]] के मूल्य को संपूर्ण मेमोरी एड्रेस रेंज में उस ऑब्जेक्ट का एक वास्तविक सही हैश माना जा सकता है।<ref>{{cite book|publisher=[[Springer Science+Business Media]]|url=https://books.google.com/books?id=66jBbZYOt-EC&pg=PA254|page=254|author1=Witold Litwin|author2=Tadeusz Morzy|author3=Gottfried Vossen|date=19 August 1998|isbn= 9783540649243|title=Advances in Databases and Information Systems}}</ref>
परफेक्ट हैशिंग का एक तुच्छ लेकिन व्यापक उदाहरण कंप्यूटर की (वर्चुअल) [[ आभासी मेमोरी |आभासी मेमोरी]] में निहित है। चूँकि वर्चुअल मेमोरी का प्रत्येक बाइट एक विशिष्ट, अद्वितीय, सीधे पता योग्य भंडारण स्थान है, मेमोरी में संग्रहीत (प्रारंभिक) [[पॉइंटर (कंप्यूटर प्रोग्रामिंग)]] के मूल्य को संपूर्ण मेमोरी एड्रेस रेंज में उस ऑब्जेक्ट का एक वास्तविक सही हैश माना जा सकता है।<ref>{{cite book|publisher=[[Springer Science+Business Media]]|url=https://books.google.com/books?id=66jBbZYOt-EC&pg=PA254|page=254|author1=Witold Litwin|author2=Tadeusz Morzy|author3=Gottfried Vossen|date=19 August 1998|isbn= 9783540649243|title=Advances in Databases and Information Systems}}</ref>




===गतिशील उत्तम हैशिंग===
===गतिशील उत्तम हैशिंग===
{{main article|Dynamic perfect hashing}}
एक आदर्श हैश फलन का उपयोग करना उन स्थितियों में सबसे अच्छा है जहां बार-बार पूछे जाने वाले बड़े समुच्चय होते हैं, {{mvar|S}}, जिसे शायद ही कभी अद्यतन किया जाता है। इसका कारण समुच्चय का कोई भी संशोधन है {{mvar|S}} संशोधित समुच्चय के लिए हैश फलन अब सही नहीं रह सकता है। ऐसे समाधान जो किसी भी समय समुच्चय को संशोधित करने पर हैश फलन को अपडेट करते हैं उन्हें डायनामिक परफेक्ट हैशिंग के रूप में जाना जाता है,<ref name="DynamicPerfectHashing">{{citation
एक आदर्श हैश फ़ंक्शन का उपयोग करना उन स्थितियों में सबसे अच्छा है जहां बार-बार पूछे जाने वाले बड़े सेट होते हैं, {{mvar|S}}, जिसे शायद ही कभी अद्यतन किया जाता है। इसका कारण सेट का कोई भी संशोधन है {{mvar|S}} संशोधित सेट के लिए हैश फ़ंक्शन अब सही नहीं रह सकता है। ऐसे समाधान जो किसी भी समय सेट को संशोधित करने पर हैश फ़ंक्शन को अपडेट करते हैं उन्हें डायनामिक परफेक्ट हैशिंग के रूप में जाना जाता है,<ref name="DynamicPerfectHashing">{{citation
  | last1 = Dietzfelbinger | first1 = Martin
  | last1 = Dietzfelbinger | first1 = Martin
  | last2 = Karlin | first2 = Anna | author2-link = Anna Karlin
  | last2 = Karlin | first2 = Anna | author2-link = Anna Karlin
Line 117: Line 114:
  | title = Dynamic perfect hashing: upper and lower bounds
  | title = Dynamic perfect hashing: upper and lower bounds
  | volume = 23
  | volume = 23
  | year = 1994}}.</ref> लेकिन इन तरीकों को लागू करना अपेक्षाकृत जटिल है।
  | year = 1994}}.</ref> लेकिन इन तरीकों को क्रियान्वित करना अपेक्षाकृत जटिल है।


===न्यूनतम उत्तम हैश फ़ंक्शन===
===न्यूनतम उत्तम हैश फलन ===
न्यूनतम परफेक्ट हैश फ़ंक्शन एक परफेक्ट हैश फ़ंक्शन है जो मैप करता है {{mvar|n}}की चाबियाँ {{mvar|n}} लगातार पूर्णांक - आमतौर पर संख्याएँ {{math|0}} को {{math|''n'' &minus; 1}} या से {{math|1}} को {{mvar|n}}. इसे व्यक्त करने का एक अधिक औपचारिक तरीका है: चलो {{mvar|j}} और {{mvar|k}} किसी परिमित समुच्चय के तत्व हों {{mvar|S}}. तब {{mvar|h}} एक न्यूनतम पूर्ण हैश फ़ंक्शन है यदि और केवल यदि {{math|1=''h''(''j'') = ''h''(''k'')}} तात्पर्य {{math|1=''j'' = ''k''}} ([[ इंजेक्शन ]]) और एक पूर्णांक मौजूद है {{mvar|a}} ऐसा कि की सीमा {{mvar|h}} है {{math|1=''a''..''a'' + {{!}}''S''{{!}} &minus; 1}}. यह सिद्ध हो चुका है कि एक सामान्य प्रयोजन न्यूनतम उत्तम हैश योजना के लिए कम से कम आवश्यकता होती है {{math|lg ''e'' ≈ 1.44}} बिट्स/कुंजी।<ref name="CHD">{{citation
न्यूनतम परफेक्ट हैश फलन एक परफेक्ट हैश फलन है जो मानचित्र करता है {{mvar|n}}की चाबियाँ {{mvar|n}} लगातार पूर्णांक - आमतौर पर संख्याएँ {{math|0}} को {{math|''n'' &minus; 1}} या से {{math|1}} को {{mvar|n}}. इसे व्यक्त करने का एक अधिक औपचारिक तरीका है: चलो {{mvar|j}} और {{mvar|k}} किसी परिमित समुच्चय के तत्व हों {{mvar|S}}. तब {{mvar|h}} एक न्यूनतम पूर्ण हैश फलन है यदि और केवल यदि {{math|1=''h''(''j'') = ''h''(''k'')}} तात्पर्य {{math|1=''j'' = ''k''}} ([[ इंजेक्शन ]]) और एक पूर्णांक मौजूद है {{mvar|a}} ऐसा कि की सीमा {{mvar|h}} है {{math|1=''a''..''a'' + {{!}}''S''{{!}} &minus; 1}}. यह सिद्ध हो चुका है कि एक सामान्य प्रयोजन न्यूनतम उत्तम हैश योजना के लिए कम से कम आवश्यकता होती है {{math|lg ''e'' ≈ 1.44}} बिट्स/कुंजी।<ref name="CHD">{{citation
  | last1 = Belazzougui | first1 = Djamal
  | last1 = Belazzougui | first1 = Djamal
  | last2 = Botelho | first2 = Fabiano C.
  | last2 = Botelho | first2 = Fabiano C.
Line 152: Line 149:


===k-परफेक्ट हैशिंग===
===k-परफेक्ट हैशिंग===
एक हैश फ़ंक्शन है {{mvar|k}}-यदि अधिक से अधिक हो तो उत्तम {{mvar|k}}तत्वों से {{mvar|S}} को श्रेणी में समान मान पर मैप किया जाता है। निर्माण के लिए हैश, डिस्प्लेस और कंप्रेस एल्गोरिदम का उपयोग किया जा सकता है {{mvar|k}}-तक की अनुमति देकर उत्तम हैश फ़ंक्शन {{mvar|k}} टकराव. इसे पूरा करने के लिए आवश्यक परिवर्तन न्यूनतम हैं, और नीचे अनुकूलित छद्म कोड में रेखांकित किए गए हैं:
एक हैश फलन है {{mvar|k}}-यदि अधिक से अधिक हो तब उत्तम {{mvar|k}}तत्वों से {{mvar|S}} को श्रेणी में समान मान पर मानचित्र किया जाता है। निर्माण के लिए हैश, डिस्प्लेस और कंप्रेस एल्गोरिदम का उपयोग किया जा सकता है {{mvar|k}}-तक की अनुमति देकर उत्तम हैश फलन {{mvar|k}} टकराव. इसे पूरा करने के लिए आवश्यक परिवर्तन न्यूनतम हैं, और नीचे अनुकूलित छद्म कोड में रेखांकित किए गए हैं:
  (4) सभी के लिए I{{thin space}}∈[r], (2) से क्रम में करें
  (4) सभी के लिए I{{thin space}}∈[r], (2) से क्रम में करें
  (5) एल के लिए{{thin space}}←{{thin space}}1,2,...
  (5) एल के लिए{{thin space}}←{{thin space}}1,2,...
  (6) K बनाते हुए दोहराएँ<sub>i</sub>{{thin space}}←{{thin space}}{{{math|&Phi;}}<sub>l</sub>(x)|x{{thin space}}∈{{thin space}}B<sub>i</sub>}
  (6) K बनाते हुए दोहराएँ<sub>i</sub>{{thin space}}←{{thin space}}{{{math|&Phi;}}<sub>l</sub>(x)|x{{thin space}}∈{{thin space}}B<sub>i</sub>}
  (6) जब तक |के<sub>i</sub>|=|बी<sub>i</sub>| और के<sub>i</sub>∩{j|<u>T[j]=k</u>}={{thin space}}&खाली सेट;
  (6) जब तक |के<sub>i</sub>|=|बी<sub>i</sub>| और के<sub>i</sub>∩{j|<u>T[j]=k</u>}={{thin space}}&खाली समुच्चय ;
  (7) चलो σ(i):= सफल एल
  (7) चलो σ(i):= सफल एल
  (8) सभी जे के लिए{{thin space}}∈{{thin space}}क<sub>i</sub> <u>T[j]←T[j]+1</u> सेट करें
  (8) सभी जे के लिए{{thin space}}∈{{thin space}}क<sub>i</sub> <u>T[j]←T[j]+1</u> समुच्चय करें


===आदेश संरक्षण===
===आदेश संरक्षण===
एक न्यूनतम उत्तम हैश फ़ंक्शन {{mvar|F}यदि कुंजियाँ किसी क्रम में दी गई हैं तो } ऑर्डर संरक्षित करना है {{math|''a''<sub>1</sub>, ''a''<sub>2</sub>, ..., ''a''<sub>''n''</sub>}} और किसी भी कुंजी के लिए {{math|''a''<sub>''j''</sub>}} और {{math|''a''<sub>''k''</sub>}}, {{math|''j'' < ''k''}} तात्पर्य {{math|''F''(''a''<sub>''j''</sub>) < F(''a''<sub>''k''</sub>)}}.<ref>{{Citation |first=Bob |last=Jenkins |contribution=order-preserving minimal perfect hashing |title=Dictionary of Algorithms and Data Structures |editor-first=Paul E. |editor-last=Black |publisher=U.S. National Institute of Standards and Technology |date=14 April 2009 |accessdate=2013-03-05 |url=https://xlinux.nist.gov/dads/HTML/orderPreservMinPerfectHash.html}}</ref> इस मामले में, फ़ंक्शन मान सभी कुंजियों के क्रमबद्ध क्रम में प्रत्येक कुंजी की स्थिति मात्र है। निरंतर पहुंच समय के साथ ऑर्डर-संरक्षित न्यूनतम परफेक्ट हैश फ़ंक्शन का एक सरल कार्यान्वयन प्रत्येक कुंजी की स्थिति की लुकअप तालिका को संग्रहीत करने के लिए एक (सामान्य) परफेक्ट हैश फ़ंक्शन का उपयोग करना है। इस समाधान का उपयोग करता है <math>O(n \log n)</math> बिट्स, जो उस सेटिंग में इष्टतम है जहां कुंजियों के लिए तुलना फ़ंक्शन मनमाना हो सकता है।<ref>{{citation |last1=Fox |first1=Edward A. |title=Order-preserving minimal perfect hash functions and information retrieval |date=July 1991 |url=http://eprints.cs.vt.edu/archive/00000248/01/TR-91-01.pdf |journal=ACM Transactions on Information Systems |volume=9 |issue=3 |pages=281–308 |location=New York, NY, USA |publisher=ACM |doi=10.1145/125187.125200 |s2cid=53239140 |last2=Chen |first2=Qi Fan |last3=Daoud |first3=Amjad M. |last4=Heath |first4=Lenwood S.}}.</ref> हालाँकि, यदि चाबियाँ {{math|''a''<sub>1</sub>, ''a''<sub>2</sub>, ..., ''a''<sub>''n''</sub>}} ब्रह्मांड से निकाले गए पूर्णांक हैं <math>\{1, 2, \ldots, U\}</math>, तो केवल उपयोग करके ऑर्डर-संरक्षित हैश फ़ंक्शन का निर्माण करना संभव है <math>O(n \log \log \log U)</math> जगह के टुकड़े.<ref>{{citation |last1=Belazzougui |first1=Djamal |title=Theory and practice of monotone minimal perfect hashing |date=November 2008 |journal=Journal of Experimental Algorithmics |volume=16 |at=Art. no. 3.2, 26pp |doi=10.1145/1963190.2025378 |s2cid=2367401 |last2=Boldi |first2=Paolo |last3=Pagh |first3=Rasmus |last4=Vigna |first4=Sebastiano |author3-link=Rasmus Pagh}}.</ref> इसके अलावा, यह सीमा इष्टतम मानी जाती है।<ref>{{Citation |last=Assadi |first=Sepehr |title=Tight Bounds for Monotone Minimal Perfect Hashing |date=January 2023 |url=http://dx.doi.org/10.1137/1.9781611977554.ch20 |work=Proceedings of the 2023 Annual ACM-SIAM Symposium on Discrete Algorithms (SODA) |pages=456–476 |access-date=2023-04-27 |place=Philadelphia, PA |publisher=Society for Industrial and Applied Mathematics |isbn=978-1-61197-755-4 |last2=Farach-Colton |first2=Martín |last3=Kuszmaul |first3=William}}</ref>
<nowiki>एक न्यूनतम उत्तम हैश फलन {{mvar|F}यदि कुंजियाँ किसी क्रम में दी गई हैं तब } ऑर्डर संरक्षित करना है </nowiki>{{math|''a''<sub>1</sub>, ''a''<sub>2</sub>, ..., ''a''<sub>''n''</sub>}} और किसी भी कुंजी के लिए {{math|''a''<sub>''j''</sub>}} और {{math|''a''<sub>''k''</sub>}}, {{math|''j'' < ''k''}} तात्पर्य {{math|''F''(''a''<sub>''j''</sub>) < F(''a''<sub>''k''</sub>)}}.<ref>{{Citation |first=Bob |last=Jenkins |contribution=order-preserving minimal perfect hashing |title=Dictionary of Algorithms and Data Structures |editor-first=Paul E. |editor-last=Black |publisher=U.S. National Institute of Standards and Technology |date=14 April 2009 |accessdate=2013-03-05 |url=https://xlinux.nist.gov/dads/HTML/orderPreservMinPerfectHash.html}}</ref> इस मामले में, फलन मान सभी कुंजियों के क्रमबद्ध क्रम में प्रत्येक कुंजी की स्थिति मात्र है। निरंतर पहुंच समय के साथ ऑर्डर-संरक्षित न्यूनतम परफेक्ट हैश फलन का एक सरल कार्यान्वयन प्रत्येक कुंजी की स्थिति की लुकअप तालिका को संग्रहीत करने के लिए एक (सामान्य) परफेक्ट हैश फलन का उपयोग करना है। इस समाधान का उपयोग करता है <math>O(n \log n)</math> बिट्स, जो उस सेटिंग में इष्टतम है जहां कुंजियों के लिए तुलना फलन मनमाना हो सकता है।<ref>{{citation |last1=Fox |first1=Edward A. |title=Order-preserving minimal perfect hash functions and information retrieval |date=July 1991 |url=http://eprints.cs.vt.edu/archive/00000248/01/TR-91-01.pdf |journal=ACM Transactions on Information Systems |volume=9 |issue=3 |pages=281–308 |location=New York, NY, USA |publisher=ACM |doi=10.1145/125187.125200 |s2cid=53239140 |last2=Chen |first2=Qi Fan |last3=Daoud |first3=Amjad M. |last4=Heath |first4=Lenwood S.}}.</ref> हालाँकि, यदि चाबियाँ {{math|''a''<sub>1</sub>, ''a''<sub>2</sub>, ..., ''a''<sub>''n''</sub>}} ब्रह्मांड से निकाले गए पूर्णांक हैं <math>\{1, 2, \ldots, U\}</math>, तब केवल उपयोग करके ऑर्डर-संरक्षित हैश फलन का निर्माण करना संभव है <math>O(n \log \log \log U)</math> जगह के टुकड़े.<ref>{{citation |last1=Belazzougui |first1=Djamal |title=Theory and practice of monotone minimal perfect hashing |date=November 2008 |journal=Journal of Experimental Algorithmics |volume=16 |at=Art. no. 3.2, 26pp |doi=10.1145/1963190.2025378 |s2cid=2367401 |last2=Boldi |first2=Paolo |last3=Pagh |first3=Rasmus |last4=Vigna |first4=Sebastiano |author3-link=Rasmus Pagh}}.</ref> इसके अलावा, यह सीमा इष्टतम मानी जाती है।<ref>{{Citation |last=Assadi |first=Sepehr |title=Tight Bounds for Monotone Minimal Perfect Hashing |date=January 2023 |url=http://dx.doi.org/10.1137/1.9781611977554.ch20 |work=Proceedings of the 2023 Annual ACM-SIAM Symposium on Discrete Algorithms (SODA) |pages=456–476 |access-date=2023-04-27 |place=Philadelphia, PA |publisher=Society for Industrial and Applied Mathematics |isbn=978-1-61197-755-4 |last2=Farach-Colton |first2=Martín |last3=Kuszmaul |first3=William}}</ref>




Line 167: Line 164:


जबकि अच्छी तरह से आकार वाली हैश तालिकाओं में लुकअप, सम्मिलन और विलोपन के लिए औसत O(1) समय (परिशोधित औसत स्थिर समय) होता है, अधिकांश हैश तालिका एल्गोरिदम संभावित सबसे खराब स्थिति वाले समय से ग्रस्त होते हैं जिसमें अधिक समय लगता है।
जबकि अच्छी तरह से आकार वाली हैश तालिकाओं में लुकअप, सम्मिलन और विलोपन के लिए औसत O(1) समय (परिशोधित औसत स्थिर समय) होता है, अधिकांश हैश तालिका एल्गोरिदम संभावित सबसे खराब स्थिति वाले समय से ग्रस्त होते हैं जिसमें अधिक समय लगता है।
सबसे खराब स्थिति वाला O(1) समय (सबसे खराब स्थिति में भी स्थिर समय) कई अनुप्रयोगों ([[नेटवर्क राउटर]] और [[मेमोरी कैश]] सहित) के लिए बेहतर होगा।<ref name="davis" >
सबसे खराब स्थिति वाला O(1) समय (सबसे खराब स्थिति में भी स्थिर समय) अनेक अनुप्रयोगों ([[नेटवर्क राउटर]] और [[मेमोरी कैश]] सहित) के लिए बेहतर होगा।<ref name="davis" >
Timothy A. Davis.
Timothy A. Davis.
[https://www.cs.wm.edu/~tadavis/cs303/ch05sm.pdf "Chapter 5 Hashing"]: subsection "Hash Tables with Worst-Case O(1) Access"
[https://www.cs.wm.edu/~tadavis/cs303/ch05sm.pdf "Chapter 5 Hashing"]: subsection "Hash Tables with Worst-Case O(1) Access"
Line 174: Line 171:
कुछ हैश टेबल एल्गोरिदम सबसे खराब स्थिति O(1) लुकअप समय (सबसे खराब स्थिति में भी निरंतर लुकअप समय) का समर्थन करते हैं। उनमें से कुछ में शामिल हैं: उत्तम हैशिंग; गतिशील उत्तम हैशिंग; [[कोयल हैशिंग]]; [[हॉप्सकॉच हैशिंग]]; और [[विस्तार योग्य हैशिंग]]।<ref name="davis" />{{rp|42-69}}
कुछ हैश टेबल एल्गोरिदम सबसे खराब स्थिति O(1) लुकअप समय (सबसे खराब स्थिति में भी निरंतर लुकअप समय) का समर्थन करते हैं। उनमें से कुछ में शामिल हैं: उत्तम हैशिंग; गतिशील उत्तम हैशिंग; [[कोयल हैशिंग]]; [[हॉप्सकॉच हैशिंग]]; और [[विस्तार योग्य हैशिंग]]।<ref name="davis" />{{rp|42-69}}


परफेक्ट हैशिंग का एक सरल विकल्प, जो गतिशील अपडेट की भी अनुमति देता है, कुक्कू हैशिंग है। यह योजना एक सीमा के भीतर दो या दो से अधिक स्थानों की कुंजियों को मैप करती है (परफेक्ट हैशिंग के विपरीत जो प्रत्येक कुंजी को एक ही स्थान पर मैप करती है) लेकिन ऐसा इस तरह से करती है कि कुंजियों को एक-से-एक उन स्थानों पर सौंपा जा सकता है जहां वे हैं मैप किया गया। इस योजना के साथ लुकअप धीमा है, क्योंकि कई स्थानों की जाँच की जानी चाहिए, लेकिन फिर भी लगातार सबसे खराब स्थिति में समय लगता है।<ref>{{citation
परफेक्ट हैशिंग का एक सरल विकल्प, जो गतिशील अपडेट की भी अनुमति देता है, कुक्कू हैशिंग है। यह योजना एक सीमा के भीतर दो या दो से अधिक स्थानों की कुंजियों को मानचित्र करती है (परफेक्ट हैशिंग के विपरीत जो प्रत्येक कुंजी को एक ही स्थान पर मानचित्र करती है) लेकिन ऐसा इस तरह से करती है कि कुंजियों को एक-से-एक उन स्थानों पर सौंपा जा सकता है जहां वे हैं मानचित्र किया गया। इस योजना के साथ लुकअप धीमा है, क्योंकि अनेक स्थानों की जाँच की जानी चाहिए, लेकिन फिर भी लगातार सबसे खराब स्थिति में समय लगता है।<ref>{{citation
  | last1 = Pagh | first1 = Rasmus | author1-link = Rasmus Pagh
  | last1 = Pagh | first1 = Rasmus | author1-link = Rasmus Pagh
  | last2 = Rodler | first2 = Flemming Friche
  | last2 = Rodler | first2 = Flemming Friche

Revision as of 17:38, 18 July 2023

दिखाए गए चार नामों के लिए एक आदर्श हैश फलन
दिखाए गए चार नामों के लिए एक न्यूनतम उत्तम हैश फलन

कंप्यूटर विज्ञान में, एक आदर्श हैश फलन h एक समुच्चय के लिए S एक हैश फंकशन है जो अलग-अलग तत्वों को मानचित्र करता है S के एक समुच्चय के लिए m पूर्णांक, बिना किसी हैश टकराव के। गणितीय शब्दों में, यह एक इंजेक्शन फलन है।

लगातार सबसे खराब स्थिति वाले एक्सेस समय के साथ तालिका देखो को क्रियान्वित करने के लिए परफेक्ट हैश फ़ंक्शंस का उपयोग किया जा सकता है। किसी भी हैश फलन की तरह, एक आदर्श हैश फलन का उपयोग हैश तालिकाओं को क्रियान्वित करने के लिए किया जा सकता है, इस लाभ के साथ कि कोई हैश तालिका#टकराव समाधान क्रियान्वित नहीं करना पड़ता है। इसके अलावा, यदि कुंजियाँ डेटा में नहीं हैं और यदि यह ज्ञात है कि क्वेरी की गई कुंजियाँ मान्य होंगी, तब कुंजियों को लुकअप तालिका में संग्रहीत करने की आवश्यकता नहीं है, जिससे स्थान की बचत होती है।

परफेक्ट हैश फ़ंक्शंस के नुकसान ये हैं S को सही हैश फलन के निर्माण के लिए जाना जाना चाहिए। यदि गैर-गतिशील पूर्ण हैश फ़ंक्शंस को फिर से बनाने की आवश्यकता है S परिवर्तन। बार-बार बदलने के लिए S गतिशील उत्तम हैशिंग का उपयोग अतिरिक्त स्थान की कीमत पर किया जा सकता है।[1]सही हैश फलन को संग्रहीत करने के लिए स्थान की आवश्यकता है O(n).

सही हैश फ़ंक्शंस के लिए महत्वपूर्ण प्रदर्शन पैरामीटर मूल्यांकन समय हैं, जो स्थिर होना चाहिए, निर्माण समय और प्रतिनिधित्व आकार।

आवेदन

सीमित सीमा में मानों के साथ एक आदर्श हैश फलन का उपयोग कुशल लुकअप संचालन के लिए कुंजी लगाकर किया जा सकता है S (या अन्य संबद्ध मान) फलन के आउटपुट द्वारा अनुक्रमित लुकअप तालिका में। इसके पश्चात् कोई यह जांच सकता है कि कोई कुंजी मौजूद है या नहीं S, या तालिका के सेल में उस कुंजी की तलाश करके उससे जुड़े मान को देखें। सबसे खराब स्थिति की जटिलता में ऐसे प्रत्येक लुकअप में लगातार समय लगता है।[2]सही हैशिंग के साथ, संबंधित डेटा को तालिका तक एकल पहुंच के साथ पढ़ा या लिखा जा सकता है।[3]


उत्तम हैश फ़ंक्शंस का प्रदर्शन

सही हैशिंग के लिए महत्वपूर्ण प्रदर्शन पैरामीटर प्रतिनिधित्व आकार, मूल्यांकन समय, निर्माण समय और इसके अतिरिक्त सीमा की आवश्यकता हैं .[4]मूल्यांकन का समय उतना ही तेज़ हो सकता है O(1), जो इष्टतम है.[2][4]निर्माण का समय कम से कम होना चाहिए O(n), क्योंकि प्रत्येक तत्व में S पर विचार करने की आवश्यकता है, और S रोकना nतत्व. इस निचली सीमा को व्यवहार में हासिल किया जा सकता है।[4]

प्रतिनिधित्व आकार के लिए निचली सीमा निर्भर करती है m और n. होने देना m = (1+ε) n और h एक आदर्श हैश फलन । निचली सीमा के लिए एक अच्छा सन्निकटन है प्रति तत्व बिट्स. न्यूनतम उत्तम हैशिंग के लिए, ε = 0, निचली सीमा है log e ≈ 1.44 प्रति तत्व बिट्स।[4]


निर्माण

एक विशिष्ट समुच्चय के लिए एक आदर्श हैश फलन S जिसका मूल्यांकन निरंतर समय में किया जा सकता है, और एक छोटी सी सीमा में मूल्यों के साथ, यादृच्छिक एल्गोरिदम द्वारा अनेक ऑपरेशनों में पाया जा सकता है जो एस के आकार के लिए आनुपातिक है। का मूल निर्माण Fredman, Komlós & Szemerédi (1984) किसी समुच्चय को मानचित्र करने के लिए दो-स्तरीय योजना का उपयोग करता है S का n तत्वों की एक श्रृंखला के लिए O(n) सूचकांक, और फिर प्रत्येक सूचकांक को हैश मानों की श्रेणी में मानचित्र करें। इनके निर्माण का प्रथम स्तर एक बड़े प्राइम को चुनता है p (ब्रह्मांड (गणित) के आकार से भी बड़ा S खींचा गया है), और एक पैरामीटर k, और प्रत्येक तत्व को मानचित्र करता है x का S सूचकांक के लिए

अगर k को यादृच्छिक रूप से चुना जाता है, इस चरण में टकराव होने की संभावना है, लेकिन तत्वों की संख्या ni जो एक साथ एक ही सूचकांक पर मानचित्र किए जाते हैं i छोटा होने की संभावना है. उनके निर्माण का दूसरा स्तर असंयुक्त श्रेणियाँ निर्दिष्ट करता है O(ni2)प्रत्येक सूचकांक के लिए पूर्णांक i. यह रैखिक मॉड्यूलर फ़ंक्शंस के दूसरे समुच्चय का उपयोग करता है, प्रत्येक सूचकांक के लिए एक i, प्रत्येक सदस्य को मानचित्र करने के लिए x का S से जुड़ी सीमा में g(x).[2] जैसा Fredman, Komlós & Szemerédi (1984)दिखाएँ, पैरामीटर का एक विकल्प मौजूद है k जैसे कि श्रेणियों की लंबाई का योग n के विभिन्न मान g(x) है O(n). इसके अतिरिक्त, प्रत्येक मान के लिए g(x), एक रैखिक मॉड्यूलर फलन मौजूद है जो संबंधित उपसमुच्चय को मानचित्र करता है S उस मान से संबद्ध सीमा में। दोनों k, और प्रत्येक मान के लिए दूसरे स्तर के फलन g(x), बहुपद समय में मानों को यादृच्छिक रूप से चुनकर तब तक पाया जा सकता है जब तक कि कोई कार्यशील मान न मिल जाए।[2]

हैश फलन को स्वयं संग्रहण स्थान की आवश्यकता होती है O(n) संचय करना k, p, और दूसरे स्तर के सभी रैखिक मॉड्यूलर फलन । किसी दी गई कुंजी के हैश मान की गणना करना x कंप्यूटिंग द्वारा निरंतर समय में निष्पादित किया जा सकता है g(x), से जुड़े दूसरे स्तर के फलन को देख रहे हैं g(x), और इस फलन को क्रियान्वित करना x. शीर्ष स्तर पर बड़ी संख्या में मानों के साथ इस दो-स्तरीय योजना का एक संशोधित संस्करण का उपयोग एक आदर्श हैश फलन बनाने के लिए किया जा सकता है जो मानचित्र करता है S लंबाई की एक छोटी सीमा में n + o(n).[2]

एक आदर्श हैश फलन के निर्माण के लिए एक और हालिया विधि का वर्णन किया गया है हैश, डिसप्लेस और कंप्रेस के रूप में। यहां प्रथम-स्तरीय हैश फलन है g का उपयोग तत्वों को किसी श्रेणी में मानचित्र करने के लिए भी किया जाता है r पूर्णांक. तत्व xS को बाल्टी में संग्रहित किया जाता है Bg(x).[4]

फिर, आकार के घटते क्रम में, प्रत्येक बाल्टी के तत्वों को स्वतंत्र पूर्ण यादृच्छिक हैश फलन के अनुक्रम के हैश फलन द्वारा हैश किया जाता है 1, Φ2, Φ3, ...), प्रारंभ स्थल Φ1. यदि हैश फलन बकेट के लिए कोई टकराव उत्पन्न नहीं करता है, और परिणामी मान अभी तक अन्य बकेट के अन्य तत्वों द्वारा कब्जा नहीं किया गया है, तब उस बकेट के लिए फलन चुना जाता है। यदि नहीं, तब अनुक्रम में अगले हैश फलन का परीक्षण किया जाता है।[4]

सही हैश फलन का मूल्यांकन करने के लिए h(x) किसी को केवल बकेट इंडेक्स की मैपिंग σ को सहेजना होगा g(x) अनुक्रम में सही हैश फलन पर, जिसके परिणामस्वरूप h(x) = Φσ(g(x)).[4]

अंत में, प्रतिनिधित्व आकार को कम करने के लिए, (σ(i))0 ≤ i < r को एक ऐसे रूप में संपीड़ित किया जाता है जो अभी भी मूल्यांकन की अनुमति देता है O(1).[4]

इस दृष्टिकोण के लिए रैखिक समय की आवश्यकता है n निर्माण के लिए, और निरंतर मूल्यांकन समय। प्रतिनिधित्व आकार में है O(n), और प्राप्त सीमा पर निर्भर करता है। उदाहरण के लिए, साथ m = 1.23n ने 10 मिलियन प्रविष्टियों के दिए गए उदाहरण समुच्चय के लिए 3.03 बिट्स/कुंजी और 1.40 बिट्स/कुंजी के मध्य एक प्रतिनिधित्व आकार हासिल किया, कम मूल्यों के लिए उच्च गणना समय की आवश्यकता होती है। इस परिदृश्य में निचली सीमा 0.88 बिट/कुंजी है।[4]

छद्मकोड

एल्गोरिथम हैश, डिस्प्लेस, और कंप्रेस है
(1) एस को बाल्टियों में विभाजित करें Bi := g−1({i})∩S,0 ≤ i < r
(2) बाल्टियाँ बी क्रमबद्ध करेंi आकार के अनुसार घटते क्रम में |बीi|
(3) सरणी T[0...m-1] को 0 से प्रारंभ करें
(4) सभी के लिए I∈[r], (2) से क्रम में करें
(5) एल के लिए1,2,...
(6) K बनाते हुए दोहराएँi{Φl(x)|xBi}
(6) जब तक |केi|=|बीi| और केi∩{j|T[j]=1}=&खाली समुच्चय ;
(7) चलो σ(i):= सफल एल
(8) सभी जे के लिएi चलो टी[जे]:=1
(9) परिवर्तन (पृi)0≤i<r संपीड़ित रूप में, बनाए रखना O(1) पहुँच।

अंतरिक्ष निचली सीमा

का उपयोग O(n) कार्य को संग्रहीत करने के लिए जानकारी के शब्द लगभग-इष्टतम है: कोई भी पूर्ण हैश फलन जिसकी गणना निरंतर समय में की जा सकती है के आकार के समानुपाती कम से कम बिट्स की संख्या की आवश्यकता होती है S.[5] न्यूनतम पूर्ण हैश फ़ंक्शंस के लिए सूचना सैद्धांतिक स्थान निचली सीमा है

बिट्स/कुंजी.[4]

सही हैश फ़ंक्शंस के लिए, सबसे पहले यह माना जाता है कि की सीमा h से घिरा है n जैसा m = (1+ε) n. द्वारा दिए गए सूत्र के साथ और एक ब्रह्मांड के लिए (गणित) जिसका आकार |U| = u अनंत की ओर जाता है, अंतरिक्ष निचली सीमा है

बिट्स/कुंजी, माइनस log(n) कुल मिलाकर बिट्स।[4]


एक्सटेंशन

मेमोरी पता पहचान

परफेक्ट हैशिंग का एक तुच्छ लेकिन व्यापक उदाहरण कंप्यूटर की (वर्चुअल) आभासी मेमोरी में निहित है। चूँकि वर्चुअल मेमोरी का प्रत्येक बाइट एक विशिष्ट, अद्वितीय, सीधे पता योग्य भंडारण स्थान है, मेमोरी में संग्रहीत (प्रारंभिक) पॉइंटर (कंप्यूटर प्रोग्रामिंग) के मूल्य को संपूर्ण मेमोरी एड्रेस रेंज में उस ऑब्जेक्ट का एक वास्तविक सही हैश माना जा सकता है।[6]


गतिशील उत्तम हैशिंग

एक आदर्श हैश फलन का उपयोग करना उन स्थितियों में सबसे अच्छा है जहां बार-बार पूछे जाने वाले बड़े समुच्चय होते हैं, S, जिसे शायद ही कभी अद्यतन किया जाता है। इसका कारण समुच्चय का कोई भी संशोधन है S संशोधित समुच्चय के लिए हैश फलन अब सही नहीं रह सकता है। ऐसे समाधान जो किसी भी समय समुच्चय को संशोधित करने पर हैश फलन को अपडेट करते हैं उन्हें डायनामिक परफेक्ट हैशिंग के रूप में जाना जाता है,[1] लेकिन इन तरीकों को क्रियान्वित करना अपेक्षाकृत जटिल है।

न्यूनतम उत्तम हैश फलन

न्यूनतम परफेक्ट हैश फलन एक परफेक्ट हैश फलन है जो मानचित्र करता है nकी चाबियाँ n लगातार पूर्णांक - आमतौर पर संख्याएँ 0 को n − 1 या से 1 को n. इसे व्यक्त करने का एक अधिक औपचारिक तरीका है: चलो j और k किसी परिमित समुच्चय के तत्व हों S. तब h एक न्यूनतम पूर्ण हैश फलन है यदि और केवल यदि h(j) = h(k) तात्पर्य j = k (इंजेक्शन ) और एक पूर्णांक मौजूद है a ऐसा कि की सीमा h है a..a + |S| − 1. यह सिद्ध हो चुका है कि एक सामान्य प्रयोजन न्यूनतम उत्तम हैश योजना के लिए कम से कम आवश्यकता होती है lg e ≈ 1.44 बिट्स/कुंजी।[4] यद्यपि यह स्थान सैद्धांतिक कार्यों द्वारा हासिल किया गया है, व्यवहार में, सबसे प्रसिद्ध न्यूनतम सही हैशिंग योजनाओं को पर्याप्त समय दिए जाने पर लगभग 1.56 बिट्स/कुंजी की आवश्यकता होती है।[7]


k-परफेक्ट हैशिंग

एक हैश फलन है k-यदि अधिक से अधिक हो तब उत्तम kतत्वों से S को श्रेणी में समान मान पर मानचित्र किया जाता है। निर्माण के लिए हैश, डिस्प्लेस और कंप्रेस एल्गोरिदम का उपयोग किया जा सकता है k-तक की अनुमति देकर उत्तम हैश फलन k टकराव. इसे पूरा करने के लिए आवश्यक परिवर्तन न्यूनतम हैं, और नीचे अनुकूलित छद्म कोड में रेखांकित किए गए हैं:

(4) सभी के लिए I∈[r], (2) से क्रम में करें
(5) एल के लिए1,2,...
(6) K बनाते हुए दोहराएँi{Φl(x)|xBi}
(6) जब तक |केi|=|बीi| और केi∩{j|T[j]=k}=&खाली समुच्चय ;
(7) चलो σ(i):= सफल एल
(8) सभी जे के लिएi T[j]←T[j]+1 समुच्चय करें

आदेश संरक्षण

एक न्यूनतम उत्तम हैश फलन {{mvar|F}यदि कुंजियाँ किसी क्रम में दी गई हैं तब } ऑर्डर संरक्षित करना है a1, a2, ..., an और किसी भी कुंजी के लिए aj और ak, j < k तात्पर्य F(aj) < F(ak).[8] इस मामले में, फलन मान सभी कुंजियों के क्रमबद्ध क्रम में प्रत्येक कुंजी की स्थिति मात्र है। निरंतर पहुंच समय के साथ ऑर्डर-संरक्षित न्यूनतम परफेक्ट हैश फलन का एक सरल कार्यान्वयन प्रत्येक कुंजी की स्थिति की लुकअप तालिका को संग्रहीत करने के लिए एक (सामान्य) परफेक्ट हैश फलन का उपयोग करना है। इस समाधान का उपयोग करता है बिट्स, जो उस सेटिंग में इष्टतम है जहां कुंजियों के लिए तुलना फलन मनमाना हो सकता है।[9] हालाँकि, यदि चाबियाँ a1, a2, ..., an ब्रह्मांड से निकाले गए पूर्णांक हैं , तब केवल उपयोग करके ऑर्डर-संरक्षित हैश फलन का निर्माण करना संभव है जगह के टुकड़े.[10] इसके अलावा, यह सीमा इष्टतम मानी जाती है।[11]


संबंधित निर्माण

जबकि अच्छी तरह से आकार वाली हैश तालिकाओं में लुकअप, सम्मिलन और विलोपन के लिए औसत O(1) समय (परिशोधित औसत स्थिर समय) होता है, अधिकांश हैश तालिका एल्गोरिदम संभावित सबसे खराब स्थिति वाले समय से ग्रस्त होते हैं जिसमें अधिक समय लगता है। सबसे खराब स्थिति वाला O(1) समय (सबसे खराब स्थिति में भी स्थिर समय) अनेक अनुप्रयोगों (नेटवर्क राउटर और मेमोरी कैश सहित) के लिए बेहतर होगा।[12]: 41 

कुछ हैश टेबल एल्गोरिदम सबसे खराब स्थिति O(1) लुकअप समय (सबसे खराब स्थिति में भी निरंतर लुकअप समय) का समर्थन करते हैं। उनमें से कुछ में शामिल हैं: उत्तम हैशिंग; गतिशील उत्तम हैशिंग; कोयल हैशिंग; हॉप्सकॉच हैशिंग; और विस्तार योग्य हैशिंग[12]: 42–69 

परफेक्ट हैशिंग का एक सरल विकल्प, जो गतिशील अपडेट की भी अनुमति देता है, कुक्कू हैशिंग है। यह योजना एक सीमा के भीतर दो या दो से अधिक स्थानों की कुंजियों को मानचित्र करती है (परफेक्ट हैशिंग के विपरीत जो प्रत्येक कुंजी को एक ही स्थान पर मानचित्र करती है) लेकिन ऐसा इस तरह से करती है कि कुंजियों को एक-से-एक उन स्थानों पर सौंपा जा सकता है जहां वे हैं मानचित्र किया गया। इस योजना के साथ लुकअप धीमा है, क्योंकि अनेक स्थानों की जाँच की जानी चाहिए, लेकिन फिर भी लगातार सबसे खराब स्थिति में समय लगता है।[13]


संदर्भ

  1. 1.0 1.1 Dietzfelbinger, Martin; Karlin, Anna; Mehlhorn, Kurt; Meyer auf der Heide, Friedhelm; Rohnert, Hans; Tarjan, Robert E. (1994), "Dynamic perfect hashing: upper and lower bounds", SIAM Journal on Computing, 23 (4): 738–761, doi:10.1137/S0097539791194094, MR 1283572.
  2. 2.0 2.1 2.2 2.3 2.4 Fredman, Michael L.; Komlós, János; Szemerédi, Endre (1984), "Storing a Sparse Table with O(1) Worst Case Access Time", Journal of the ACM, 31 (3): 538, doi:10.1145/828.1884, MR 0819156, S2CID 5399743
  3. Lu, Yi; Prabhakar, Balaji; Bonomi, Flavio (2006), "Perfect Hashing for Network Applications", 2006 IEEE International Symposium on Information Theory: 2774–2778, doi:10.1109/ISIT.2006.261567, ISBN 1-4244-0505-X, S2CID 1494710
  4. 4.00 4.01 4.02 4.03 4.04 4.05 4.06 4.07 4.08 4.09 4.10 4.11 Belazzougui, Djamal; Botelho, Fabiano C.; Dietzfelbinger, Martin (2009), "Hash, displace, and compress" (PDF), Algorithms—ESA 2009: 17th Annual European Symposium, Copenhagen, Denmark, September 7-9, 2009, Proceedings (PDF), Lecture Notes in Computer Science, vol. 5757, Berlin: Springer, pp. 682–693, CiteSeerX 10.1.1.568.130, doi:10.1007/978-3-642-04128-0_61, MR 2557794.
  5. Fredman, Michael L.; Komlós, János (1984), "On the size of separating systems and families of perfect hash functions", SIAM Journal on Algebraic and Discrete Methods, 5 (1): 61–68, doi:10.1137/0605009, MR 0731857.
  6. Witold Litwin; Tadeusz Morzy; Gottfried Vossen (19 August 1998). Advances in Databases and Information Systems. Springer Science+Business Media. p. 254. ISBN 9783540649243.
  7. Esposito, Emmanuel; Mueller Graf, Thomas; Vigna, Sebastiano (2020), "RecSplit: Minimal Perfect Hashing via Recursive Splitting", 2020 Proceedings of the Symposium on Algorithm Engineering and Experiments (ALENEX), Proceedings, pp. 175–185, arXiv:1910.06416, doi:10.1137/1.9781611976007.14.
  8. Jenkins, Bob (14 April 2009), "order-preserving minimal perfect hashing", in Black, Paul E. (ed.), Dictionary of Algorithms and Data Structures, U.S. National Institute of Standards and Technology, retrieved 2013-03-05
  9. Fox, Edward A.; Chen, Qi Fan; Daoud, Amjad M.; Heath, Lenwood S. (July 1991), "Order-preserving minimal perfect hash functions and information retrieval" (PDF), ACM Transactions on Information Systems, New York, NY, USA: ACM, 9 (3): 281–308, doi:10.1145/125187.125200, S2CID 53239140.
  10. Belazzougui, Djamal; Boldi, Paolo; Pagh, Rasmus; Vigna, Sebastiano (November 2008), "Theory and practice of monotone minimal perfect hashing", Journal of Experimental Algorithmics, 16, Art. no. 3.2, 26pp, doi:10.1145/1963190.2025378, S2CID 2367401.
  11. Assadi, Sepehr; Farach-Colton, Martín; Kuszmaul, William (January 2023), "Tight Bounds for Monotone Minimal Perfect Hashing", Proceedings of the 2023 Annual ACM-SIAM Symposium on Discrete Algorithms (SODA), Philadelphia, PA: Society for Industrial and Applied Mathematics, pp. 456–476, ISBN 978-1-61197-755-4, retrieved 2023-04-27
  12. 12.0 12.1 Timothy A. Davis. "Chapter 5 Hashing": subsection "Hash Tables with Worst-Case O(1) Access"
  13. Pagh, Rasmus; Rodler, Flemming Friche (2004), "Cuckoo hashing", Journal of Algorithms, 51 (2): 122–144, doi:10.1016/j.jalgor.2003.12.002, MR 2050140.


अग्रिम पठन


बाहरी संबंध

  • gperf is an Open Source C and C++ perfect hash generator (very fast, but only works for small sets)
  • Minimal Perfect Hashing (bob algorithm) by Bob Jenkins
  • cmph: C Minimal Perfect Hashing Library, open source implementations for many (minimal) perfect hashes (works for big sets)
  • Sux4J: open source monotone minimal perfect hashing in Java
  • MPHSharp: perfect hashing methods in C#
  • BBHash: minimal perfect hash function in header-only C++
  • Perfect::Hash, perfect hash generator in Perl that makes C code. Has a "prior art" section worth looking at.