डी-एरी हीप: Difference between revisions

From Vigyanwiki
m (Deepak moved page डी-एरी ढेर to डी-एरी हीप without leaving a redirect)
No edit summary
Line 1: Line 1:
{{DISPLAYTITLE:''d''-ary heap}}
{{DISPLAYTITLE:''d''-ary heap}}
{{math|''d''}}-एरी ढेर या{{math|''d''}}-हीप एक [[प्राथमिकता कतार]] [[डेटा संरचना]] है, जो [[ बाइनरी ढेर ]] का एक सामान्यीकरण है जिसमें नोड्स होते हैं {{math|''d''}} 2 के बजाय बच्चे।<ref name="j75"/><ref name="t83"/><ref name="w07"/>इस प्रकार, एक बाइनरी ढेर 2-ढेर है, और एक टर्नरी ढेर 3-ढेर है। टारजन के अनुसार<ref name="t83"/>और जेन्सेन एट अल.,<ref>{{citation
{{math|''d''}}-एरी हीप या {{math|''d''}}-हीप एक [[प्राथमिकता कतार|प्राथमिक]] [[डेटा संरचना]] होती है, जो [[ बाइनरी ढेर |बाइनरी हीप]] का एक सामान्यीकरण होता है जिसमें नोड्स होते है {{math|''d''}} 2।<ref name="j75"/><ref name="t83"/><ref name="w07"/> इस प्रकार, एक बाइनरी हीप 2-हीप होती है, और एक टर्नरी हीप 3-हीप होती है। टारजन <ref name="t83"/>और जेन्सेन एट अल के अनुसार<ref>{{citation
  | last1 = Jensen | first1 = C.
  | last1 = Jensen | first1 = C.
  | last2 = Katajainen | first2 = J.
  | last2 = Katajainen | first2 = J.
Line 15: Line 15:
  | year = 1975
  | year = 1975
  | issue = 3}}.</ref>
  | issue = 3}}.</ref>
यह डेटा संरचना धीमी प्राथमिकता वाले ऑपरेशनों को बाइनरी हीप्स की तुलना में अधिक तेज़ी से निष्पादित करने की अनुमति देती है, धीमे डिलीट न्यूनतम ऑपरेशन की कीमत पर। यह ट्रेडऑफ़ दिज्क्स्ट्रा के एल्गोरिदम जैसे एल्गोरिदम के लिए बेहतर चलने वाले समय की ओर ले जाता है जिसमें प्राथमिकता वाले ऑपरेशन डिलीट मिन ऑपरेशंस की तुलना में अधिक सामान्य होते हैं।<ref name="j75"/><ref name="t2"/>इसके अतिरिक्त, {{math|''d''}}-एरी हीप्स में बाइनरी हीप्स की तुलना में बेहतर [[मेमोरी कैश]] व्यवहार होता है, जो उन्हें सैद्धांतिक रूप से बड़े सबसे खराब स्थिति वाले रनिंग टाइम के बावजूद व्यवहार में अधिक तेज़ी से चलाने की अनुमति देता है।<ref name="nmm91"/>बाइनरी ढेर की तरह, {{math|''d''}}-एरी हीप्स एक [[ इन-प्लेस एल्गोरिदम ]]|इन-प्लेस डेटा संरचना है जो हीप में आइटमों की श्रृंखला को संग्रहीत करने के लिए आवश्यक अतिरिक्त भंडारण का उपयोग नहीं करती है।<ref name="t83"/><ref name="mp05">{{citation
 
यह डेटा संरचना धीमी प्राथमिकता वाले ऑपरेशनों को बाइनरी हीप्स की तुलना में अधिक तेज़ी से निष्पादित करने की अनुमति देती है। यह ट्रेडऑफ़ दिज्क्स्ट्रा के एल्गोरिदम के लिए बेहतर चलने वाले समय की ओर ले जाता है जिसमें प्राथमिकता वाले ऑपरेशन डिलीट मिन ऑपरेशंस की तुलना में अधिक सामान्य होते है।<ref name="j75" /><ref name="t2" /> इसके अतिरिक्त, {{math|''d''}}-एरी हीप्स में बाइनरी हीप्स की तुलना में बेहतर [[मेमोरी कैश]] व्यवहार होता है, जो उन्हें सैद्धांतिक रूप से बड़े सबसे खराब स्थिति वाले रनिंग टाइम के अतिरिक्त व्यवहार में अधिक तेज़ी से चलाने की अनुमति देता है।<ref name="nmm91" /> बाइनरी हीप की तरह, {{math|''d''}}-एरी हीप्स एक [[ इन-प्लेस एल्गोरिदम |इन-प्लेस]] डेटा संरचना होती है जो हीप की श्रृंखलाओं को संग्रहीत करने के लिए आवश्यक अतिरिक्त स्टोरेज का उपयोग नहीं करती है।<ref name="t83" /><ref name="mp05">{{citation
  | last1 = Mortensen | first1 = C. W.
  | last1 = Mortensen | first1 = C. W.
  | last2 = Pettie | first2 = S.
  | last2 = Pettie | first2 = S.
Line 28: Line 29:
  | isbn = 978-3-540-28101-6}}.</ref>
  | isbn = 978-3-540-28101-6}}.</ref>


 
