रेडिक्स हीप: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
रेडिक्स हीप [[मोनोटोन प्राथमिकता कतार|मोनोटोन प्राथमिकता क्यू]] के ऑपरेशन को | '''रेडिक्स हीप''' [[मोनोटोन प्राथमिकता कतार|'''मोनोटोन प्राथमिकता क्यू''']] के ऑपरेशन को समझने के लिए एक [[डेटा संरचना|'''डेटा संरचना''']] है। अवयवों का समूह जिसके लिए कुंजी निर्दिष्ट की गई है, उसे प्रबंधित किया जा सकता है। इस प्रकार से ऑपरेशन का रन टाइम सबसे बड़ी और सबसे छोटी कुंजी या स्थिरांक के बीच के अंतर पर निर्भर करता है। अतः डेटा संरचना में मुख्य रूप से बकेट की श्रृंखला होती है, जिसका आकार तीव्रता से बढ़ता है। | ||
==आवश्यकताएँ== | ==आवश्यकताएँ== | ||
# सभी कुंजियाँ [[प्राकृतिक संख्या]] | # सभी कुंजियाँ '''[[प्राकृतिक संख्या|प्राकृतिक संख्याएँ]]''' हैं; | ||
# मैक्स. कुंजी - मिन. स्थिरांक C के लिए कुंजी <math>\le</math> C; | # मैक्स. कुंजी - मिन. स्थिरांक C के लिए कुंजी <math>\le</math> C; | ||
# एक्सट्रैक्ट-मिन ऑपरेशन मोनोटोनिक है; अर्थात्, क्रमिक एक्स्ट्रैक्ट-मिन कॉल्स द्वारा लौटाए गए मान मोनोटोनिक रूप से बढ़ रहे हैं। | # एक्सट्रैक्ट-मिन ऑपरेशन मोनोटोनिक है; अर्थात्, क्रमिक एक्स्ट्रैक्ट-मिन कॉल्स द्वारा लौटाए गए मान मोनोटोनिक रूप से बढ़ रहे हैं। | ||
==डेटा संरचना का विवरण== | ==डेटा संरचना का विवरण== | ||
तीन सबसे महत्वपूर्ण [[क्षेत्र (कंप्यूटर विज्ञान)]] हैं: | इस प्रकार से तीन सबसे महत्वपूर्ण [[क्षेत्र (कंप्यूटर विज्ञान)]] निम्नलिखित हैं: | ||
# आकार <math>B := \lfloor log(C+1)\rfloor + 1</math> का <math>b</math>, न्यूनतम सूचकांक के रूप में 0 के साथ, बकेट को संग्रहीत करता है; | # आकार <math>B := \lfloor log(C+1)\rfloor + 1</math> का <math>b</math>, न्यूनतम सूचकांक के रूप में '''0''' के साथ, बकेट को संग्रहीत करता है; | ||
# आकार <math>B+1</math> का <math>u</math>, न्यूनतम सूचकांक के रूप में 0 के साथ, बकेट की (निचली) सीमाओं को संग्रहीत करें; | # आकार <math>B+1</math> का <math>u</math>, न्यूनतम सूचकांक के रूप में '''0''' के साथ, बकेट की (निचली) सीमाओं को संग्रहीत करें; | ||
# <math>bNum</math>, हीप में प्रत्येक अवयव <math>x</math> के लिए वह बकेट रखता है जिसमें वह संग्रहीत है। | # '''<math>bNum</math>''', हीप में प्रत्येक अवयव <math>x</math> के लिए वह बकेट रखता है जिसमें वह संग्रहीत है। | ||
[[Image:RadixHeap1.png]] | '''[[Image:RadixHeap1.png]]''' | ||
उपरोक्त चित्र डेटा संरचना को दर्शाता है। निम्नलिखित अपरिवर्तनीय लागू होते हैं: | उपरोक्त चित्र डेटा संरचना को दर्शाता है। इस प्रकार से निम्नलिखित अपरिवर्तनीय लागू होते हैं: | ||
# <math>b[i] < u[i+1]</math> में <math>u[i] \le</math> कुंजी: <math>b[i]</math> में कुंजियाँ <math>u[i+1]</math> या <math>u[i]</math> में मान के माध्यम से ऊपर या नीचे सीमित होती हैं। | # <math>b[i] < u[i+1]</math> में <math>u[i] \le</math> कुंजी: <math>b[i]</math> में कुंजियाँ <math>u[i+1]</math> या <math>u[i]</math> में मान के माध्यम से ऊपर या नीचे सीमित होती हैं। | ||
# <math>i = 1, \ldots, B-1</math> के लिए <math>u[0] = 0, u[1] = u[0] + 1, u[B] = \infty</math> और <math>0 \le u[i+1]-u[i] \le 2^{i-1}</math>: बकेट का आकार तीव्रता से बढ़ता है। | # <math>i = 1, \ldots, B-1</math> के लिए <math>u[0] = 0, u[1] = u[0] + 1, u[B] = \infty</math> और <math>0 \le u[i+1]-u[i] \le 2^{i-1}</math>: बकेट का आकार तीव्रता से बढ़ता है। | ||
सीमाओं की घातीय वृद्धि (और इस प्रकार बकेट की सीमा) पर ध्यान देना महत्वपूर्ण है। इस प्रकार क्षेत्र मात्राओं की लघुगणकीय निर्भरता मान C की होती है, जो दो प्रमुख मानों के बीच मैक्स अंतर है। | अतः सीमाओं की घातीय वृद्धि (और इस प्रकार बकेट की सीमा) पर ध्यान देना महत्वपूर्ण है। इस प्रकार क्षेत्र मात्राओं की लघुगणकीय निर्भरता मान '''C''' की होती है, जो दो प्रमुख मानों के बीच मैक्स अंतर है। | ||
==ऑपरेशन== | ==ऑपरेशन== | ||
आरंभीकरण के समय, रिक्त बकेट उत्पन्न होते हैं और निचली सीमा <math>u</math> उत्पन्न होती है (अपरिवर्तनीय 2 के अनुसार); | इस प्रकार से आरंभीकरण के समय, रिक्त बकेट उत्पन्न होते हैं और निचली सीमा <math>u</math> उत्पन्न होती है (अपरिवर्तनीय '''2''' के अनुसार); रन टाइम <math>O(B)</math>। | ||
इन्सर्ट के समय, नवीन अवयव <math>x</math> बकेट के माध्यम से दाएं से बाएं ओर रैखिक रूप से ले जाया जाता है और <math>k(x)</math> वाला नवीन अवयव बाएं बकेट में उस <math>u[i] \ge k(x)</math>में संग्रहीत किया जाता है; | अतः इन्सर्ट के समय, नवीन अवयव <math>x</math> बकेट के माध्यम से दाएं से बाएं ओर रैखिक रूप से ले जाया जाता है और <math>k(x)</math> वाला नवीन अवयव बाएं बकेट में उस <math>u[i] \ge k(x)</math>में संग्रहीत किया जाता है; रन टाइम <math>O(B)</math>। | ||
निम्न-कुंजी के लिए, पहले कुंजी मान घटाया जाता है (अपरिवर्तनीयों के अनुपालन की जाँच करना)। फिर <math>bNum</math> क्षेत्र का उपयोग अवयव का पता लगाने के लिए किया जाता है और यदि आवश्यक हो, तो इसे सम्मिलित ऑपरेशन के अनुरूप बाईं ओर दोहराया जाता है। | इस प्रकार से निम्न-कुंजी के लिए, पहले कुंजी मान घटाया जाता है (अपरिवर्तनीयों के अनुपालन की जाँच करना)। फिर <math>bNum</math> क्षेत्र का उपयोग अवयव का पता लगाने के लिए किया जाता है और यदि आवश्यक हो, तो इसे सम्मिलित ऑपरेशन के अनुरूप बाईं ओर दोहराया जाता है। अतः रन टाइम <math>O(1)</math> (परिशोधन) है। | ||
एक्सट्रेक्ट-मिन ऑपरेशन बकेट <math>b[0]</math> से एक अवयव को हटाता है और उसे वापस कर देता है। यदि बकेट <math>b[0]</math> अभी तक रिक्त नहीं है, तो ऑपरेशन समाप्त हो गया है। यदि, तथापि, यह रिक्त है, तो अगली बड़ी गैर-रिक्त बकेट की खोज की जाती है, इसके सबसे छोटे अवयव <math>k</math> को ट्रैक किया जाता है और <math>u[0]</math> को k पर समूहित किया जाता है (इसके लिए मोनोटोनिसिटी आवश्यक है)। फिर, अपरिवर्तनीयों के अनुसार, बकेट की सीमाओं को फिर से परिभाषित किया जाता है और अवयवों को नवनिर्मित बकेट <math>b[i]</math> हटा दिया जाता है; | अतः एक्सट्रेक्ट-मिन ऑपरेशन बकेट <math>b[0]</math> से एक अवयव को हटाता है और उसे वापस कर देता है। इस प्रकार से यदि बकेट <math>b[0]</math> अभी तक रिक्त नहीं है, तो ऑपरेशन समाप्त हो गया है। यदि, तथापि, यह रिक्त है, तो अगली बड़ी गैर-रिक्त बकेट की खोज की जाती है, इसके सबसे छोटे अवयव <math>k</math> को ट्रैक किया जाता है और <math>u[0]</math> को '''k''' पर समूहित किया जाता है (इसके लिए मोनोटोनिसिटी आवश्यक है)। फिर, अपरिवर्तनीयों के अनुसार, बकेट की सीमाओं को फिर से परिभाषित किया जाता है और अवयवों को नवनिर्मित बकेट <math>b[i]</math> हटा दिया जाता है; रन टाइम <math>O(1)</math> (परिशोधन)। | ||
यदि प्रदर्शित होता है, तो क्षेत्र <math>bNum</math> अपडेट किया जाता है। | इस प्रकार से यदि प्रदर्शित होता है, तो क्षेत्र <math>bNum</math> अपडेट किया जाता है। | ||
==संदर्भ== | ==संदर्भ== | ||
Revision as of 22:36, 23 July 2023
रेडिक्स हीप मोनोटोन प्राथमिकता क्यू के ऑपरेशन को समझने के लिए एक डेटा संरचना है। अवयवों का समूह जिसके लिए कुंजी निर्दिष्ट की गई है, उसे प्रबंधित किया जा सकता है। इस प्रकार से ऑपरेशन का रन टाइम सबसे बड़ी और सबसे छोटी कुंजी या स्थिरांक के बीच के अंतर पर निर्भर करता है। अतः डेटा संरचना में मुख्य रूप से बकेट की श्रृंखला होती है, जिसका आकार तीव्रता से बढ़ता है।
आवश्यकताएँ
- सभी कुंजियाँ प्राकृतिक संख्याएँ हैं;
- मैक्स. कुंजी - मिन. स्थिरांक C के लिए कुंजी C;
- एक्सट्रैक्ट-मिन ऑपरेशन मोनोटोनिक है; अर्थात्, क्रमिक एक्स्ट्रैक्ट-मिन कॉल्स द्वारा लौटाए गए मान मोनोटोनिक रूप से बढ़ रहे हैं।
डेटा संरचना का विवरण
इस प्रकार से तीन सबसे महत्वपूर्ण क्षेत्र (कंप्यूटर विज्ञान) निम्नलिखित हैं:
- आकार का , न्यूनतम सूचकांक के रूप में 0 के साथ, बकेट को संग्रहीत करता है;
- आकार का , न्यूनतम सूचकांक के रूप में 0 के साथ, बकेट की (निचली) सीमाओं को संग्रहीत करें;
- , हीप में प्रत्येक अवयव के लिए वह बकेट रखता है जिसमें वह संग्रहीत है।
उपरोक्त चित्र डेटा संरचना को दर्शाता है। इस प्रकार से निम्नलिखित अपरिवर्तनीय लागू होते हैं:
- में कुंजी: में कुंजियाँ या में मान के माध्यम से ऊपर या नीचे सीमित होती हैं।
- के लिए और : बकेट का आकार तीव्रता से बढ़ता है।
अतः सीमाओं की घातीय वृद्धि (और इस प्रकार बकेट की सीमा) पर ध्यान देना महत्वपूर्ण है। इस प्रकार क्षेत्र मात्राओं की लघुगणकीय निर्भरता मान C की होती है, जो दो प्रमुख मानों के बीच मैक्स अंतर है।
ऑपरेशन
इस प्रकार से आरंभीकरण के समय, रिक्त बकेट उत्पन्न होते हैं और निचली सीमा उत्पन्न होती है (अपरिवर्तनीय 2 के अनुसार); रन टाइम ।
अतः इन्सर्ट के समय, नवीन अवयव बकेट के माध्यम से दाएं से बाएं ओर रैखिक रूप से ले जाया जाता है और वाला नवीन अवयव बाएं बकेट में उस में संग्रहीत किया जाता है; रन टाइम ।
इस प्रकार से निम्न-कुंजी के लिए, पहले कुंजी मान घटाया जाता है (अपरिवर्तनीयों के अनुपालन की जाँच करना)। फिर क्षेत्र का उपयोग अवयव का पता लगाने के लिए किया जाता है और यदि आवश्यक हो, तो इसे सम्मिलित ऑपरेशन के अनुरूप बाईं ओर दोहराया जाता है। अतः रन टाइम (परिशोधन) है।
अतः एक्सट्रेक्ट-मिन ऑपरेशन बकेट से एक अवयव को हटाता है और उसे वापस कर देता है। इस प्रकार से यदि बकेट अभी तक रिक्त नहीं है, तो ऑपरेशन समाप्त हो गया है। यदि, तथापि, यह रिक्त है, तो अगली बड़ी गैर-रिक्त बकेट की खोज की जाती है, इसके सबसे छोटे अवयव को ट्रैक किया जाता है और को k पर समूहित किया जाता है (इसके लिए मोनोटोनिसिटी आवश्यक है)। फिर, अपरिवर्तनीयों के अनुसार, बकेट की सीमाओं को फिर से परिभाषित किया जाता है और अवयवों को नवनिर्मित बकेट हटा दिया जाता है; रन टाइम (परिशोधन)।
इस प्रकार से यदि प्रदर्शित होता है, तो क्षेत्र अपडेट किया जाता है।
संदर्भ
- B.V. Cherkassky, A.V. Goldberg, C. Silverstein: Buckets, Heaps, Lists and Monotone Priority Queues (Abstract), in: Proceedings of the Eight Annual ACM-SIAM Symposium on Discrete Algorithms. January 1997, pp. 83-92.