हैश ऐरे मैप्ड ट्रिए: Difference between revisions
(text) |
(text) |
||
Line 1: | Line 1: | ||
'''हैश ऐरे मैप्ड ट्रिए''' <ref name="bagwell" /> (एचएएमटी) एक [[साहचर्य सरणी|अस्सोसिएटिवे ऐरे]] का इम्प्लीमेंटेशन है जो [[ हैश तालिका |हैश टेबल]] और [[सरणी मैप किया गया प्रयास|हैश ऐरे मैप्ड ट्रिए]] की विशेषताओं को जोड़ता है। <ref name="bagwell">{{cite report | |||
'''हैश ऐरे मैप्ड ट्रिए''' <ref name="bagwell" /> (एचएएमटी) एक [[साहचर्य सरणी|अस्सोसिएटिवे ऐरे]] का | |||
|title=Ideal Hash Trees | |title=Ideal Hash Trees | ||
|author=Phil Bagwell | |author=Phil Bagwell | ||
Line 7: | Line 6: | ||
|url=http://infoscience.epfl.ch/record/64398/files/idealhashtrees.pdf | |url=http://infoscience.epfl.ch/record/64398/files/idealhashtrees.pdf | ||
|year=2000 | |year=2000 | ||
}}</ref> यह [[हैश ट्री (लगातार डेटा संरचना)|हैश ट्रिए (लगातार डेटा संरचना)]] की अधिक | }}</ref> यह [[हैश ट्री (लगातार डेटा संरचना)|हैश ट्रिए (लगातार डेटा संरचना)]] की अधिक जनरल नोशन का एक रिफाइंड वरजन है। | ||
== संचालन == | == संचालन == | ||
एचएएमटी एक ऐरे मैप्ड ट्रिए है जहां कीज़ का समान वितरण और निरंतर कुंजी लंबाई सुनिश्चित करने के लिए कीज़ को पहले हैश किया जाता है। | एचएएमटी एक ऐरे मैप्ड ट्रिए है जहां कीज़ का समान वितरण और निरंतर कुंजी लंबाई सुनिश्चित करने के लिए कीज़ को पहले हैश किया जाता है। | ||
एचएएमटी के एरे मैप्ड ट्रिए के एक विशिष्ट कार्यान्वयन में, प्रत्येक बिंदु में कुछ निश्चित संख्या N स्लॉट के साथ एक | एचएएमटी के एरे मैप्ड ट्रिए के एक विशिष्ट कार्यान्वयन में, प्रत्येक बिंदु में कुछ निश्चित संख्या N स्लॉट के साथ एक टेबल होती है, जिसमें प्रत्येक स्लॉट में एक शून्य पॉइंटर या दूसरे बिंदु के लिए एक पॉइंटर होता है। N सामान्यतः 32 है। चूंकि प्रत्येक बिंदु के लिए N पॉइंटर के लिए स्थान आवंटित करना महंगा होगा, इसके स्थान पर प्रत्येक बिंदु में एक बिटमैप होता है जो N बिट लंबा होता है जहां प्रत्येक बिट एक गैर-शून्य पॉइंटर की उपस्थिति को इंडीकेट करता है। इसके बाद बिटमैप (इसका [[हथौड़ा चलाना वजन|हैमिंग भार]]) में पॉइंटर की संख्या के बराबर लंबाई वाले पॉइंटर की एक ऐरे होती है। | ||
== एचएएमटी के लाभ == | == एचएएमटी के लाभ == | ||
हैश ऐरे मैप्ड ट्राई मेमोरी का अधिक | हैश ऐरे मैप्ड ट्राई मेमोरी का अधिक एकनॉमिकली उपयोग करते हुए लगभग हैश टेबल जैसी गति प्राप्त करता है। साथ ही, हैश टेबल का समय-समय पर आकार बदलना पड़ सकता है, जो एक महंगा संचालन है, जबकि एचएएमटी गतिशील रूप से बढ़ते हैं। सामान्यतः, एचएएमटी प्रदर्शन में कुछ एन स्लॉट के साथ एक बड़ी क्रम टेबल द्वारा सुधार किया जाता है; कुछ एचएएमटी प्रकार जड़ को प्रदर्शन पर नगण्य प्रभाव के साथ धीरे-धीरे बढ़ने देते हैं। <ref name="bagwell" /> | ||
== कार्यान्वयन विवरण == | == कार्यान्वयन विवरण == | ||
Line 21: | Line 20: | ||
== कार्यान्वयन == | == कार्यान्वयन == | ||
प्रोग्रामिंग भाषाएँ [[क्लोजर]], <ref>{{cite web|url=https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentHashMap.java|title=clojure/clojure|website=GitHub|date=8 December 2022 }}</ref> [[स्काला (प्रोग्रामिंग भाषा)]], और [[फ़्रीज (प्रोग्रामिंग भाषा)]] <ref>{{cite web|url=https://github.com/Frege/frege/blob/master/frege/data/HashMap.fr|title=Frege/frege|website=GitHub|date=7 December 2022 }}</ref> अपने मूल हैश मैप्ड प्रकार के लिए हैश ऐरे मैप्ड किए गए प्रयासों के लगातार डेटा संरचना संस्करण का उपयोग करें। [[हास्केल (प्रोग्रामिंग भाषा)]] लाइब्रेरी अनआर्डरड-कंटेनर्स लगातार मैप को लागू करने और डेटा | प्रोग्रामिंग भाषाएँ [[क्लोजर]], <ref>{{cite web|url=https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentHashMap.java|title=clojure/clojure|website=GitHub|date=8 December 2022 }}</ref> [[स्काला (प्रोग्रामिंग भाषा)]], और [[फ़्रीज (प्रोग्रामिंग भाषा)]] <ref>{{cite web|url=https://github.com/Frege/frege/blob/master/frege/data/HashMap.fr|title=Frege/frege|website=GitHub|date=7 December 2022 }}</ref> अपने मूल हैश मैप्ड प्रकार के लिए हैश ऐरे मैप्ड किए गए प्रयासों के लगातार डेटा संरचना संस्करण का उपयोग करें। [[हास्केल (प्रोग्रामिंग भाषा)]] लाइब्रेरी अनआर्डरड-कंटेनर्स लगातार मैप को लागू करने और डेटा स्ट्रक्चर को सम्मुच्चय करने के लिए इसका उपयोग करती है। <ref>Johan Tibell, A. [http://blog.johantibell.com/2012/03/announcing-unordered-containers-02.html Announcing unordered-containers 0.2]</ref> एक अन्य हास्केल लाइब्रेरी एसटीएम-धारक [[सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी]] के संदर्भ में उपयोग के लिए कलन विधि को अनुकूलित करता है। <ref>Nikita Volkov, [https://nikita-volkov.github.io/stm-containers/ Announcing the "stm-containers" library], 2014</ref> एक [[जावास्क्रिप्ट]] एचएएमटी लाइब्रेरी <ref>{{cite web|url=https://github.com/mattbierner/hamt|title=mattbierner/hamt|website=GitHub|date=27 November 2022 }}</ref> क्लोजर कार्यान्वयन पर आधारित भी उपलब्ध है। [[ माणिक |रुबिनियस]] <ref>{{cite web|url=https://github.com/rubinius/rubinius/blob/540a4b446991e4d5c956023d37ec4f95372d539d/kernel/common/hash_hamt.rb|title=रुबिनियस के HAMT की रूबी स्रोत फ़ाइल|website=[[GitHub]]|publisher=}}</ref> [[रूबी (प्रोग्रामिंग भाषा)]] के कार्यान्वयन में एक एचएएमटी सम्मिलित है, जो अधिकतर रूबी में लिखा गया है लेकिन 3 के साथ <ref>https://github.com/rubinius/rubinius/blob/master/machine/builtin/system.cpp#L1724-L1802 {{Dead link|date=February 2022}}</ref> एर्लैंग (प्रोग्रामिंग भाषा) में बड़े मैप्ड विमोचन 18.0 के बाद से आंतरिक रूप से एक पर्सिस्टेंट डेटा संरचना एचएएमटी प्रतिनिधित्व का उपयोग करते हैं। <ref>{{Cite web | url=http://www.erlang.org/news/86 | title=Erlang Programming Language}}</ref> पोनी प्रोग्रामिंग भाषा अपने सतत संग्रह पैकेज में हैश मैप्ड के लिए एचएएमटी का उपयोग करती है। <ref>{{Cite web | url=https://github.com/ponylang/ponyc/blob/master/packages/collections/persistent/map.pony | title=horse: Pony is an open-source, actor-model, capabilities-secure, high performance programming language: Ponylang/ponyc| website=[[GitHub]]| date=2018-11-26}}</ref> | ||
आईएम और आईएम-आरसी क्रेट्स, जो रस्ट प्रोग्रामिंग भाषा के लिए लगातार संग्रह प्रकार प्रदान करते हैं, अपने लगातार हैश | आईएम और आईएम-आरसी क्रेट्स, जो रस्ट प्रोग्रामिंग भाषा के लिए लगातार संग्रह प्रकार प्रदान करते हैं, अपने लगातार हैश टेबल और हैश सम्मुच्चय के लिए एचएएमटी का उपयोग करते हैं। <ref>{{cite web|url=https://docs.rs/im/|title=API docs for Rust im-rc crate}}</ref> समवर्ती लॉक-मुक्त संस्करण <ref>Prokopec, A. [https://github.com/axel22/Ctries Implementation of Concurrent Hash Tries on GitHub]</ref> [[Ctrie|सीटीआरआई]] नामक हैश ट्रिए एक परिवर्तनीय थ्रेड-सुरक्षित कार्यान्वयन है जो प्रगति सुनिश्चित करता है। डेटा-संरचना सही सिद्ध हुई है <ref>Prokopec, A. et al. (2011) [http://infoscience.epfl.ch/record/166908/files/ctries-techreport.pdf Cache-Aware Lock-Free Concurrent Hash Tries]. Technical Report, 2011.</ref> - सीटीआरआई ऑपरेशंस में [[ परमाणुता (प्रोग्रामिंग) |अटॉमिसिटी (प्रोग्रामिंग)]], [[रैखिकता]] और लॉक-फ्रीडम प्रॉपर्टीज दिखाए गए हैं। | ||
== यह भी देखें == | == यह भी देखें == |
Revision as of 12:15, 20 July 2023
हैश ऐरे मैप्ड ट्रिए [1] (एचएएमटी) एक अस्सोसिएटिवे ऐरे का इम्प्लीमेंटेशन है जो हैश टेबल और हैश ऐरे मैप्ड ट्रिए की विशेषताओं को जोड़ता है। [1] यह हैश ट्रिए (लगातार डेटा संरचना) की अधिक जनरल नोशन का एक रिफाइंड वरजन है।
संचालन
एचएएमटी एक ऐरे मैप्ड ट्रिए है जहां कीज़ का समान वितरण और निरंतर कुंजी लंबाई सुनिश्चित करने के लिए कीज़ को पहले हैश किया जाता है।
एचएएमटी के एरे मैप्ड ट्रिए के एक विशिष्ट कार्यान्वयन में, प्रत्येक बिंदु में कुछ निश्चित संख्या N स्लॉट के साथ एक टेबल होती है, जिसमें प्रत्येक स्लॉट में एक शून्य पॉइंटर या दूसरे बिंदु के लिए एक पॉइंटर होता है। N सामान्यतः 32 है। चूंकि प्रत्येक बिंदु के लिए N पॉइंटर के लिए स्थान आवंटित करना महंगा होगा, इसके स्थान पर प्रत्येक बिंदु में एक बिटमैप होता है जो N बिट लंबा होता है जहां प्रत्येक बिट एक गैर-शून्य पॉइंटर की उपस्थिति को इंडीकेट करता है। इसके बाद बिटमैप (इसका हैमिंग भार) में पॉइंटर की संख्या के बराबर लंबाई वाले पॉइंटर की एक ऐरे होती है।
एचएएमटी के लाभ
हैश ऐरे मैप्ड ट्राई मेमोरी का अधिक एकनॉमिकली उपयोग करते हुए लगभग हैश टेबल जैसी गति प्राप्त करता है। साथ ही, हैश टेबल का समय-समय पर आकार बदलना पड़ सकता है, जो एक महंगा संचालन है, जबकि एचएएमटी गतिशील रूप से बढ़ते हैं। सामान्यतः, एचएएमटी प्रदर्शन में कुछ एन स्लॉट के साथ एक बड़ी क्रम टेबल द्वारा सुधार किया जाता है; कुछ एचएएमटी प्रकार जड़ को प्रदर्शन पर नगण्य प्रभाव के साथ धीरे-धीरे बढ़ने देते हैं। [1]
कार्यान्वयन विवरण
एचएएमटी के कार्यान्वयन में हैमिंग भार फलन का उपयोग सम्मिलित है, जो किसी संख्या के बाइनरी रिप्रजेंटेशन में नंबर ऑफ़ वंस की गणना करता है। यह संचालन हैमिंग वेट समर्थन में उपलब्ध है, लेकिन यह हैमिंग वेट केवल कुछ उच्च-स्तरीय भाषाओं में उपलब्ध है। हालाँकि जनसंख्या गणना को हैमिंग वेट इम्प्लीमेंटेशन का उपयोग करके O(1) समय में सॉफ़्टवेयर में लागू किया जा सकता है, ऐसा करने से संचालन आर्डर ऑफ़ मैग्नीट्यूड में धीमा हो सकता है।
कार्यान्वयन
प्रोग्रामिंग भाषाएँ क्लोजर, [2] स्काला (प्रोग्रामिंग भाषा), और फ़्रीज (प्रोग्रामिंग भाषा) [3] अपने मूल हैश मैप्ड प्रकार के लिए हैश ऐरे मैप्ड किए गए प्रयासों के लगातार डेटा संरचना संस्करण का उपयोग करें। हास्केल (प्रोग्रामिंग भाषा) लाइब्रेरी अनआर्डरड-कंटेनर्स लगातार मैप को लागू करने और डेटा स्ट्रक्चर को सम्मुच्चय करने के लिए इसका उपयोग करती है। [4] एक अन्य हास्केल लाइब्रेरी एसटीएम-धारक सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी के संदर्भ में उपयोग के लिए कलन विधि को अनुकूलित करता है। [5] एक जावास्क्रिप्ट एचएएमटी लाइब्रेरी [6] क्लोजर कार्यान्वयन पर आधारित भी उपलब्ध है। रुबिनियस [7] रूबी (प्रोग्रामिंग भाषा) के कार्यान्वयन में एक एचएएमटी सम्मिलित है, जो अधिकतर रूबी में लिखा गया है लेकिन 3 के साथ [8] एर्लैंग (प्रोग्रामिंग भाषा) में बड़े मैप्ड विमोचन 18.0 के बाद से आंतरिक रूप से एक पर्सिस्टेंट डेटा संरचना एचएएमटी प्रतिनिधित्व का उपयोग करते हैं। [9] पोनी प्रोग्रामिंग भाषा अपने सतत संग्रह पैकेज में हैश मैप्ड के लिए एचएएमटी का उपयोग करती है। [10]
आईएम और आईएम-आरसी क्रेट्स, जो रस्ट प्रोग्रामिंग भाषा के लिए लगातार संग्रह प्रकार प्रदान करते हैं, अपने लगातार हैश टेबल और हैश सम्मुच्चय के लिए एचएएमटी का उपयोग करते हैं। [11] समवर्ती लॉक-मुक्त संस्करण [12] सीटीआरआई नामक हैश ट्रिए एक परिवर्तनीय थ्रेड-सुरक्षित कार्यान्वयन है जो प्रगति सुनिश्चित करता है। डेटा-संरचना सही सिद्ध हुई है [13] - सीटीआरआई ऑपरेशंस में अटॉमिसिटी (प्रोग्रामिंग), रैखिकता और लॉक-फ्रीडम प्रॉपर्टीज दिखाए गए हैं।
यह भी देखें
संदर्भ
- ↑ 1.0 1.1 1.2 Phil Bagwell (2000). Ideal Hash Trees (PDF) (Report). Infoscience Department, École Polytechnique Fédérale de Lausanne.
- ↑ "clojure/clojure". GitHub. 8 December 2022.
- ↑ "Frege/frege". GitHub. 7 December 2022.
- ↑ Johan Tibell, A. Announcing unordered-containers 0.2
- ↑ Nikita Volkov, Announcing the "stm-containers" library, 2014
- ↑ "mattbierner/hamt". GitHub. 27 November 2022.
- ↑ "रुबिनियस के HAMT की रूबी स्रोत फ़ाइल". GitHub.
- ↑ https://github.com/rubinius/rubinius/blob/master/machine/builtin/system.cpp#L1724-L1802[dead link]
- ↑ "Erlang Programming Language".
- ↑ "horse: Pony is an open-source, actor-model, capabilities-secure, high performance programming language: Ponylang/ponyc". GitHub. 2018-11-26.
- ↑ "API docs for Rust im-rc crate".
- ↑ Prokopec, A. Implementation of Concurrent Hash Tries on GitHub
- ↑ Prokopec, A. et al. (2011) Cache-Aware Lock-Free Concurrent Hash Tries. Technical Report, 2011.