== डेटा संरचना ==
==डेटा संरचना== {{math|''d''}}}-एरी हीप में एक ऐरे डेटा संरचना होती है {{math|''n''}} आइटम, जिनमें से प्रत्येक के साथ एक प्राथमिकता जुड़ी हुई है। इन वस्तुओं को संपूर्ण रूप से नोड्स के रूप में देखा जा सकता है {{math|''d''}}-एरी ट्री, चौड़ाई-पहली खोज में सूचीबद्ध: सरणी की स्थिति 0 पर आइटम (शून्य-आधारित नंबरिंग का उपयोग करके) पेड़ की जड़ बनाता है, स्थिति 1 से लेकर आइटम तक {{math|''d''}} इसके बच्चे हैं, अगले {{math|''d''<sup>2</sup>}} वस्तुएँ उसके पोते आदि हैं। इस प्रकार, स्थिति में वस्तु का जनक {{math|''i''}} (किसी के लिए {{math|''i'' > 0}}) स्थिति पर वस्तु है {{math|{{floor|(''i'' &minus; 1)/''d''}}}} और उसके बच्चे पदों पर आइटम हैं {{math|''di'' + 1}} द्वारा {{math|''di'' + ''d''}}. बाइनरी हीप के अनुसार, मिन-हीप में, प्रत्येक आइटम की एक प्राथमिकता होती है जो कम से कम उसके मूल के बराबर बड़ी होती है; अधिकतम-ढेर में, प्रत्येक आइटम की एक प्राथमिकता होती है जो उसके मूल से बड़ी नहीं होती है।<ref name="t83">{{citation
{{math|''d''}}-एरी हीप में एक ऐरे डेटा संरचना होती है {{math|''n''}}, जिनमें से प्रत्येक के साथ एक प्राथमिकता जुड़ी हुई होती है। इन वस्तुओं को संपूर्ण रूप से नोड्स के रूप में देखा जा सकता है {{math|''d''}}-एरी ट्री,: सरणी की स्थिति 0 पर (शून्य-आधारित नंबरिंग का उपयोग करके) ट्री बनाता है, स्थिति 1 से लेकर {{math|''d''}} तक इसके चाइल्ड नोड होते है इस प्रकार, स्थिति में वस्तु का जनक {{math|''i''}} (किसी के लिए {{math|''i'' > 0}}) स्थिति पर वस्तु है {{math|{{floor|(''i'' &minus; 1)/''d''}}}} और उसके चाइल्ड पदों पर वस्तु है {{math|''di'' + 1}} द्वारा {{math|''di'' + ''d''}}. बाइनरी हीप के अनुसार, मिन-हीप में, प्रत्येक वस्तु की एक प्राथमिकता होती है जो कम से कम उसके मूल के बराबर बड़ी होती है; अधिकतम-हीप में, प्रत्येक वस्तु की एक प्राथमिकता होती है जो उसके मूल से बड़ी नहीं होती है।<ref name="t83">{{citation
  | last = Tarjan | first = R. E. | author-link = Robert Tarjan
  | last = Tarjan | first = R. E. | author-link = Robert Tarjan
  | contribution = 3.2. ''d''-heaps
  | contribution = 3.2. ''d''-heaps
Line 37: Line 38:
  | title = Data Structures and Network Algorithms
  | title = Data Structures and Network Algorithms
  | volume = 44
  | volume = 44
  | year = 1983}}. Note that Tarjan uses 1-based numbering, not 0-based numbering, so his formulas for the parent and children of a node need to be adjusted when 0-based numbering is used.</ref><ref name="w07"/>
  | year = 1983}}. Note that Tarjan uses 1-based numbering, not 0-based numbering, so his formulas for the parent and children of a node need to be adjusted when 0-based numbering is used.</ref><ref name="w07" />


न्यूनतम-हीप में न्यूनतम प्राथमिकता वाला आइटम (या अधिकतम-हीप में अधिकतम प्राथमिकता वाला आइटम) हमेशा सरणी के स्थान 0 पर पाया जा सकता है। इस आइटम को प्राथमिकता कतार से हटाने के लिए, सरणी में अंतिम आइटम x को उसके स्थान पर ले जाया जाता है, और सरणी की लंबाई एक से कम कर दी जाती है। फिर, जबकि आइटम x और उसके बच्चे ढेर संपत्ति को संतुष्ट नहीं करते हैं, आइटम x को उसके बच्चों में से एक के साथ बदल दिया जाता है (मिन-हीप में सबसे छोटी प्राथमिकता वाला, या अधिकतम-हीप में सबसे बड़ी प्राथमिकता वाला) , इसे पेड़ में और बाद में सरणी में नीचे की ओर ले जाना, जब तक कि अंततः ढेर संपत्ति संतुष्ट न हो जाए। उसी डाउनवर्ड स्वैपिंग प्रक्रिया का उपयोग न्यूनतम-ढेर में किसी आइटम की प्राथमिकता को बढ़ाने के लिए, या अधिकतम-ढेर में किसी आइटम की प्राथमिकता को कम करने के लिए किया जा सकता है।<ref name="t83"/><ref name="w07"/>
न्यूनतम-हीप में न्यूनतम प्राथमिकता वाला वस्तु (या अधिकतम-हीप में अधिकतम प्राथमिकता वाला वस्तु) हमेशा सरणी के स्थान 0 पर पाया जा सकता है। इस वस्तु को प्राथमिकता कतार से हटाने के लिए, सरणी में अंतिम वस्तु x को उसके स्थान पर ले जाया जाता है, और सरणी की लंबाई एक से कम कर दी जाती है। फिर, जबकि वस्तु x और उसके बच्चे हीप संपत्ति को संतुष्ट नहीं करते है, वस्तु x को उसके बच्चों में से एक के साथ बदल दिया जाता है (मिन-हीप में सबसे छोटी प्राथमिकता वाला, या अधिकतम-हीप में सबसे बड़ी प्राथमिकता वाला) , इसे पेड़ में और बाद में सरणी में नीचे की ओर ले जाना, जब तक कि अंततः हीप संपत्ति संतुष्ट न हो जाए। उसी डाउनवर्ड स्वैपिंग प्रक्रिया का उपयोग न्यूनतम-हीप में किसी वस्तु की प्राथमिकता को बढ़ाने के लिए, या अधिकतम-हीप में किसी वस्तु की प्राथमिकता को कम करने के लिए किया जा सकता है।<ref name="t83" /><ref name="w07" />
 
