हॉप्सकॉच हैशिंग: Difference between revisions
(Created page with "Image:hopscotch-wiki-example.gif|thumb|upright=2.5| हॉप्सकॉच हैशिंग। यहाँ, H 4 है। ग्रे प्रविष्टिया...") |
No edit summary |
||
Line 1: | Line 1: | ||
[[Image:hopscotch-wiki-example.gif|thumb|upright=2.5| हॉप्सकॉच हैशिंग। यहाँ, H 4 है। ग्रे प्रविष्टियाँ व्याप्त हैं। भाग (ए) में, आइटम x को 6 के हैश मान के साथ जोड़ा गया है। एक रैखिक जांच से पता चलता है कि प्रविष्टि 13 खाली है। चूँकि 13, 6 से 4 से अधिक प्रविष्टियाँ दूर है, एल्गोरिथ्म 13 के साथ स्वैप करने के लिए पहले वाली प्रविष्टि की तलाश करता है। देखने के लिए पहली जगह प्रविष्टि 10 पर पहले की H−1 = 3 प्रविष्टियाँ हैं। उस प्रविष्टि की हॉप जानकारी बिट-मैप इंगित करती है वह d, प्रविष्टि 11 पर आइटम, 13 पर विस्थापित किया जा सकता है। d को विस्थापित करने के बाद, प्रविष्टि 11 अभी भी प्रविष्टि 6 से बहुत दूर है, इसलिए एल्गोरिथ्म प्रविष्टि 8 की जांच करता है। हॉप सूचना बिट-मैप इंगित करता है कि प्रविष्टि 9 पर आइटम c हो सकता है अंत में, a को प्रविष्टि 9 में ले जाया जाता है। भाग (बी) x जोड़ने से ठीक पहले | [[Image:hopscotch-wiki-example.gif|thumb|upright=2.5| हॉप्सकॉच हैशिंग। यहाँ, H 4 है। ग्रे प्रविष्टियाँ व्याप्त हैं। भाग (ए) में, आइटम x को 6 के हैश मान के साथ जोड़ा गया है। एक रैखिक जांच से पता चलता है कि प्रविष्टि 13 खाली है। चूँकि 13, 6 से 4 से अधिक प्रविष्टियाँ दूर है, एल्गोरिथ्म 13 के साथ स्वैप करने के लिए पहले वाली प्रविष्टि की तलाश करता है। देखने के लिए पहली जगह प्रविष्टि 10 पर पहले की H−1 = 3 प्रविष्टियाँ हैं। उस प्रविष्टि की हॉप जानकारी बिट-मैप इंगित करती है वह d, प्रविष्टि 11 पर आइटम, 13 पर विस्थापित किया जा सकता है। d को विस्थापित करने के बाद, प्रविष्टि 11 अभी भी प्रविष्टि 6 से बहुत दूर है, इसलिए एल्गोरिथ्म प्रविष्टि 8 की जांच करता है। हॉप सूचना बिट-मैप इंगित करता है कि प्रविष्टि 9 पर आइटम c हो सकता है अंत में, a को प्रविष्टि 9 में ले जाया जाता है। भाग (बी) x जोड़ने से ठीक पहले टेबल स्थिति दिखाता है।]]हॉपस्कॉच हैशिंग [[कंप्यूटर प्रोग्रामिंग]] में ओपन एड्रेसिंग का उपयोग करके टेबल में [[हैश फंकशन]] के मूल्यों के हैश टकराव को हल करने की एक योजना है। यह [[समवर्ती हैश तालिका|समवर्ती हैश टेबल]] को कार्यान्वित करने के लिए भी उपयुक्त है। होपस्कॉच हैशिंग की शुरुआत 2008 में [[मौरिस हेर्लिही]], [[नीर शवित]] और मोरन तज़ाफिर द्वारा की गई थी।<ref>{{cite conference | ||
|last1=Herlihy |first1=Maurice | |last1=Herlihy |first1=Maurice | ||
|last2=Shavit |first2=Nir | |last2=Shavit |first2=Nir | ||
Line 8: | Line 8: | ||
|location=Arcachon, France |publisher=Springer-Verlag | |location=Arcachon, France |publisher=Springer-Verlag | ||
|url=http://mcg.cs.tau.ac.il/papers/disc2008-hopscotch.pdf | |url=http://mcg.cs.tau.ac.il/papers/disc2008-hopscotch.pdf | ||
}}</ref> यह नाम हॉप्स के अनुक्रम से लिया गया है जो | }}</ref> यह नाम हॉप्स के अनुक्रम से लिया गया है जो टेबल के सम्मिलन एल्गोरिथ्म को दर्शाता है। | ||
एल्गोरिथ्म n बकेट की एकल सरणी का उपयोग करता है। प्रत्येक | एल्गोरिथ्म n बकेट की एक एकल सरणी का उपयोग करता है। प्रत्येक बकेट के लिए, उसका पड़ोस एच लगातार बकेट का एक छोटा संग्रह है (यानी मूल हैशेड बकेट के करीब सूचकांक वाले)। पड़ोस की वांछित संपत्ति यह है कि पड़ोस की बाल्टियों में किसी वस्तु को खोजने की लागत उसे बकेट में खोजने की लागत के करीब होती है (उदाहरण के लिए, पड़ोस में बाल्टियाँ एक ही [[कैश लाइन]] के अंतर्गत आती हैं)। पड़ोस का आकार सबसे खराब स्थिति में आइटमों की लघुगणक संख्या को समायोजित करने के लिए पर्याप्त होना चाहिए (अर्थात इसमें लॉग (n) आइटम को समायोजित करना होगा), लेकिन औसतन केवल एक स्थिर संख्या। यदि किसी बकेट का पड़ोस भर जाता है, तो टेबल का आकार बदल दिया जाता है। | ||
हॉप्सकॉच हैशिंग में, [[कोयल हैशिंग]] की तरह, और [[रैखिक जांच]] के विपरीत, किसी दिए गए आइटम को हमेशा उसके हैशेड | |||
हॉप्सकॉच हैशिंग में, [[कोयल हैशिंग]] की तरह, और [[रैखिक जांच]] के विपरीत, किसी दिए गए आइटम को हमेशा उसके हैशेड बकेट के पड़ोस में डाला और पाया जाएगा। दूसरे शब्दों में, यह हमेशा या तो इसकी मूल हैशेड सरणी प्रविष्टि में, या अगली H−1 पड़ोसी प्रविष्टियों में से एक में पाया जाएगा। उदाहरण के लिए, H 32 हो सकता है, जो एक सामान्य मशीन शब्द का आकार है। इस प्रकार पड़ोस एक आभासी बकेट है जिसका आकार निश्चित है और निम्नलिखित H−1 बाल्टियों के साथ ओवरलैप होता है। खोज को गति देने के लिए, प्रत्येक बकेट (सरणी प्रविष्टि) में एक हॉप-सूचना शब्द, एक एच-बिट बिटमैप शामिल होता है जो इंगित करता है कि अगली H−1 प्रविष्टियों में से किसमें वे आइटम हैं जो वर्तमान प्रविष्टि की वर्चुअल बकेट में हैश किए गए हैं। इस तरह, किसी आइटम को शब्द को देखकर जल्दी से पाया जा सकता है कि कौन सी प्रविष्टियाँ बकेट से संबंधित हैं, और फिर प्रविष्टियों की निरंतर संख्या के माध्यम से स्कैन करना (अधिकांश आधुनिक प्रोसेसर विशेष बिट हेरफेर संचालन का समर्थन करते हैं जो हॉप में लुकअप करते हैं- सूचना बिटमैप बहुत तेज़)। | |||
यहां बकेट i में हैश किए गए आइटम x को जोड़ने का तरीका बताया गया है: | यहां बकेट i में हैश किए गए आइटम x को जोड़ने का तरीका बताया गया है: | ||
# यदि बकेट आई के लिए हॉप-सूचना शब्द दिखाता है कि इस बकेट में पहले से ही एच आइटम हैं, तो | # यदि बकेट आई के लिए हॉप-सूचना शब्द दिखाता है कि इस बकेट में पहले से ही एच आइटम हैं, तो टेबल भरी हुई है; हैश टेबल का विस्तार करें और पुनः प्रयास करें। | ||
# प्रविष्टि i से शुरू करते हुए, सूचकांक j पर एक खाली प्रविष्टि खोजने के लिए एक रैखिक जांच का उपयोग करें। (यदि कोई खाली स्लॉट मौजूद नहीं है, तो | # प्रविष्टि i से शुरू करते हुए, सूचकांक j पर एक खाली प्रविष्टि खोजने के लिए एक रैखिक जांच का उपयोग करें। (यदि कोई खाली स्लॉट मौजूद नहीं है, तो टेबल भरी हुई है।) | ||
# जबकि (j−i) mod n ≥ H, खाली स्लॉट को i की ओर इस प्रकार ले जाएं: | # जबकि (j−i) mod n ≥ H, खाली स्लॉट को i की ओर इस प्रकार ले जाएं: | ||
## किसी आइटम y के लिए j से पहले H−1 स्लॉट खोजें, जिसका हैश मान k, j के H−1 के भीतर है, यानी (j−k) mod n < H. (यह हॉप-सूचना शब्दों का उपयोग करके किया जा सकता है।) | ## किसी आइटम y के लिए j से पहले H−1 स्लॉट खोजें, जिसका हैश मान k, j के H−1 के भीतर है, यानी (j−k) mod n < H. (यह हॉप-सूचना शब्दों का उपयोग करके किया जा सकता है।) | ||
## यदि ऐसी कोई वस्तु y सीमा के भीतर मौजूद नहीं है, तो | ## यदि ऐसी कोई वस्तु y सीमा के भीतर मौजूद नहीं है, तो टेबल भरी हुई है। | ||
## y को j पर ले जाएं, i के करीब एक नया खाली स्लॉट बनाएं। | ## y को j पर ले जाएं, i के करीब एक नया खाली स्लॉट बनाएं। | ||
## j को y द्वारा खाली किए गए खाली स्लॉट पर सेट करें और दोहराएं। | ## j को y द्वारा खाली किए गए खाली स्लॉट पर सेट करें और दोहराएं। | ||
# x को स्लॉट j में स्टोर करें और वापस लौटें। | # x को स्लॉट j में स्टोर करें और वापस लौटें। | ||
विचार यह है कि हॉपस्कॉच हैशिंग खाली स्लॉट को वांछित | विचार यह है कि हॉपस्कॉच हैशिंग खाली स्लॉट को वांछित बकेट की ओर ले जाती है। यह इसे रैखिक जांच से अलग करता है जो खाली स्लॉट को छोड़ देता है जहां यह पाया गया था, संभवतः मूल बकेट से बहुत दूर, या कोयल हैशिंग से, जो एक मुफ्त बकेट बनाने के लिए, वांछित बकेट में से एक वस्तु को बाहर ले जाता है लक्ष्य सरणियाँ, और उसके बाद ही विस्थापित वस्तु को एक नया स्थान खोजने का प्रयास करता है। | ||
किसी आइटम को | किसी आइटम को टेबल से हटाने के लिए, उसे बस टेबल प्रविष्टि से हटा दिया जाता है। यदि पड़ोस की बकेट कैश संरेखित हैं, तो कोई पुनर्गठन ऑपरेशन लागू कर सकता है जिसमें संरेखण में सुधार के लिए वस्तुओं को अब खाली स्थान पर ले जाया जाता है। | ||
हॉप्सकॉच हैशिंग का एक फायदा यह है कि यह बहुत उच्च टेबल लोड कारकों पर भी अच्छा प्रदर्शन प्रदान करता है, यहां तक कि 0.9 से अधिक वाले कारकों पर भी। इस दक्षता का एक हिस्सा केवल सम्मिलन के दौरान एक खाली स्लॉट खोजने के लिए एक रैखिक जांच का उपयोग करने के कारण होता है, मूल रैखिक जांच हैश | हॉप्सकॉच हैशिंग का एक फायदा यह है कि यह बहुत उच्च टेबल लोड कारकों पर भी अच्छा प्रदर्शन प्रदान करता है, यहां तक कि 0.9 से अधिक वाले कारकों पर भी। इस दक्षता का एक हिस्सा केवल सम्मिलन के दौरान एक खाली स्लॉट खोजने के लिए एक रैखिक जांच का उपयोग करने के कारण होता है, मूल रैखिक जांच हैश टेबल एल्गोरिदम की तरह हर लुकअप के लिए नहीं। एक अन्य लाभ यह है कि कोई भी किसी भी हैश फ़ंक्शन का उपयोग कर सकता है, विशेष रूप से सरल जो सार्वभौमिक के करीब हैं। | ||
== यह भी देखें == | == यह भी देखें == |
Revision as of 14:03, 19 July 2023
हॉपस्कॉच हैशिंग कंप्यूटर प्रोग्रामिंग में ओपन एड्रेसिंग का उपयोग करके टेबल में हैश फंकशन के मूल्यों के हैश टकराव को हल करने की एक योजना है। यह समवर्ती हैश टेबल को कार्यान्वित करने के लिए भी उपयुक्त है। होपस्कॉच हैशिंग की शुरुआत 2008 में मौरिस हेर्लिही, नीर शवित और मोरन तज़ाफिर द्वारा की गई थी।[1] यह नाम हॉप्स के अनुक्रम से लिया गया है जो टेबल के सम्मिलन एल्गोरिथ्म को दर्शाता है।
एल्गोरिथ्म n बकेट की एक एकल सरणी का उपयोग करता है। प्रत्येक बकेट के लिए, उसका पड़ोस एच लगातार बकेट का एक छोटा संग्रह है (यानी मूल हैशेड बकेट के करीब सूचकांक वाले)। पड़ोस की वांछित संपत्ति यह है कि पड़ोस की बाल्टियों में किसी वस्तु को खोजने की लागत उसे बकेट में खोजने की लागत के करीब होती है (उदाहरण के लिए, पड़ोस में बाल्टियाँ एक ही कैश लाइन के अंतर्गत आती हैं)। पड़ोस का आकार सबसे खराब स्थिति में आइटमों की लघुगणक संख्या को समायोजित करने के लिए पर्याप्त होना चाहिए (अर्थात इसमें लॉग (n) आइटम को समायोजित करना होगा), लेकिन औसतन केवल एक स्थिर संख्या। यदि किसी बकेट का पड़ोस भर जाता है, तो टेबल का आकार बदल दिया जाता है।
हॉप्सकॉच हैशिंग में, कोयल हैशिंग की तरह, और रैखिक जांच के विपरीत, किसी दिए गए आइटम को हमेशा उसके हैशेड बकेट के पड़ोस में डाला और पाया जाएगा। दूसरे शब्दों में, यह हमेशा या तो इसकी मूल हैशेड सरणी प्रविष्टि में, या अगली H−1 पड़ोसी प्रविष्टियों में से एक में पाया जाएगा। उदाहरण के लिए, H 32 हो सकता है, जो एक सामान्य मशीन शब्द का आकार है। इस प्रकार पड़ोस एक आभासी बकेट है जिसका आकार निश्चित है और निम्नलिखित H−1 बाल्टियों के साथ ओवरलैप होता है। खोज को गति देने के लिए, प्रत्येक बकेट (सरणी प्रविष्टि) में एक हॉप-सूचना शब्द, एक एच-बिट बिटमैप शामिल होता है जो इंगित करता है कि अगली H−1 प्रविष्टियों में से किसमें वे आइटम हैं जो वर्तमान प्रविष्टि की वर्चुअल बकेट में हैश किए गए हैं। इस तरह, किसी आइटम को शब्द को देखकर जल्दी से पाया जा सकता है कि कौन सी प्रविष्टियाँ बकेट से संबंधित हैं, और फिर प्रविष्टियों की निरंतर संख्या के माध्यम से स्कैन करना (अधिकांश आधुनिक प्रोसेसर विशेष बिट हेरफेर संचालन का समर्थन करते हैं जो हॉप में लुकअप करते हैं- सूचना बिटमैप बहुत तेज़)।
यहां बकेट i में हैश किए गए आइटम x को जोड़ने का तरीका बताया गया है:
- यदि बकेट आई के लिए हॉप-सूचना शब्द दिखाता है कि इस बकेट में पहले से ही एच आइटम हैं, तो टेबल भरी हुई है; हैश टेबल का विस्तार करें और पुनः प्रयास करें।
- प्रविष्टि i से शुरू करते हुए, सूचकांक j पर एक खाली प्रविष्टि खोजने के लिए एक रैखिक जांच का उपयोग करें। (यदि कोई खाली स्लॉट मौजूद नहीं है, तो टेबल भरी हुई है।)
- जबकि (j−i) mod n ≥ H, खाली स्लॉट को i की ओर इस प्रकार ले जाएं:
- किसी आइटम y के लिए j से पहले H−1 स्लॉट खोजें, जिसका हैश मान k, j के H−1 के भीतर है, यानी (j−k) mod n < H. (यह हॉप-सूचना शब्दों का उपयोग करके किया जा सकता है।)
- यदि ऐसी कोई वस्तु y सीमा के भीतर मौजूद नहीं है, तो टेबल भरी हुई है।
- y को j पर ले जाएं, i के करीब एक नया खाली स्लॉट बनाएं।
- j को y द्वारा खाली किए गए खाली स्लॉट पर सेट करें और दोहराएं।
- x को स्लॉट j में स्टोर करें और वापस लौटें।
विचार यह है कि हॉपस्कॉच हैशिंग खाली स्लॉट को वांछित बकेट की ओर ले जाती है। यह इसे रैखिक जांच से अलग करता है जो खाली स्लॉट को छोड़ देता है जहां यह पाया गया था, संभवतः मूल बकेट से बहुत दूर, या कोयल हैशिंग से, जो एक मुफ्त बकेट बनाने के लिए, वांछित बकेट में से एक वस्तु को बाहर ले जाता है लक्ष्य सरणियाँ, और उसके बाद ही विस्थापित वस्तु को एक नया स्थान खोजने का प्रयास करता है।
किसी आइटम को टेबल से हटाने के लिए, उसे बस टेबल प्रविष्टि से हटा दिया जाता है। यदि पड़ोस की बकेट कैश संरेखित हैं, तो कोई पुनर्गठन ऑपरेशन लागू कर सकता है जिसमें संरेखण में सुधार के लिए वस्तुओं को अब खाली स्थान पर ले जाया जाता है।
हॉप्सकॉच हैशिंग का एक फायदा यह है कि यह बहुत उच्च टेबल लोड कारकों पर भी अच्छा प्रदर्शन प्रदान करता है, यहां तक कि 0.9 से अधिक वाले कारकों पर भी। इस दक्षता का एक हिस्सा केवल सम्मिलन के दौरान एक खाली स्लॉट खोजने के लिए एक रैखिक जांच का उपयोग करने के कारण होता है, मूल रैखिक जांच हैश टेबल एल्गोरिदम की तरह हर लुकअप के लिए नहीं। एक अन्य लाभ यह है कि कोई भी किसी भी हैश फ़ंक्शन का उपयोग कर सकता है, विशेष रूप से सरल जो सार्वभौमिक के करीब हैं।
यह भी देखें
- कोयल हैशिंग
- हैश टकराव
- हैश फंकशन
- रेखीय जांच
- हैश_टेबल#ओपन_एड्रेसिंग
- उत्तम हैशिंग
- द्विघात जांच
संदर्भ
- ↑ Herlihy, Maurice; Shavit, Nir; Tzafrir, Moran (2008). "Hopscotch Hashing" (PDF). DISC '08: Proceedings of the 22nd international symposium on Distributed Computing. Arcachon, France: Springer-Verlag. pp. 350–364.
बाहरी संबंध
- libhhash - a C hopscotch hashing implementation
- hopscotch-map - a C++ implementation of a hash map using hopscotch hashing
- Goossaert, Emmanuel (11 August 2013). "Hopscotch hashing". Retrieved 16 October 2019. A detailed description and example implementation.