डायनामिक परफेक्ट हैशिंग

कंप्यूटर विज्ञान में, डायनेमिक परफेक्ट हैशिंग हैश तालिका डेटा संरचना में विखंडन को समाधान करने के लिए प्रोग्रामिंग तकनीक है। जबकि इसके हैश टेबल समकक्षों की तुलना में अधिक मेमोरी-सघन है, यह तकनीक उन स्थितियों के लिए उपयोगी है जहां एलिमेंट्स के बड़े समूह पर तीव्र क्वेरी, सम्मिलन और विलोपन किया जाना चाहिए।

एफकेएस योजना
इष्टतम स्थैतिक हैशिंग की समस्या को सबसे पसमाधाने सामान्यतः फ्रेडमैन, कोमलोस और ज़ेमेरेडी द्वारा समाधान किया गया था। उनके 1984 के पेपर में, वे दो-स्तरीय हैश तालिका योजना का विवरण देते हैं जिसमें (प्रथम-स्तर) हैश तालिका की प्रत्येक बकेट विभिन्न दूसरे-स्तरीय हैश तालिका से युग्मित होती है। कुंजियाँ दो बार हैश की जाती हैं—प्रथम हैश मान प्रथम-स्तरीय हैश तालिका में निश्चित बकेट में मैप होता है; दूसरा हैश मान उस बकेट की दूसरी-स्तरीय हैश तालिका में उस प्रविष्टि की स्थिति बताता है। दूसरे स्तर की तालिका के निर्माण पर विखंडन-मुक्त (अर्थात सही हैशिंग) होने का आश्वासन है। परिणाम स्वरुप, सबसे व्यर्थ स्थिति में लुक-अप व्यय O(1) होने का आश्वासन है।

स्थैतिक स्तिथि में, हमें समय से पहले, कुल $x$ प्रविष्टियों के साथ सेट दिया जाता है, प्रत्येक में अद्वितीय कुंजी होती है। फ़्रेडमैन, कोमलोस और ज़ेमेरेडी आकार के साथ प्रथम-स्तरीय हैश तालिका का चयन $$s = 2(x-1)$$ करते हैं।

निर्माण के लिए, $x$ प्रविष्टियों को शीर्ष-स्तरीय हैशिंग फ़ंक्शन द्वारा $s$ बकेट में भिन्न किया जाता है, जहाँ $$s = 2(x-1)$$ फिर $k$ प्रविष्टियों वाली प्रत्येक बकेट के लिए, एक दूसरे स्तर की तालिका आवंटित की जाती है $$k^2$$स्लॉट, और इसके हैश फंकशन को सार्वभौमिक हैश फ़ंक्शन सेट से यादृच्छिक रूप से चयन किया जाता है जिससे यह विखंडन-मुक्त हो (अर्थात उत्तम हैश फ़ंक्शन) और हैश तालिका के साथ संग्रहीत हो। यदि यादृच्छिक रूप से चयनित यूनिवर्सल हैश फ़ंक्शन विखंडन-मुक्त तालिका का आश्वासन होने तक नया हैश फ़ंक्शन यादृच्छिक रूप से चयन किया जाता है। अंत में, विखंडन-मुक्त हैश के साथ, $k$ प्रविष्टियों को दूसरे स्तर की तालिका में हैश किया जाता है।

द्विघात आकार $$k^2$$ स्पेस यह सुनिश्चित करता है कि विखंडन के साथ अव्यवस्थित रूप से तालिका बनाना दुर्लभ है और $k$, के आकार से स्वतंत्र है, जो रैखिक परिशोधन निर्माण समय प्रदान करता है। यद्यपि प्रत्येक दूसरे स्तर की तालिका में द्विघात स्थान की आवश्यकता होती है, यदि प्रथम स्तर की हैश तालिका में डाली गई कुंजियाँ समान रूप से वितरित की जाती हैं, तो समग्र रूप से संरचना अपेक्षित स्थान लेती है $$O(n)$$ स्थान, चूंकि बकेट का आकार छोटा है और इसकी संभावना अधिक है।