ढेर में एक नया आइटम डालने के लिए, आइटम को सरणी के अंत में जोड़ा जाता है, और फिर जब ढेर संपत्ति का उल्लंघन होता है तो इसे अपने मूल के साथ बदल दिया जाता है, इसे पेड़ में ऊपर की ओर और सरणी में पहले ले जाया जाता है, जब तक कि अंततः ढेर संपत्ति संतुष्ट है. उसी अपवर्ड-स्वैपिंग प्रक्रिया का उपयोग न्यूनतम-ढेर में किसी आइटम की प्राथमिकता को कम करने, या अधिकतम-ढेर में किसी आइटम की प्राथमिकता को बढ़ाने के लिए किया जा सकता है।<ref name="t83"/><ref name="w07"/>
 
किसी सारणी से एक नया ढेर बनाने के लिए {{math|''n''}} आइटम, कोई आइटम की स्थिति से शुरू करते हुए, रिवर्स ऑर्डर में आइटम पर लूप कर सकता है {{math|''n'' &minus; 1}} और आइटम को स्थिति 0 पर समाप्त करते हुए, प्रत्येक आइटम के लिए डाउनवर्ड-स्वैपिंग प्रक्रिया को लागू करना।<ref name="t83"/><ref name="w07"/>


हीप में एक नया वस्तु डालने के लिए, वस्तु को सरणी के अंत में जोड़ा जाता है, और फिर जब हीप संपत्ति का उल्लंघन होता है तो इसे अपने मूल के साथ बदल दिया जाता है, इसे पेड़ में ऊपर की ओर और सरणी में पहले ले जाया जाता है, जब तक कि अंततः हीप संपत्ति संतुष्ट है. उसी अपवर्ड-स्वैपिंग प्रक्रिया का उपयोग न्यूनतम-हीप में किसी वस्तु की प्राथमिकता को कम करने, या अधिकतम-हीप में किसी वस्तु की प्राथमिकता को बढ़ाने के लिए किया जा सकता है।<ref name="t83" /><ref name="w07" />


किसी सारणी से एक नया हीप बनाने के लिए {{math|''n''}} वस्तु, कोई वस्तु की स्थिति से शुरू करते हुए, रिवर्स ऑर्डर में वस्तु पर लूप कर सकता है {{math|''n'' &minus; 1}} और वस्तु को स्थिति 0 पर समाप्त करते हुए, प्रत्येक वस्तु के लिए डाउनवर्ड-स्वैपिंग प्रक्रिया को लागू करना।<ref name="t83" /><ref name="w07" />
==विश्लेषण==
==विश्लेषण==
में एक {{math|''d''}}-एरी ढेर के साथ {{math|''n''}} इसमें आइटम, ऊपर की ओर-स्वैपिंग प्रक्रिया और नीचे की ओर-स्वैपिंग प्रक्रिया दोनों ही कार्य कर सकते हैं {{math|1=log<sub>''d''</sub> ''n'' = log ''n'' / log ''d''}} अदला-बदली। अपवर्ड-स्वैपिंग प्रक्रिया में, प्रत्येक स्वैप में किसी आइटम की उसके मूल के साथ एकल तुलना शामिल होती है, और इसमें निरंतर समय लगता है। इसलिए, ढेर में एक नया आइटम डालने, न्यूनतम-ढेर में किसी आइटम की प्राथमिकता को कम करने, या अधिकतम-ढेर में किसी आइटम की प्राथमिकता बढ़ाने का समय है {{math|O(log ''n'' / log ''d'')}}. डाउनवर्ड-स्वैपिंग प्रक्रिया में, प्रत्येक स्वैप शामिल होता है {{math|''d''}} तुलना और लेता है {{math|O(''d'')}} समय: लगता है {{math|''d'' &minus; 1}} बच्चों की न्यूनतम या अधिकतम संख्या निर्धारित करने के लिए तुलना और फिर माता-पिता के विरुद्ध एक और तुलना यह निर्धारित करने के लिए कि क्या अदला-बदली की आवश्यकता है। इसलिए, रूट आइटम को हटाने, न्यूनतम-हीप में किसी आइटम की प्राथमिकता बढ़ाने या अधिकतम-हीप में किसी आइटम की प्राथमिकता कम करने का समय है {{math|O(''d'' log ''n'' / log ''d'')}}.<ref name="t83"/><ref name="w07"/>
में एक {{math|''d''}}-एरी हीप के साथ {{math|''n''}} इसमें वस्तु, ऊपर की ओर-स्वैपिंग प्रक्रिया और नीचे की ओर-स्वैपिंग प्रक्रिया दोनों ही कार्य कर सकते है {{math|1=log<sub>''d''</sub> ''n'' = log ''n'' / log ''d''}} अदला-बदली। अपवर्ड-स्वैपिंग प्रक्रिया में, प्रत्येक स्वैप में किसी वस्तु की उसके मूल के साथ एकल तुलना शामिल होती है, और इसमें निरंतर समय लगता है। इसलिए, हीप में एक नया वस्तु डालने, न्यूनतम-हीप में किसी वस्तु की प्राथमिकता को कम करने, या अधिकतम-हीप में किसी वस्तु की प्राथमिकता बढ़ाने का समय है {{math|O(log ''n'' / log ''d'')}}. डाउनवर्ड-स्वैपिंग प्रक्रिया में, प्रत्येक स्वैप शामिल होता है {{math|''d''}} तुलना और लेता है {{math|O(''d'')}} समय: लगता है {{math|''d'' &minus; 1}} बच्चों की न्यूनतम या अधिकतम संख्या निर्धारित करने के लिए तुलना और फिर माता-पिता के विरुद्ध एक और तुलना यह निर्धारित करने के लिए कि क्या अदला-बदली की आवश्यकता है। इसलिए, रूट वस्तु को हटाने, न्यूनतम-हीप में किसी वस्तु की प्राथमिकता बढ़ाने या अधिकतम-हीप में किसी वस्तु की प्राथमिकता कम करने का समय है {{math|O(''d'' log ''n'' / log ''d'')}}.<ref name="t83"/><ref name="w07"/>


