डायनामिक परफेक्ट हैशिंग: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Programming technique for resolving duplicate hash values in a hash table data structure}} | {{Short description|Programming technique for resolving duplicate hash values in a hash table data structure}} | ||
[[कंप्यूटर विज्ञान]] में, '''डायनामिक परफेक्ट हैशिंग''' [[ हैश तालिका |हैश | [[कंप्यूटर विज्ञान]] में, '''डायनामिक परफेक्ट हैशिंग''' [[ हैश तालिका |हैश टेबल]] [[डेटा संरचना|डेटा स्ट्रक्चर]] में कलिसिएंस को समाधान करने के लिए प्रोग्रामिंग तकनीक है।<ref name="inventor">Fredman, M. L., Komlós, J., and Szemerédi, E. 1984. Storing a Sparse Table with 0(1) Worst Case Access Time. J. ACM 31, 3 (Jun. 1984), 538-544 http://portal.acm.org/citation.cfm?id=1884#</ref><ref name="dietzfelbinger">Dietzfelbinger, M., Karlin, A., Mehlhorn, K., Meyer auf der Heide, F., Rohnert, H., and Tarjan, R. E. 1994. | ||
[http://www.arl.wustl.edu/~sailesh/download_files/Limited_Edition/hash/Dynamic%20Perfect%20Hashing-%20Upper%20and%20Lower%20Bounds.pdf "Dynamic Perfect Hashing: Upper and Lower Bounds"] {{Webarchive|url=https://web.archive.org/web/20160304094014/http://www.arl.wustl.edu/~sailesh/download_files/Limited_Edition/hash/Dynamic%20Perfect%20Hashing-%20Upper%20and%20Lower%20Bounds.pdf |date=2016-03-04 }}. | [http://www.arl.wustl.edu/~sailesh/download_files/Limited_Edition/hash/Dynamic%20Perfect%20Hashing-%20Upper%20and%20Lower%20Bounds.pdf "Dynamic Perfect Hashing: Upper and Lower Bounds"] {{Webarchive|url=https://web.archive.org/web/20160304094014/http://www.arl.wustl.edu/~sailesh/download_files/Limited_Edition/hash/Dynamic%20Perfect%20Hashing-%20Upper%20and%20Lower%20Bounds.pdf |date=2016-03-04 }}. | ||
SIAM J. Comput. 23, 4 (Aug. 1994), 738-761. | SIAM J. Comput. 23, 4 (Aug. 1994), 738-761. | ||
Line 8: | Line 8: | ||
[http://courses.csail.mit.edu/6.897/spring03/scribe_notes/L2/lecture2.pdf 6.897: Advanced Data Structures]. | [http://courses.csail.mit.edu/6.897/spring03/scribe_notes/L2/lecture2.pdf 6.897: Advanced Data Structures]. | ||
MIT Computer Science and Artificial Intelligence Laboratory. Spring 2003. | MIT Computer Science and Artificial Intelligence Laboratory. Spring 2003. | ||
</ref>जबकि इसके हैश टेबल समकक्षों की तुलना में अधिक मेमोरी- | </ref>जबकि इसके हैश टेबल समकक्षों की तुलना में अधिक मेमोरी-इंटेंसिव है, यह तकनीक उन स्थितियों के लिए उपयोगी है जहां एलिमेंट्स के बड़े समूह पर फ़ास्ट क्वेरी, इनसेरशंस और डिलीटेशन किया जाना चाहिए। | ||
==विवरण== | ==विवरण== | ||
Line 17: | Line 17: | ||
{{main |स्टेटिक हैशिंग#एफकेएस हैशिंग}} | {{main |स्टेटिक हैशिंग#एफकेएस हैशिंग}} | ||
इष्टतम [[स्थैतिक हैशिंग]] की समस्या को सबसे पहले सामान्यतः फ्रेडमैन, कोमलोस और ज़ेमेरेडी द्वारा समाधान किया गया था।<ref>{{cite web|last1=Yap|first1=Chee|title=एफकेएस योजना के लिए सार्वभौमिक निर्माण|url=ftp://cs.nyu.edu/pub/local/yap/cg/hashFKS.ps.gz|website=New York University|publisher=New York University|accessdate=15 February 2015}}{{dead link|date=September 2017 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> उनके 1984 के पेपर में,<ref name="inventor"/>वे दो-स्तरीय हैश | इष्टतम [[स्थैतिक हैशिंग]] की समस्या को सबसे पहले सामान्यतः फ्रेडमैन, कोमलोस और ज़ेमेरेडी द्वारा समाधान किया गया था।<ref>{{cite web|last1=Yap|first1=Chee|title=एफकेएस योजना के लिए सार्वभौमिक निर्माण|url=ftp://cs.nyu.edu/pub/local/yap/cg/hashFKS.ps.gz|website=New York University|publisher=New York University|accessdate=15 February 2015}}{{dead link|date=September 2017 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> उनके 1984 के पेपर में,<ref name="inventor"/>वे दो-स्तरीय हैश टेबल योजना का विवरण देते हैं जिसमें (प्रथम-स्तर) हैश टेबल की प्रत्येक बकेट विभिन्न दूसरे-स्तरीय हैश टेबल से युग्मित होती है। कीस दो बार हैश की जाती हैं—प्रथम हैश मान प्रथम-स्तरीय हैश टेबल में निश्चित बकेट में मैप होता है; दूसरा हैश मान उस बकेट की दूसरी-स्तरीय हैश टेबल में उस प्रविष्टि की स्थिति बताता है। दूसरे स्तर की टेबल के निर्माण पर कलिसिएंस-फ्री (अर्थात सही हैशिंग) होने का आश्वासन है। परिणाम स्वरुप, सबसे व्यर्थ स्थिति में लुक-अप कास्ट [[बड़ा ओ अंकन|O(1)]] होने का आश्वासन है।<ref name="dietzfelbinger"/> | ||
स्थैतिक स्तिथि में, हमें समय से पहले, कुल {{mvar|x}} प्रविष्टियों के साथ सेट दिया जाता है, प्रत्येक में अद्वितीय कुंजी होती है। फ़्रेडमैन, कोमलोस और ज़ेमेरेडी आकार के साथ प्रथम-स्तरीय हैश | स्थैतिक स्तिथि में, हमें समय से पहले, कुल {{mvar|x}} प्रविष्टियों के साथ सेट दिया जाता है, प्रत्येक में अद्वितीय कुंजी होती है। फ़्रेडमैन, कोमलोस और ज़ेमेरेडी आकार के साथ प्रथम-स्तरीय हैश टेबल का चयन <math>s = 2(x-1)</math> करते हैं।<ref name="dietzfelbinger"/> | ||
निर्माण के लिए, {{mvar|x}} प्रविष्टियों को शीर्ष-स्तरीय हैशिंग फ़ंक्शन द्वारा {{mvar|s}} बकेट में भिन्न किया जाता है, जहाँ <math>s = 2(x-1)</math> फिर {{mvar|k}} प्रविष्टियों वाली प्रत्येक बकेट के लिए, एक दूसरे स्तर की | निर्माण के लिए, {{mvar|x}} प्रविष्टियों को शीर्ष-स्तरीय हैशिंग फ़ंक्शन द्वारा {{mvar|s}} बकेट में भिन्न किया जाता है, जहाँ <math>s = 2(x-1)</math> फिर {{mvar|k}} प्रविष्टियों वाली प्रत्येक बकेट के लिए, एक दूसरे स्तर की टेबल आवंटित की जाती है <math>k^2</math> स्लॉट, और इसके [[हैश फंकशन]] को सार्वभौमिक हैश फ़ंक्शन सेट से यादृच्छिक रूप से चयन किया जाता है जिससे यह कलिसिएंस-मुक्त हो (अर्थात [[उत्तम हैश फ़ंक्शन|परफेक्ट हैश फ़ंक्शन]]) और हैश टेबल के साथ संग्रहीत हो। यदि यादृच्छिक रूप से चयनित [[यूनिवर्सल हैश फ़ंक्शन]] कलिसिएंस-मुक्त टेबल का आश्वासन होने तक नया हैश फ़ंक्शन यादृच्छिक रूप से चयन किया जाता है। अंत में, कलिसिएंस-मुक्त हैश के साथ, {{mvar|k}} प्रविष्टियों को दूसरे स्तर की टेबल में हैश किया जाता है। | ||
द्विघात आकार <math>k^2</math> स्पेस यह सुनिश्चित करता है कि | द्विघात आकार <math>k^2</math> स्पेस यह सुनिश्चित करता है कि कलिसिएंस के साथ अव्यवस्थित रूप से टेबल बनाना दुर्लभ है और {{mvar|k}}, के आकार से स्वतंत्र है, जो रैखिक परिशोधन निर्माण समय प्रदान करता है। यद्यपि प्रत्येक दूसरे स्तर की टेबल में द्विघात स्थान की आवश्यकता होती है, यदि प्रथम स्तर की हैश टेबल में उत्पन्न की गई कीस समान रूप से वितरित की जाती हैं, तो समग्र रूप से स्ट्रक्चर अपेक्षित स्थान लेती है <math>O(n)</math> स्थान, चूंकि बकेट का आकार छोटा है और इसकी [[संभावना]] अधिक है।<ref name="inventor"/> | ||
प्रथम-स्तरीय हैश फ़ंक्शन को विशेष रूप से चयन किया जाता है, जिससे {{mvar|x}} अद्वितीय कुंजी मानों के विशिष्ट सेट के लिए, सभी दूसरे-स्तरीय हैश | प्रथम-स्तरीय हैश फ़ंक्शन को विशेष रूप से चयन किया जाता है, जिससे {{mvar|x}} अद्वितीय कुंजी मानों के विशिष्ट सेट के लिए, सभी दूसरे-स्तरीय हैश टेबलओं द्वारा उपयोग की जाने वाली कुल स्थान {{mvar|T}} अपेक्षित हो <math>O(n)</math> स्थान, और अधिक विशेष रूप से <math>T < s + 4 \cdot x</math> फ्रेडमैन, कोमलोस और ज़ेमेरेडी ने दिखाया कि हैश फ़ंक्शंस के [[सार्वभौमिक हैशिंग]] सदस्य को देखते हुए, उनमें से कम से कम अर्ध फ़ंक्शंस में वह गुण होता है।<ref name="dietzfelbinger"/> | ||
'''डायनामिक केस''' | '''डायनामिक केस''' | ||
Line 31: | Line 31: | ||
डिट्ज़फेलबिंगर एट अल डायनामिक शब्दकोश एल्गोरिथ्म प्रस्तुत करते है, जब n आइटमों का सेट शब्दकोष में क्रमिक रूप से जोड़ा जाता है, तो सदस्यता क्वेरी सदैव निरंतर समय में चलती हैं और इसलिए <math>O(1)</math> सबसे व्यर्थ स्थिति में, आवश्यक कुल भंडारण है <math>O(n)</math> (रैखिक), और <math>O(1)</math> अपेक्षित परिशोधन सम्मिलन और विलोपन समय (परिशोधन स्थिर समय) है। | डिट्ज़फेलबिंगर एट अल डायनामिक शब्दकोश एल्गोरिथ्म प्रस्तुत करते है, जब n आइटमों का सेट शब्दकोष में क्रमिक रूप से जोड़ा जाता है, तो सदस्यता क्वेरी सदैव निरंतर समय में चलती हैं और इसलिए <math>O(1)</math> सबसे व्यर्थ स्थिति में, आवश्यक कुल भंडारण है <math>O(n)</math> (रैखिक), और <math>O(1)</math> अपेक्षित परिशोधन सम्मिलन और विलोपन समय (परिशोधन स्थिर समय) है। | ||
डायनामिक स्तिथि में, जब कुंजी को हैश | डायनामिक स्तिथि में, जब कुंजी को हैश टेबल में डाला जाता है, यदि उसके संबंधित उप-टेबल में उसकी प्रविष्टि पर प्रभुत्व कर लिया जाता है, तो कलिसिएंस होता है और उप-टेबल को उसकी नई कुल प्रविष्टि की गणना करना और यादृच्छिक रूप से चयनित हैश फ़ंक्शन के आधार पर फिर से बनाया जाता है। क्योंकि द्वितीय स्तर के टेबल का लोड फैक्टर कम रखा जाता है <math>1/k</math>, पुनर्निर्माण दुर्लभ है, और सम्मिलन की [[परिशोधन विश्लेषण]] अपेक्षित कास्ट है <math>O(1)</math><ref name="dietzfelbinger"/>इसी प्रकार, विलोपन की परिशोधित अपेक्षित कास्ट है।<ref name="dietzfelbinger"/> | ||
इसके अतिरिक्त, डायनामिक स्तिथि में शीर्ष-स्तरीय | इसके अतिरिक्त, डायनामिक स्तिथि में शीर्ष-स्तरीय टेबल या किसी उप-सारणी का अंतिम आकार अज्ञात है। आशा बनाए रखने की विधि <math>O(n)</math> स्थान पर्याप्त संख्या में सम्मिलन और विलोपन होने पर पूर्ण पुनर्निर्माण का संकेत देता है। डाइट्ज़फेलबिंगर एट अल के परिणामों के आधार पर,<ref name="dietzfelbinger"/>जब तक सम्मिलन या विलोपन की कुल संख्या पिछले निर्माण के समय एलिमेंट्स की संख्या से अधिक हो जाती है, तब तक सम्मिलन और विलोपन की परिशोधित अपेक्षित कास्ट बनी रहती है <math>O(1)</math> पूर्ण पुनर्रचना को ध्यान में रखते है। | ||
डाइट्ज़फेलबिंगर एट अल द्वारा डायनामिक परफेक्ट हैशिंग का कार्यान्वयन है। इन अवधारणाओं का उपयोग करता है, साथ ही [[आलसी विलोपन|लेज़ी विलोपन]] भी करता है, और नीचे छद्म कोड में दिखाया गया है। | डाइट्ज़फेलबिंगर एट अल द्वारा डायनामिक परफेक्ट हैशिंग का कार्यान्वयन है। इन अवधारणाओं का उपयोग करता है, साथ ही [[आलसी विलोपन|लेज़ी विलोपन]] भी करता है, और नीचे छद्म कोड में दिखाया गया है। | ||
Line 57: | Line 57: | ||
यदि x, j पर उपस्थित है, किन्तु विस्थापित किये गए के रूप में चिह्नित है, तो प्रतीक विस्थापित कर दिया जाता है। | यदि x, j पर उपस्थित है, किन्तु विस्थापित किये गए के रूप में चिह्नित है, तो प्रतीक विस्थापित कर दिया जाता है। | ||
यदि x, j या उपसारणी T<sub>j</sub> पर उपस्थित है, और विस्थापित किये गए के रूप में चिह्नित नहीं किया गया है, तो कहा जाता है कि | यदि x, j या उपसारणी T<sub>j</sub> पर उपस्थित है, और विस्थापित किये गए के रूप में चिह्नित नहीं किया गया है, तो कहा जाता है कि कलिसिएंस होता है और ''j''<sup>th</sup> बकेट की दूसरी-स्तरीय टेबल T<sub>j</sub> को भिन्न यादृच्छिक रूप से चयनित हैश फ़ंक्शन ''h<sub>j</sub>'' के साथ फिर से बनाया गया है। | ||
'''function''' Insert(''x'') '''is''' | '''function''' Insert(''x'') '''is''' | ||
Line 114: | Line 114: | ||
=== डिलीट === | === डिलीट === | ||
x का विलोपन केवल x को डिलीट किये बिना और वेतन वृद्धि की गिनती के रूप में चिह्नित करता है। सम्मिलन और विलोपन दोनों की स्तिथि में, यदि गिनती सीमा M तक पहुंचती है तो पूर्ण | x का विलोपन केवल x को डिलीट किये बिना और वेतन वृद्धि की गिनती के रूप में चिह्नित करता है। सम्मिलन और विलोपन दोनों की स्तिथि में, यदि गिनती सीमा M तक पहुंचती है तो पूर्ण टेबल फिर से बनाई जाती है, जहां M नए चरण के प्रारंभ में S के आकार का कुछ स्थिर गुणक है। यहां चरण का तात्पर्य पूर्ण पुनर्निर्माण के मध्य के समय से है। ध्यान दें कि यहां Delete(x) में -1 ऐसे तत्व का प्रतिनिधित्व है जो सभी संभावित एलिमेंट्स U के सेट में नहीं है। | ||
'''function''' Delete(''x'') '''is''' | '''function''' Delete(''x'') '''is''' | ||
Line 132: | Line 132: | ||
=== पूर्ण पुनर्निर्माण === | === पूर्ण पुनर्निर्माण === | ||
S की | S की टेबल का पूर्ण पुनर्निर्माण सबसे पहले विस्थापित किये गए के रूप में चिह्नित सभी एलिमेंट्स को विस्थापित करके प्रारंभ होता है और फिर अगले थ्रेशोल्ड मान M को S के आकार के कुछ स्थिर गुणक पर सेट करता है। हैश फ़ंक्शन, जो S को s(M) उपसमुच्चय में विभाजित करता है, जहां उपसमुच्चय j का आकार s<sub>j</sub> है, इसे तब तक बार-बार यादृच्छिक रूप से चयन किया जाता है: | ||
<math>\sum_{0\le j\le s(M)} s_j \le \frac{32M^2}{s(M)} + 4M.</math> | <math>\sum_{0\le j\le s(M)} s_j \le \frac{32M^2}{s(M)} + 4M.</math> | ||
अंत में, प्रत्येक उपसारणी T<sub>j</sub> के लिए हैश फ़ंक्शन H<sub>j</sub> को ''H<sub>sj</sub>'' से बार-बार यादृच्छिक रूप से चयन किया जाता है जब तक ''h<sub>j</sub>'' ,''T<sub>j</sub>'' के तत्वों पर प्रवेश न हो जाए। आकार n के साथ S की | अंत में, प्रत्येक उपसारणी T<sub>j</sub> के लिए हैश फ़ंक्शन H<sub>j</sub> को ''H<sub>sj</sub>'' से बार-बार यादृच्छिक रूप से चयन किया जाता है जब तक ''h<sub>j</sub>'' ,''T<sub>j</sub>'' के तत्वों पर प्रवेश न हो जाए। आकार n के साथ S की टेबल के पूर्ण पुनर्निर्माण के लिए अपेक्षित समय O(n) है।<ref name="dietzfelbinger" /> | ||
'''function''' FullRehash(''x'') '''is''' | '''function''' FullRehash(''x'') '''is''' | ||
Put all unmarked elements of ''T'' in list ''L''; | Put all unmarked elements of ''T'' in list ''L''; |
Revision as of 21:07, 20 July 2023
कंप्यूटर विज्ञान में, डायनामिक परफेक्ट हैशिंग हैश टेबल डेटा स्ट्रक्चर में कलिसिएंस को समाधान करने के लिए प्रोग्रामिंग तकनीक है।[1][2][3]जबकि इसके हैश टेबल समकक्षों की तुलना में अधिक मेमोरी-इंटेंसिव है, यह तकनीक उन स्थितियों के लिए उपयोगी है जहां एलिमेंट्स के बड़े समूह पर फ़ास्ट क्वेरी, इनसेरशंस और डिलीटेशन किया जाना चाहिए।
विवरण
स्थैतिक केस
एफकेएस योजना
इष्टतम स्थैतिक हैशिंग की समस्या को सबसे पहले सामान्यतः फ्रेडमैन, कोमलोस और ज़ेमेरेडी द्वारा समाधान किया गया था।[4] उनके 1984 के पेपर में,[1]वे दो-स्तरीय हैश टेबल योजना का विवरण देते हैं जिसमें (प्रथम-स्तर) हैश टेबल की प्रत्येक बकेट विभिन्न दूसरे-स्तरीय हैश टेबल से युग्मित होती है। कीस दो बार हैश की जाती हैं—प्रथम हैश मान प्रथम-स्तरीय हैश टेबल में निश्चित बकेट में मैप होता है; दूसरा हैश मान उस बकेट की दूसरी-स्तरीय हैश टेबल में उस प्रविष्टि की स्थिति बताता है। दूसरे स्तर की टेबल के निर्माण पर कलिसिएंस-फ्री (अर्थात सही हैशिंग) होने का आश्वासन है। परिणाम स्वरुप, सबसे व्यर्थ स्थिति में लुक-अप कास्ट O(1) होने का आश्वासन है।[2]
स्थैतिक स्तिथि में, हमें समय से पहले, कुल x प्रविष्टियों के साथ सेट दिया जाता है, प्रत्येक में अद्वितीय कुंजी होती है। फ़्रेडमैन, कोमलोस और ज़ेमेरेडी आकार के साथ प्रथम-स्तरीय हैश टेबल का चयन करते हैं।[2]
निर्माण के लिए, x प्रविष्टियों को शीर्ष-स्तरीय हैशिंग फ़ंक्शन द्वारा s बकेट में भिन्न किया जाता है, जहाँ फिर k प्रविष्टियों वाली प्रत्येक बकेट के लिए, एक दूसरे स्तर की टेबल आवंटित की जाती है स्लॉट, और इसके हैश फंकशन को सार्वभौमिक हैश फ़ंक्शन सेट से यादृच्छिक रूप से चयन किया जाता है जिससे यह कलिसिएंस-मुक्त हो (अर्थात परफेक्ट हैश फ़ंक्शन) और हैश टेबल के साथ संग्रहीत हो। यदि यादृच्छिक रूप से चयनित यूनिवर्सल हैश फ़ंक्शन कलिसिएंस-मुक्त टेबल का आश्वासन होने तक नया हैश फ़ंक्शन यादृच्छिक रूप से चयन किया जाता है। अंत में, कलिसिएंस-मुक्त हैश के साथ, k प्रविष्टियों को दूसरे स्तर की टेबल में हैश किया जाता है।
द्विघात आकार स्पेस यह सुनिश्चित करता है कि कलिसिएंस के साथ अव्यवस्थित रूप से टेबल बनाना दुर्लभ है और k, के आकार से स्वतंत्र है, जो रैखिक परिशोधन निर्माण समय प्रदान करता है। यद्यपि प्रत्येक दूसरे स्तर की टेबल में द्विघात स्थान की आवश्यकता होती है, यदि प्रथम स्तर की हैश टेबल में उत्पन्न की गई कीस समान रूप से वितरित की जाती हैं, तो समग्र रूप से स्ट्रक्चर अपेक्षित स्थान लेती है स्थान, चूंकि बकेट का आकार छोटा है और इसकी संभावना अधिक है।[1]
प्रथम-स्तरीय हैश फ़ंक्शन को विशेष रूप से चयन किया जाता है, जिससे x अद्वितीय कुंजी मानों के विशिष्ट सेट के लिए, सभी दूसरे-स्तरीय हैश टेबलओं द्वारा उपयोग की जाने वाली कुल स्थान T अपेक्षित हो स्थान, और अधिक विशेष रूप से फ्रेडमैन, कोमलोस और ज़ेमेरेडी ने दिखाया कि हैश फ़ंक्शंस के सार्वभौमिक हैशिंग सदस्य को देखते हुए, उनमें से कम से कम अर्ध फ़ंक्शंस में वह गुण होता है।[2]
डायनामिक केस
डिट्ज़फेलबिंगर एट अल डायनामिक शब्दकोश एल्गोरिथ्म प्रस्तुत करते है, जब n आइटमों का सेट शब्दकोष में क्रमिक रूप से जोड़ा जाता है, तो सदस्यता क्वेरी सदैव निरंतर समय में चलती हैं और इसलिए सबसे व्यर्थ स्थिति में, आवश्यक कुल भंडारण है (रैखिक), और अपेक्षित परिशोधन सम्मिलन और विलोपन समय (परिशोधन स्थिर समय) है।
डायनामिक स्तिथि में, जब कुंजी को हैश टेबल में डाला जाता है, यदि उसके संबंधित उप-टेबल में उसकी प्रविष्टि पर प्रभुत्व कर लिया जाता है, तो कलिसिएंस होता है और उप-टेबल को उसकी नई कुल प्रविष्टि की गणना करना और यादृच्छिक रूप से चयनित हैश फ़ंक्शन के आधार पर फिर से बनाया जाता है। क्योंकि द्वितीय स्तर के टेबल का लोड फैक्टर कम रखा जाता है , पुनर्निर्माण दुर्लभ है, और सम्मिलन की परिशोधन विश्लेषण अपेक्षित कास्ट है [2]इसी प्रकार, विलोपन की परिशोधित अपेक्षित कास्ट है।[2]
इसके अतिरिक्त, डायनामिक स्तिथि में शीर्ष-स्तरीय टेबल या किसी उप-सारणी का अंतिम आकार अज्ञात है। आशा बनाए रखने की विधि स्थान पर्याप्त संख्या में सम्मिलन और विलोपन होने पर पूर्ण पुनर्निर्माण का संकेत देता है। डाइट्ज़फेलबिंगर एट अल के परिणामों के आधार पर,[2]जब तक सम्मिलन या विलोपन की कुल संख्या पिछले निर्माण के समय एलिमेंट्स की संख्या से अधिक हो जाती है, तब तक सम्मिलन और विलोपन की परिशोधित अपेक्षित कास्ट बनी रहती है पूर्ण पुनर्रचना को ध्यान में रखते है।
डाइट्ज़फेलबिंगर एट अल द्वारा डायनामिक परफेक्ट हैशिंग का कार्यान्वयन है। इन अवधारणाओं का उपयोग करता है, साथ ही लेज़ी विलोपन भी करता है, और नीचे छद्म कोड में दिखाया गया है।
स्यूडोकोड कार्यान्वयन
लोकेट
function Locate(x) is j := h(x) if (position hj(x) of subtable Tj contains x (not deleted)) return (x is in S) end if else return (x is not in S) end else end
इन्सर्ट
j पर नई प्रविष्टि x को सम्मिलित करने के समय, वैश्विक संचालन काउंटर, गिनती, बढ़ जाती है।
यदि x, j पर उपस्थित है, किन्तु विस्थापित किये गए के रूप में चिह्नित है, तो प्रतीक विस्थापित कर दिया जाता है।
यदि x, j या उपसारणी Tj पर उपस्थित है, और विस्थापित किये गए के रूप में चिह्नित नहीं किया गया है, तो कहा जाता है कि कलिसिएंस होता है और jth बकेट की दूसरी-स्तरीय टेबल Tj को भिन्न यादृच्छिक रूप से चयनित हैश फ़ंक्शन hj के साथ फिर से बनाया गया है।
function Insert(x) is count = count + 1; if (count > M) FullRehash(x); end if else j = h(x); if (Position hj(x) of subtable Tj contains x) if (x is marked deleted) remove the delete marker; end if end if else bj = bj + 1; if (bj <= mj) if position hj(x) of Tj is empty store x in position hj(x) of Tj; end if else Put all unmarked elements of Tj in list Lj; Append x to list Lj; bj = length of Lj; repeat hj = randomly chosen function in Hsj; until hj is injective on the elements of Lj; for all y on list Lj store y in position hj(y) of Tj; end for end else end if else mj = 2 * max{1, mj}; sj = 2 * mj * (mj - 1); if the sum total of all sj ≤ 32 * M2 / s(M) + 4 * M Allocate sj cells for Tj; Put all unmarked elements of Tj in list Lj; Append x to list Lj; bj = length of Lj; repeat hj = randomly chosen function in Hsj; until hj is injective on the elements of Lj; for all y on list Lj store y in position hj(y) of Tj; end for end if
else FullRehash(x); end else end else end else end else end
डिलीट
x का विलोपन केवल x को डिलीट किये बिना और वेतन वृद्धि की गिनती के रूप में चिह्नित करता है। सम्मिलन और विलोपन दोनों की स्तिथि में, यदि गिनती सीमा M तक पहुंचती है तो पूर्ण टेबल फिर से बनाई जाती है, जहां M नए चरण के प्रारंभ में S के आकार का कुछ स्थिर गुणक है। यहां चरण का तात्पर्य पूर्ण पुनर्निर्माण के मध्य के समय से है। ध्यान दें कि यहां Delete(x) में -1 ऐसे तत्व का प्रतिनिधित्व है जो सभी संभावित एलिमेंट्स U के सेट में नहीं है।
function Delete(x) is count = count + 1;
j = h(x); if position hj(x) of subtable Tj contains x mark x as deleted; end if else return (x is not a member of S); end else if (count >= M) FullRehash(-1); end if end
पूर्ण पुनर्निर्माण
S की टेबल का पूर्ण पुनर्निर्माण सबसे पहले विस्थापित किये गए के रूप में चिह्नित सभी एलिमेंट्स को विस्थापित करके प्रारंभ होता है और फिर अगले थ्रेशोल्ड मान M को S के आकार के कुछ स्थिर गुणक पर सेट करता है। हैश फ़ंक्शन, जो S को s(M) उपसमुच्चय में विभाजित करता है, जहां उपसमुच्चय j का आकार sj है, इसे तब तक बार-बार यादृच्छिक रूप से चयन किया जाता है:
अंत में, प्रत्येक उपसारणी Tj के लिए हैश फ़ंक्शन Hj को Hsj से बार-बार यादृच्छिक रूप से चयन किया जाता है जब तक hj ,Tj के तत्वों पर प्रवेश न हो जाए। आकार n के साथ S की टेबल के पूर्ण पुनर्निर्माण के लिए अपेक्षित समय O(n) है।[2]
function FullRehash(x) is Put all unmarked elements of T in list L; if (x is in U) append x to L; end if count = length of list L; M = (1 + c) * max{count, 4}; repeat h = randomly chosen function in Hs(M); for all j < s(M) form a list Lj for h(x) = j; bj = length of Lj; mj = 2 * bj; sj = 2 * mj * (mj - 1); end for until the sum total of all sj ≤ 32 * M2 / s(M) + 4 * M for all j < s(M) Allocate space sj for subtable Tj; repeat hj = randomly chosen function in Hsj; until hj is injective on the elements of list Lj; end for for all x on list Lj store x in position hj(x) of Tj;
end for
end
यह भी देखें
- परफेक्ट हैशिंग
संदर्भ
- ↑ 1.0 1.1 1.2 Fredman, M. L., Komlós, J., and Szemerédi, E. 1984. Storing a Sparse Table with 0(1) Worst Case Access Time. J. ACM 31, 3 (Jun. 1984), 538-544 http://portal.acm.org/citation.cfm?id=1884#
- ↑ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 Dietzfelbinger, M., Karlin, A., Mehlhorn, K., Meyer auf der Heide, F., Rohnert, H., and Tarjan, R. E. 1994. "Dynamic Perfect Hashing: Upper and Lower Bounds" Archived 2016-03-04 at the Wayback Machine. SIAM J. Comput. 23, 4 (Aug. 1994), 738-761. http://portal.acm.org/citation.cfm?id=182370 doi:10.1137/S0097539791194094
- ↑ Erik Demaine, Jeff Lind. 6.897: Advanced Data Structures. MIT Computer Science and Artificial Intelligence Laboratory. Spring 2003.
- ↑ Yap, Chee. "एफकेएस योजना के लिए सार्वभौमिक निर्माण". New York University. New York University. Retrieved 15 February 2015.[permanent dead link]