हैश ऐरे मैप्ड ट्रिए: Difference between revisions

From Vigyanwiki
(text)
Line 1: Line 1:
{{Technical|date=October 2019}}
{{Technical|date=October 2019}}
एक '''हैश सरणी मानचित्रित ट्री''' <ref name="bagwell" />(एचएएमटी) एक [[साहचर्य सरणी]] का कार्यान्वयन है जो [[ हैश तालिका |हैश तालिका]] और [[सरणी मैप किया गया प्रयास|हैश सरणी मानचित्रित ट्री]] की विशेषताओं को जोड़ता है। <ref name="bagwell">{{cite report
एक '''हैश सरणी मैप्ड ट्रिए''' <ref name="bagwell" /> (एचएएमटी) एक [[साहचर्य सरणी|अस्सोसिएटिवे ऐरे]] का कार्यान्वयन है जो [[ हैश तालिका |हैश तालिका]] और [[सरणी मैप किया गया प्रयास|हैश सरणी मैप्ड ट्रिए]] की विशेषताओं को जोड़ता है। <ref name="bagwell">{{cite report
|title=Ideal Hash Trees
|title=Ideal Hash Trees
|author=Phil Bagwell
|author=Phil Bagwell
Line 7: Line 7:
|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 सामान्यतः 32 है। चूंकि प्रत्येक बिंदु के लिए N सूचक के लिए स्थान आवंटित करना महंगा होगा, इसके स्थान पर प्रत्येक बिंदु में एक बिटमैप होता है जो N बिट लंबा होता है जहां प्रत्येक बिट एक गैर-शून्य सूचक की उपस्थिति को इंगित करता है। इसके बाद बिटमैप (इसका [[हथौड़ा चलाना वजन|हैमिंग भार]]) में सूचक की संख्या के बराबर लंबाई वाले सूचक की एक सरणी होती है।
एचएएमटी के एरे मैप्ड ट्रिए के एक विशिष्ट कार्यान्वयन में, प्रत्येक बिंदु में कुछ निश्चित संख्या N छिद्र के साथ एक तालिका होती है, जिसमें प्रत्येक छिद्र में एक शून्य सूचक या दूसरे बिंदु के लिए एक सूचक होता है। N सामान्यतः 32 है। चूंकि प्रत्येक बिंदु के लिए N सूचक के लिए स्थान आवंटित करना महंगा होगा, इसके स्थान पर प्रत्येक बिंदु में एक बिटमैप होता है जो N बिट लंबा होता है जहां प्रत्येक बिट एक गैर-शून्य सूचक की उपस्थिति को इंगित करता है। इसके बाद बिटमैप (इसका [[हथौड़ा चलाना वजन|हैमिंग भार]]) में सूचक की संख्या के बराबर लंबाई वाले सूचक की एक सरणी होती है।


== एचएएमटी के लाभ ==
== एचएएमटी के लाभ ==
हैश ऐरे मानचित्रित ट्राई मेमोरी का अधिक मितव्ययितापूर्वक उपयोग करते हुए लगभग हैश सारिणी जैसी गति प्राप्त करता है। साथ ही, हैश तालिका का समय-समय पर आकार बदलना पड़ सकता है, जो एक महंगा संचालन है, जबकि एचएएमटी गतिशील रूप से बढ़ते हैं। सामान्यतः, एचएएमटी प्रदर्शन में कुछ एन छिद्र के साथ एक बड़ी क्रम सारिणी द्वारा सुधार किया जाता है; कुछ एचएएमटी प्रकार जड़ को प्रदर्शन पर नगण्य प्रभाव के साथ धीरे-धीरे बढ़ने देते हैं। <ref name="bagwell" />
हैश ऐरे मैप्ड ट्राई मेमोरी का अधिक मितव्ययितापूर्वक उपयोग करते हुए लगभग हैश सारिणी जैसी गति प्राप्त करता है। साथ ही, हैश तालिका का समय-समय पर आकार बदलना पड़ सकता है, जो एक महंगा संचालन है, जबकि एचएएमटी गतिशील रूप से बढ़ते हैं। सामान्यतः, एचएएमटी प्रदर्शन में कुछ एन छिद्र के साथ एक बड़ी क्रम सारिणी द्वारा सुधार किया जाता है; कुछ एचएएमटी प्रकार जड़ को प्रदर्शन पर नगण्य प्रभाव के साथ धीरे-धीरे बढ़ने देते हैं। <ref name="bagwell" />


== कार्यान्वयन विवरण ==
== कार्यान्वयन विवरण ==
Line 21: Line 21:


== कार्यान्वयन ==
== कार्यान्वयन ==
प्रोग्रामिंग भाषाएँ [[क्लोजर]],<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://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> - सीटीआरआई ऑपरेशंस में [[ परमाणुता (प्रोग्रामिंग) |अटॉमिसिटी (प्रोग्रामिंग)]], [[रैखिकता]] और लॉक-फ्रीडम गुण दिखाए गए हैं।
आईएम और आईएम-आरसी क्रेट्स, जो रस्ट प्रोग्रामिंग भाषा के लिए लगातार संग्रह प्रकार प्रदान करते हैं, अपने लगातार हैश सारिणी और हैश सम्मुच्चय के लिए एचएएमटी का उपयोग करते हैं। <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 10:30, 18 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. 1.0 1.1 1.2 Phil Bagwell (2000). Ideal Hash Trees (PDF) (Report). Infoscience Department, École Polytechnique Fédérale de Lausanne.
  2. "clojure/clojure". GitHub. 8 December 2022.
  3. "Frege/frege". GitHub. 7 December 2022.
  4. Johan Tibell, A. Announcing unordered-containers 0.2
  5. Nikita Volkov, Announcing the "stm-containers" library, 2014
  6. "mattbierner/hamt". GitHub. 27 November 2022.
  7. "रुबिनियस के HAMT की रूबी स्रोत फ़ाइल". GitHub.
  8. https://github.com/rubinius/rubinius/blob/master/machine/builtin/system.cpp#L1724-L1802[dead link]
  9. "Erlang Programming Language".
  10. "horse: Pony is an open-source, actor-model, capabilities-secure, high performance programming language: Ponylang/ponyc". GitHub. 2018-11-26.
  11. "API docs for Rust im-rc crate".
  12. Prokopec, A. Implementation of Concurrent Hash Tries on GitHub
  13. Prokopec, A. et al. (2011) Cache-Aware Lock-Free Concurrent Hash Tries. Technical Report, 2011.