बनाते समय ए {{math|''d''}}-एन वस्तुओं के एक सेट से ढेर, अधिकांश वस्तुएं ऐसी स्थिति में हैं जो अंततः पत्तियों को धारण करेंगी {{math|''d''}}-एरी ट्री, और उन वस्तुओं के लिए कोई नीचे की ओर स्वैपिंग नहीं की जाती है। अधिक से अधिक {{math|''n''/''d'' + 1}} आइटम गैर-पत्ते हैं, और इन्हें कम से कम एक बार लागत पर नीचे की ओर बदला जा सकता है {{math|O(''d'')}} उनकी अदला-बदली के लिए बच्चे को ढूंढने का समय आ गया है। अधिक से अधिक {{math|''n''/''d''<sup>2</sup> + 1}} नोड्स को दो बार नीचे की ओर स्वैप किया जा सकता है, जिससे अतिरिक्त खर्च होता है {{math|O(''d'')}} दूसरे स्वैप की लागत पहले कार्यकाल में पहले से ही गणना की गई लागत से अधिक है, आदि। इसलिए, इस तरह से ढेर बनाने में लगने वाला कुल समय है
बनाते समय ए {{math|''d''}}-एन वस्तुओं के एक सेट से हीप, अधिकांश वस्तुएं ऐसी स्थिति में है जो अंततः पत्तियों को धारण करेंगी {{math|''d''}}-एरी ट्री, और उन वस्तुओं के लिए कोई नीचे की ओर स्वैपिंग नहीं की जाती है। अधिक से अधिक {{math|''n''/''d'' + 1}} वस्तु गैर-पत्ते है, और इन्हें कम से कम एक बार लागत पर नीचे की ओर बदला जा सकता है {{math|O(''d'')}} उनकी अदला-बदली के लिए बच्चे को ढूंढने का समय आ गया है। अधिक से अधिक {{math|''n''/''d''<sup>2</sup> + 1}} नोड्स को दो बार नीचे की ओर स्वैप किया जा सकता है, जिससे अतिरिक्त खर्च होता है {{math|O(''d'')}} दूसरे स्वैप की लागत पहले कार्यकाल में पहले से ही गणना की गई लागत से अधिक है, आदि। इसलिए, इस तरह से हीप बनाने में लगने वाला कुल समय है
:<math>\sum_{i=1}^{\log_d n} \left(\frac{n}{d^i}+1\right) O(d) = O(n).</math><ref name="t83"/><ref name="w07"/>
:<math>\sum_{i=1}^{\log_d n} \left(\frac{n}{d^i}+1\right) O(d) = O(n).</math><ref name="t83"/><ref name="w07"/>


Line 66: Line 65:
  | url = http://www.deepdyve.com/lp/ios-press/elementary-yet-precise-worst-case-analysis-of-floyd-s-heap-50NW30HMxU}}.</ref>
  | url = http://www.deepdyve.com/lp/ios-press/elementary-yet-precise-worst-case-analysis-of-floyd-s-heap-50NW30HMxU}}.</ref>
कहाँ एस<sub>d</sub>(एन) एन और ई के मानक आधार-डी प्रतिनिधित्व के सभी अंकों का योग है<sub>d</sub>(n) n के गुणनखंडन में d का घातांक है।
कहाँ एस<sub>d</sub>(एन) एन और ई के मानक आधार-डी प्रतिनिधित्व के सभी अंकों का योग है<sub>d</sub>(n) n के गुणनखंडन में d का घातांक है।
इससे यह कम हो जाता है
इससे यह कम हो जाता है
:<math> 2 n - 2 s_2 (n) - e_2 (n) </math>,<ref name="Suchenek" />d = 2, और के लिए
:<math> 2 n - 2 s_2 (n) - e_2 (n) </math>,<ref name="Suchenek" />d = 2, और के लिए
Line 72: Line 72:
डी = 3 के लिए.
डी = 3 के लिए.