प्रथम-स्तरीय हैश फ़ंक्शन को विशेष रूप से चयन किया जाता है, जिससे $x$ अद्वितीय कुंजी मानों के विशिष्ट सेट के लिए, सभी दूसरे-स्तरीय हैश तालिकाओं द्वारा उपयोग की जाने वाली कुल स्थान $T$ अपेक्षित हो $$O(n)$$ स्थान, और अधिक विशेष रूप से $$T < s + 4 \cdot x$$ फ्रेडमैन, कोमलोस और ज़ेमेरेडी ने दिखाया कि हैश फ़ंक्शंस के एक सार्वभौमिक हैशिंग सार्वभौमिक हैशिंग सदस्य को देखते हुए, उनमें से कम से कम आधे फ़ंक्शंस में वह गुण होती है।

गतिशील केस

डिट्ज़फेलबिंगर एट अल गतिशील शब्दकोश एल्गोरिथ्म प्रस्तुत करें, जब n आइटमों का सेट शब्दकोष में क्रमिक रूप से जोड़ा जाता है, तो सदस्यता क्वेरी सदैव निरंतर समय में चलती हैं और इसलिए $$O(1)$$ सबसे व्यर्थ स्थिति में, आवश्यक कुल भंडारण है $$O(n)$$ (रैखिक), और $$O(1)$$ अपेक्षित परिशोधन सम्मिलन और विलोपन समय (परिशोधन स्थिर समय) है।

गतिशील स्तिथि में, जब कुंजी को हैश तालिका में डाला जाता है, यदि उसके संबंधित उप-तालिका में उसकी प्रविष्टि पर प्रभुत्व कर लिया जाता है, तो विखंडन होता है और उप-तालिका को उसकी नई कुल प्रविष्टि गणना और यादृच्छिक रूप से चयनित हैश फ़ंक्शन के आधार पर फिर से बनाया जाता है। क्योंकि द्वितीय स्तर के टेबल का लोड फैक्टर कम रखा जाता है $$1/k$$, पुनर्निर्माण दुर्लभ है, और सम्मिलन की परिशोधन विश्लेषण अपेक्षित व्यय है सम्मिलन की अपेक्षित व्यय है $$O(1)$$. इसी प्रकार, विलोपन की परिशोधित अपेक्षित व्यय है $$O(1)$$.

इसके अतिरिक्त, गतिशील स्तिथि में शीर्ष-स्तरीय तालिका या किसी उप-सारणी का अंतिम आकार अज्ञात है। उम्मीद बनाए रखने का तरीका $$O(n)$$ पर्याप्त संख्या में सम्मिलन और विलोपन होने पर तालिका का स्थान पूर्ण पुनर्निर्माण का संकेत देता है। डाइट्ज़फेलबिंगर एट अल के परिणामों के आधार पर, जब तक सम्मिलन या विलोपन की कुल संख्या पिछले निर्माण के समय एलिमेंट्स की संख्या से अधिक हो जाती है, तब तक सम्मिलन और विलोपन की परिशोधित अपेक्षित व्यय बनी रहती है $$O(1)$$ पूरी पुनर्रचना को ध्यान में रखते हुए।

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

पता लगाएँ
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 या उपसारणी T पर मौजूद हैj, और हटाए गए के रूप में चिह्नित नहीं किया गया है, तो कहा जाता है कि टकराव होता है और जेवेंबकेट की दूसरी-स्तरीय तालिका टीj अलग यादृच्छिक रूप से चयनित हैश फ़ंक्शन एच के साथ फिर से बनाया गया हैj.

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 को हटाए बिना और वेतन वृद्धि की गिनती के रूप में चिह्नित करता है। सम्मिलन और विलोपन दोनों के स्तिथि में, यदि गिनती सीमा एम तक पहुंचती है तो पूरी तालिका फिर से बनाई जाती है, जहां एम नए चरण की शुरुआत में एस के आकार का कुछ स्थिर गुणक है। यहां चरण का तात्पर्य पूर्ण पुनर्निर्माण के बीच के समय से है। ध्यान दें कि यहां 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 का आकार s हैj, बार-बार यादृच्छिक रूप से तब तक चुना जाता है जब तक:

$$\sum_{0\le j\le s(M)} s_j \le \frac{32M^2}{s(M)} + 4M.$$ अंत में, प्रत्येक उपसारणी टी के लिएj हैश फ़ंक्शन एचjH से बार-बार यादृच्छिक रूप से चुना जाता हैsjजब तक एचjटी के एलिमेंट्स पर विशेषण हैj. आकार n के साथ S की तालिका के पूर्ण पुनर्निर्माण के लिए अपेक्षित समय O(n) है।

फ़ंक्शन FullRehash(x) है 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

यह भी देखें

 * उत्तम हैशिंग