का स्थान उपयोग {{math|''d''-ary}} हीप, इन्सर्ट और डिलीट-मिन ऑपरेशंस के साथ, रैखिक है, क्योंकि यह हीप में आइटमों की सूची वाली सरणी के अलावा किसी अतिरिक्त भंडारण का उपयोग नहीं करता है।<ref name="t83"/><ref name="mp05"/>यदि मौजूदा वस्तुओं की प्राथमिकताओं में परिवर्तन का समर्थन करने की आवश्यकता है, तो किसी को वस्तुओं से ढेर में उनकी स्थिति तक पॉइंटर्स भी बनाए रखना होगा, जो फिर से केवल रैखिक भंडारण का उपयोग करता है।<ref name="t83"/>
का स्थान उपयोग {{math|''d''-ary}} हीप, इन्सर्ट और डिलीट-मिन ऑपरेशंस के साथ, रैखिक है, क्योंकि यह हीप में वस्तुों की सूची वाली सरणी के अलावा किसी अतिरिक्त स्टोरेज का उपयोग नहीं करता है।<ref name="t83"/><ref name="mp05"/>यदि मौजूदा वस्तुओं की प्राथमिकताओं में परिवर्तन का समर्थन करने की आवश्यकता है, तो किसी को वस्तुओं से हीप में उनकी स्थिति तक पॉइंटर्स भी बनाए रखना होगा, जो फिर से केवल रैखिक स्टोरेज का उपयोग करता है।<ref name="t83"/>
 
 
==अनुप्रयोग==
==अनुप्रयोग==
[[ग्राफ़ (अलग गणित)]] पर काम करते समय {{mvar|m}}किनारे और {{mvar|n}} कोने, सबसे छोटे पथों के लिए दिज्क्स्ट्रा का एल्गोरिदम और न्यूनतम फैले हुए पेड़ों के लिए प्राइम का एल्गोरिदम दोनों एक न्यूनतम-ढेर का उपयोग करते हैं जिसमें हैं {{math|''n''}} डिलीट-मिन ऑपरेशंस और उतने ही {{mvar|m}} कमी-प्राथमिकता संचालन। ए का उपयोग करके {{mvar|d}}-एरी ढेर के साथ {{math|1=''d'' = ''m''/''n''}}, इन दो प्रकार के परिचालनों के लिए कुल समय को एक-दूसरे के विरुद्ध संतुलित किया जा सकता है, जिससे कुल समय प्राप्त हो सकता है {{math|O(''m'' log<sub>''m''/''n''</sub> ''n'')}} एल्गोरिथम के लिए, में सुधार {{math|O(''m'' log ''n'')}} जब भी किनारों की संख्या शीर्षों की संख्या से काफी बड़ी होती है, तो इन एल्गोरिदम के बाइनरी हीप संस्करणों का चलने का समय।<ref name="j75"/><ref name="t2">{{harvtxt|Tarjan|1983}}, pp. 77 and 91.</ref> एक वैकल्पिक प्राथमिकता कतार डेटा संरचना, फाइबोनैचि हीप, और भी बेहतर सैद्धांतिक चलने का समय देता है {{math|O(''m'' + ''n'' log ''n'')}}, लेकिन व्यवहार में {{mvar|d}}-एरी हीप्स आम तौर पर इस एप्लिकेशन के लिए फाइबोनैचि हीप्स की तुलना में कम से कम तेज़ और अक्सर तेज़ होते हैं।<ref>{{citation
[[ग्राफ़ (अलग गणित)]] पर काम करते समय {{mvar|m}}किनारे और {{mvar|n}} कोने, सबसे छोटे पथों के लिए दिज्क्स्ट्रा का एल्गोरिदम और न्यूनतम फैले हुए पेड़ों के लिए प्राइम का एल्गोरिदम दोनों एक न्यूनतम-हीप का उपयोग करते है जिसमें है {{math|''n''}} डिलीट-मिन ऑपरेशंस और उतने ही {{mvar|m}} कमी-प्राथमिकता संचालन। ए का उपयोग करके {{mvar|d}}-एरी हीप के साथ {{math|1=''d'' = ''m''/''n''}}, इन दो प्रकार के परिचालनों के लिए कुल समय को एक-दूसरे के विरुद्ध संतुलित किया जा सकता है, जिससे कुल समय प्राप्त हो सकता है {{math|O(''m'' log<sub>''m''/''n''</sub> ''n'')}} एल्गोरिथम के लिए, में सुधार {{math|O(''m'' log ''n'')}} जब भी किनारों की संख्या शीर्षों की संख्या से काफी बड़ी होती है, तो इन एल्गोरिदम के बाइनरी हीप संस्करणों का चलने का समय।<ref name="j75"/><ref name="t2">{{harvtxt|Tarjan|1983}}, pp. 77 and 91.</ref> एक वैकल्पिक प्राथमिकता कतार डेटा संरचना, फाइबोनैचि हीप, और भी बेहतर सैद्धांतिक चलने का समय देता है {{math|O(''m'' + ''n'' log ''n'')}}, लेकिन व्यवहार में {{mvar|d}}-एरी हीप्स आम तौर पर इस एप्लिकेशन के लिए फाइबोनैचि हीप्स की तुलना में कम से कम तेज़ और अक्सर तेज़ होते है।<ref>{{citation
  | last1 = Cherkassky | first1 = Boris V.
  | last1 = Cherkassky | first1 = Boris V.
  | last2 = Goldberg | first2 = Andrew V. | author2-link = Andrew V. Goldberg
  | last2 = Goldberg | first2 = Andrew V. | author2-link = Andrew V. Goldberg
Line 90: Line 88:
  | url = ftp://www-cs-staff.stanford.edu/cs/theory/goldberg/stan-cs-93-1480.ps.gz#
  | url = ftp://www-cs-staff.stanford.edu/cs/theory/goldberg/stan-cs-93-1480.ps.gz#
}}.</ref>
}}.</ref>
व्यवहार में 4-हीप्स बाइनरी हीप्स से बेहतर प्रदर्शन कर सकते हैं, यहां तक ​​कि डिलीट-मिन ऑपरेशन के लिए भी।<ref name="t83"/><ref name="w07">{{citation
 
व्यवहार में 4-हीप्स बाइनरी हीप्स से बेहतर प्रदर्शन कर सकते है, यहां तक ​​कि डिलीट-मिन ऑपरेशन के लिए भी।<ref name="t83" /><ref name="w07">{{citation
  | last = Weiss | first = M. A.
  | last = Weiss | first = M. A.
  | contribution = ''d''-heaps
  | contribution = ''d''-heaps
Line 100: Line 99:
  | year = 2007}}.</ref> इसके अतिरिक्त,
  | year = 2007}}.</ref> इसके अतिरिक्त,
ए {{mvar|d}}-एरी हीप आम तौर पर कंप्यूटर की [[कैश मैमोरी]] के आकार से अधिक के हीप आकारों के लिए बाइनरी हीप की तुलना में बहुत तेजी से चलता है:
ए {{mvar|d}}-एरी हीप आम तौर पर कंप्यूटर की [[कैश मैमोरी]] के आकार से अधिक के हीप आकारों के लिए बाइनरी हीप की तुलना में बहुत तेजी से चलता है:
एक बाइनरी हीप के लिए आम तौर पर एक की तुलना में अधिक [[कैश मिस]] और [[ आभासी मेमोरी ]] पेज दोष की आवश्यकता होती है {{mvar|d}}-एरी ढेर, प्रत्येक अतिरिक्त तुलना द्वारा किए गए अतिरिक्त कार्य की तुलना में कहीं अधिक समय लेता है {{mvar|d}}-एरी हीप की तुलना बाइनरी हीप से की जाती है।<ref name="nmm91">{{citation
एक बाइनरी हीप के लिए आम तौर पर एक की तुलना में अधिक [[कैश मिस]] और [[ आभासी मेमोरी |आभासी मेमोरी]] पेज दोष की आवश्यकता होती है {{mvar|d}}-एरी हीप, प्रत्येक अतिरिक्त तुलना द्वारा किए गए अतिरिक्त कार्य की तुलना में कहीं अधिक समय लेता है {{mvar|d}}-एरी हीप की तुलना बाइनरी हीप से की जाती है।<ref name="nmm91">{{citation
  | last1 = Naor | first1 = D.
  | last1 = Naor | first1 = D.
  | last2 = Martel | first2 = C. U.
  | last2 = Martel | first2 = C. U.
Line 120: Line 119:
  | issue = 6
  | issue = 6
  | date = 11 June 2010}}.</ref>
  | date = 11 June 2010}}.</ref>
==संदर्भ==
==संदर्भ==
{{reflist}}
{{reflist}}

Revision as of 01:11, 24 July 2023

d-एरी हीप या d-हीप एक प्राथमिक डेटा संरचना होती है, जो बाइनरी हीप का एक सामान्यीकरण होता है जिसमें नोड्स होते है d 2।[1][2][3] इस प्रकार, एक बाइनरी हीप 2-हीप होती है, और एक टर्नरी हीप 3-हीप होती है। टारजन [2]और जेन्सेन एट अल के अनुसार[4] d-एरी हीप्स का आविष्कार डोनाल्ड बी. जॉनसन ने 1975 में किया था।[1]

यह डेटा संरचना धीमी प्राथमिकता वाले ऑपरेशनों को बाइनरी हीप्स की तुलना में अधिक तेज़ी से निष्पादित करने की अनुमति देती है। यह ट्रेडऑफ़ दिज्क्स्ट्रा के एल्गोरिदम के लिए बेहतर चलने वाले समय की ओर ले जाता है जिसमें प्राथमिकता वाले ऑपरेशन डिलीट मिन ऑपरेशंस की तुलना में अधिक सामान्य होते है।[1][5] इसके अतिरिक्त, d-एरी हीप्स में बाइनरी हीप्स की तुलना में बेहतर मेमोरी कैश व्यवहार होता है, जो उन्हें सैद्धांतिक रूप से बड़े सबसे खराब स्थिति वाले रनिंग टाइम के अतिरिक्त व्यवहार में अधिक तेज़ी से चलाने की अनुमति देता है।[6] बाइनरी हीप की तरह, d-एरी हीप्स एक इन-प्लेस डेटा संरचना होती है जो हीप की श्रृंखलाओं को संग्रहीत करने के लिए आवश्यक अतिरिक्त स्टोरेज का उपयोग नहीं करती है।[2][7]

डेटा संरचना

d-एरी हीप में एक ऐरे डेटा संरचना होती है n, जिनमें से प्रत्येक के साथ एक प्राथमिकता जुड़ी हुई होती है। इन वस्तुओं को संपूर्ण रूप से नोड्स के रूप में देखा जा सकता है d-एरी ट्री,: सरणी की स्थिति 0 पर (शून्य-आधारित नंबरिंग का उपयोग करके) ट्री बनाता है, स्थिति 1 से लेकर d तक इसके चाइल्ड नोड होते है इस प्रकार, स्थिति में वस्तु का जनक i (किसी के लिए i > 0) स्थिति पर वस्तु है (i − 1)/d और उसके चाइल्ड पदों पर वस्तु है di + 1 द्वारा di + d. बाइनरी हीप के अनुसार, मिन-हीप में, प्रत्येक वस्तु की एक प्राथमिकता होती है जो कम से कम उसके मूल के बराबर बड़ी होती है; अधिकतम-हीप में, प्रत्येक वस्तु की एक प्राथमिकता होती है जो उसके मूल से बड़ी नहीं होती है।[2][3]

न्यूनतम-हीप में न्यूनतम प्राथमिकता वाला वस्तु (या अधिकतम-हीप में अधिकतम प्राथमिकता वाला वस्तु) हमेशा सरणी के स्थान 0 पर पाया जा सकता है। इस वस्तु को प्राथमिकता कतार से हटाने के लिए, सरणी में अंतिम वस्तु x को उसके स्थान पर ले जाया जाता है, और सरणी की लंबाई एक से कम कर दी जाती है। फिर, जबकि वस्तु x और उसके बच्चे हीप संपत्ति को संतुष्ट नहीं करते है, वस्तु x को उसके बच्चों में से एक के साथ बदल दिया जाता है (मिन-हीप में सबसे छोटी प्राथमिकता वाला, या अधिकतम-हीप में सबसे बड़ी प्राथमिकता वाला) , इसे पेड़ में और बाद में सरणी में नीचे की ओर ले जाना, जब तक कि अंततः हीप संपत्ति संतुष्ट न हो जाए। उसी डाउनवर्ड स्वैपिंग प्रक्रिया का उपयोग न्यूनतम-हीप में किसी वस्तु की प्राथमिकता को बढ़ाने के लिए, या अधिकतम-हीप में किसी वस्तु की प्राथमिकता को कम करने के लिए किया जा सकता है।[2][3]

हीप में एक नया वस्तु डालने के लिए, वस्तु को सरणी के अंत में जोड़ा जाता है, और फिर जब हीप संपत्ति का उल्लंघन होता है तो इसे अपने मूल के साथ बदल दिया जाता है, इसे पेड़ में ऊपर की ओर और सरणी में पहले ले जाया जाता है, जब तक कि अंततः हीप संपत्ति संतुष्ट है. उसी अपवर्ड-स्वैपिंग प्रक्रिया का उपयोग न्यूनतम-हीप में किसी वस्तु की प्राथमिकता को कम करने, या अधिकतम-हीप में किसी वस्तु की प्राथमिकता को बढ़ाने के लिए किया जा सकता है।[2][3]

किसी सारणी से एक नया हीप बनाने के लिए n वस्तु, कोई वस्तु की स्थिति से शुरू करते हुए, रिवर्स ऑर्डर में वस्तु पर लूप कर सकता है n − 1 और वस्तु को स्थिति 0 पर समाप्त करते हुए, प्रत्येक वस्तु के लिए डाउनवर्ड-स्वैपिंग प्रक्रिया को लागू करना।[2][3]

विश्लेषण

में एक d-एरी हीप के साथ n इसमें वस्तु, ऊपर की ओर-स्वैपिंग प्रक्रिया और नीचे की ओर-स्वैपिंग प्रक्रिया दोनों ही कार्य कर सकते है logd n = log n / log d अदला-बदली। अपवर्ड-स्वैपिंग प्रक्रिया में, प्रत्येक स्वैप में किसी वस्तु की उसके मूल के साथ एकल तुलना शामिल होती है, और इसमें निरंतर समय लगता है। इसलिए, हीप में एक नया वस्तु डालने, न्यूनतम-हीप में किसी वस्तु की प्राथमिकता को कम करने, या अधिकतम-हीप में किसी वस्तु की प्राथमिकता बढ़ाने का समय है O(log n / log d). डाउनवर्ड-स्वैपिंग प्रक्रिया में, प्रत्येक स्वैप शामिल होता है d तुलना और लेता है O(d) समय: लगता है d − 1 बच्चों की न्यूनतम या अधिकतम संख्या निर्धारित करने के लिए तुलना और फिर माता-पिता के विरुद्ध एक और तुलना यह निर्धारित करने के लिए कि क्या अदला-बदली की आवश्यकता है। इसलिए, रूट वस्तु को हटाने, न्यूनतम-हीप में किसी वस्तु की प्राथमिकता बढ़ाने या अधिकतम-हीप में किसी वस्तु की प्राथमिकता कम करने का समय है O(d log n / log d).[2][3]

बनाते समय ए d-एन वस्तुओं के एक सेट से हीप, अधिकांश वस्तुएं ऐसी स्थिति में है जो अंततः पत्तियों को धारण करेंगी d-एरी ट्री, और उन वस्तुओं के लिए कोई नीचे की ओर स्वैपिंग नहीं की जाती है। अधिक से अधिक n/d + 1 वस्तु गैर-पत्ते है, और इन्हें कम से कम एक बार लागत पर नीचे की ओर बदला जा सकता है O(d) उनकी अदला-बदली के लिए बच्चे को ढूंढने का समय आ गया है। अधिक से अधिक n/d2 + 1 नोड्स को दो बार नीचे की ओर स्वैप किया जा सकता है, जिससे अतिरिक्त खर्च होता है O(d) दूसरे स्वैप की लागत पहले कार्यकाल में पहले से ही गणना की गई लागत से अधिक है, आदि। इसलिए, इस तरह से हीप बनाने में लगने वाला कुल समय है

[2][3]

उपरोक्त का सटीक मान (डी-एरी हीप के निर्माण के दौरान तुलना की सबसे खराब स्थिति वाली संख्या) को इसके बराबर माना जाता है:

,[8]

कहाँ एसd(एन) एन और ई के मानक आधार-डी प्रतिनिधित्व के सभी अंकों का योग हैd(n) n के गुणनखंडन में d का घातांक है।

इससे यह कम हो जाता है

,[8]d = 2, और के लिए
,[8]

डी = 3 के लिए.

का स्थान उपयोग d-ary हीप, इन्सर्ट और डिलीट-मिन ऑपरेशंस के साथ, रैखिक है, क्योंकि यह हीप में वस्तुों की सूची वाली सरणी के अलावा किसी अतिरिक्त स्टोरेज का उपयोग नहीं करता है।[2][7]यदि मौजूदा वस्तुओं की प्राथमिकताओं में परिवर्तन का समर्थन करने की आवश्यकता है, तो किसी को वस्तुओं से हीप में उनकी स्थिति तक पॉइंटर्स भी बनाए रखना होगा, जो फिर से केवल रैखिक स्टोरेज का उपयोग करता है।[2]

अनुप्रयोग

ग्राफ़ (अलग गणित) पर काम करते समय mकिनारे और n कोने, सबसे छोटे पथों के लिए दिज्क्स्ट्रा का एल्गोरिदम और न्यूनतम फैले हुए पेड़ों के लिए प्राइम का एल्गोरिदम दोनों एक न्यूनतम-हीप का उपयोग करते है जिसमें है n डिलीट-मिन ऑपरेशंस और उतने ही m कमी-प्राथमिकता संचालन। ए का उपयोग करके d-एरी हीप के साथ d = m/n, इन दो प्रकार के परिचालनों के लिए कुल समय को एक-दूसरे के विरुद्ध संतुलित किया जा सकता है, जिससे कुल समय प्राप्त हो सकता है O(m logm/n n) एल्गोरिथम के लिए, में सुधार O(m log n) जब भी किनारों की संख्या शीर्षों की संख्या से काफी बड़ी होती है, तो इन एल्गोरिदम के बाइनरी हीप संस्करणों का चलने का समय।[1][5] एक वैकल्पिक प्राथमिकता कतार डेटा संरचना, फाइबोनैचि हीप, और भी बेहतर सैद्धांतिक चलने का समय देता है O(m + n log n), लेकिन व्यवहार में d-एरी हीप्स आम तौर पर इस एप्लिकेशन के लिए फाइबोनैचि हीप्स की तुलना में कम से कम तेज़ और अक्सर तेज़ होते है।[9]

व्यवहार में 4-हीप्स बाइनरी हीप्स से बेहतर प्रदर्शन कर सकते है, यहां तक ​​कि डिलीट-मिन ऑपरेशन के लिए भी।[2][3] इसके अतिरिक्त, ए d-एरी हीप आम तौर पर कंप्यूटर की कैश मैमोरी के आकार से अधिक के हीप आकारों के लिए बाइनरी हीप की तुलना में बहुत तेजी से चलता है: एक बाइनरी हीप के लिए आम तौर पर एक की तुलना में अधिक कैश मिस और आभासी मेमोरी पेज दोष की आवश्यकता होती है d-एरी हीप, प्रत्येक अतिरिक्त तुलना द्वारा किए गए अतिरिक्त कार्य की तुलना में कहीं अधिक समय लेता है d-एरी हीप की तुलना बाइनरी हीप से की जाती है।[6][10]

संदर्भ

  1. 1.0 1.1 1.2 1.3 Johnson, D. B. (1975), "Priority queues with update and finding minimum spanning trees", Information Processing Letters, 4 (3): 53–57, doi:10.1016/0020-0190(75)90001-0.
  2. 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 Tarjan, R. E. (1983), "3.2. d-heaps", Data Structures and Network Algorithms, CBMS-NSF Regional Conference Series in Applied Mathematics, vol. 44, Society for Industrial and Applied Mathematics, pp. 34–38. Note that Tarjan uses 1-based numbering, not 0-based numbering, so his formulas for the parent and children of a node need to be adjusted when 0-based numbering is used.
  3. 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Weiss, M. A. (2007), "d-heaps", Data Structures and Algorithm Analysis (2nd ed.), Addison-Wesley, p. 216, ISBN 0-321-37013-9.
  4. Jensen, C.; Katajainen, J.; Vitale, F. (2004), An extended truth about heaps (PDF).
  5. 5.0 5.1 Tarjan (1983), pp. 77 and 91.
  6. 6.0 6.1 Naor, D.; Martel, C. U.; Matloff, N. S. (October 1991), "Performance of priority queue structures in a virtual memory environment", Computer Journal, 34 (5): 428–437, doi:10.1093/comjnl/34.5.428.
  7. 7.0 7.1 Mortensen, C. W.; Pettie, S. (2005), "The complexity of implicit and space efficient priority queues", Algorithms and Data Structures: 9th International Workshop, WADS 2005, Waterloo, Canada, August 15–17, 2005, Proceedings, Lecture Notes in Computer Science, vol. 3608, Springer-Verlag, pp. 49–60, doi:10.1007/11534273_6, ISBN 978-3-540-28101-6.
  8. 8.0 8.1 8.2 Suchenek, Marek A. (2012), "Elementary Yet Precise Worst-Case Analysis of Floyd's Heap-Construction Program", Fundamenta Informaticae, IOS Press, 120 (1): 75–92, doi:10.3233/FI-2012-751.
  9. Cherkassky, Boris V.; Goldberg, Andrew V.; Radzik, Tomasz (May 1996), "Shortest paths algorithms: Theory and experimental evaluation", Mathematical Programming, 73 (2): 129–174, CiteSeerX 10.1.1.48.752, doi:10.1007/BF02592101.
  10. Kamp, Poul-Henning (11 June 2010), "You're doing it wrong", ACM Queue, 8 (6).


बाहरी संबंध