Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

मेल्डेबल प्रायोरिटी क्यू ऑपरेशन्स


रैंडमाइज़्ड मेल्डेबल हीप (जिसे मेल्डेबल प्रायोरिटी क्यू भी कहा जाता है) कई सामान्य ऑपरेशन्स को सपोर्ट करता है। ये इन्सर्शन, डिलीशन, और एक खोज ऑपरेशन, findMin हैं। इन्सर्शन और डिलीशन ऑपरेशन्स को मेल्डेबल हीप के लिए विशिष्ट एक अतिरिक्त ऑपरेशन, Meld(A1, A2) के संदर्भ में लागू किया जाता है।

मेल्ड

मेल्ड (जिसे मर्ज भी कहा जाता है) ऑपरेशन का मूल लक्ष्य दो हीप्स (प्रत्येक हीप के रूट नोड्स को लेकर), A1 और A2 को लेना, उन्हें मर्ज करना, और एक सिंगल हीप नोड को परिणाम के रूप में वापस करना है। यह हीप नोड A1 और A2 पर रूटेड दो सबट्रीज के सभी एलिमेंट्स को समाहित करने वाले हीप का रूट नोड है।

इस मेल्ड ऑपरेशन की एक उत्कृष्ट विशेषता यह है कि इसे रिकर्सिवली परिभाषित किया जा सकता है। यदि कोई हीप नल मान से जुड़ा है, तो मर्ज एक खाली सेट के साथ पूरा होता है और मेथड नॉन-एम्प्टी हीप का रूट नोड लौटाता है। यदि दोनों A1 और A2 निल नहीं हैं, तो जांचें कि क्या A1 > A2। यदि हां, तो दोनों को स्वैप करें। इसलिए यह सुनिश्चित होता है कि A1 < A2 और मर्ज्ड हीप का रूट नोड A1 को समाहित करेगा। हम फिर A2 को A1.left या A1.right के साथ रिकर्सिवली मर्ज करते हैं। यह चरण वह है जहां रैंडमाइजेशन आता है क्योंकि किस साइड के साथ मर्ज करना है इसका निर्णय कॉइन टॉस द्वारा किया जाता है।

function Meld(Node A1, Node A2) if A1 is nil => return A2 if A2 is nil => return A1 if A1 > A2 => swap A1 and A2 if coin_toss is 0 => A1.left = Meld(A1.left, A2) else A1.right = Meld(A1.right, A2) return A1

इन्सर्ट

मेल्ड ऑपरेशन पूरा होने के साथ, मेल्डेबल हीप में इन्सर्ट करना बहुत सरल है। पहले, मान p को समाहित करने वाला एक नया नोड, a, बनाया जाता है। यह नया नोड फिर हीप के रूट नोड के साथ बस मर्ज हो जाता है।

function Insert(p) Node a = new Node a.p = p root = Meld(a, root) root.parent = nil increment node count

रिमूव

इन्सर्ट ऑपरेशन की तरह ही आसान, Remove() रूट नोड को हीप से हटाने के लिए मेल्ड ऑपरेशन को लागू करता है। यह रूट नोड के दो चिल्ड्रन को बस मर्ज करके और वापस किए गए नोड को नया रूट बनाकर पूरा किया जाता है।

function Remove() rootNode = Meld(rootNode.left, rootNode.right) if rootNode is not nil => rootNode.parent = nil decrement node count

FindMin

रैंडमाइज़्ड मेल्डेबल हीप के लिए संभवतः सबसे सरल ऑपरेशन, FindMin() बस हीप के रूट नोड में संग्रहीत वर्तमान एलिमेंट को लौटाता है।

अतिरिक्त ऑपरेशन्स

मेल्डेबल हीप के लिए कुछ अतिरिक्त ऑपरेशन्स जो O(log n) वर्स्ट-केस दक्षता भी रखते हैं:

  • Remove(a) - नोड a और उसकी की को हीप से हटाएं।
  • Absorb(P) - मेल्डेबल हीप P के सभी एलिमेंट्स को इस हीप में जोड़ें, इस प्रक्रिया में P को खाली करें।
  • DecreaseKey(a, q) - नोड a में की को q तक घटाएं (प्री-कंडीशन: q ≤ a.p)।
  1. C में लिंक्ड लिस्ट का उपयोग करके प्रायोरिटी क्यू (Priority Queue) C में लिंक्ड लिस्ट का उपयोग करके प्रायोरिटी क्यू (Priority Queue)

    हमें डेटा और पूर्णांक मान के रूप में प्राथमिकता दी गई है और कार्य दी गई प्राथमिकता के अनुसार एक लिंक्ड लिस्ट बनाना और परिणाम प्रदर्शित करना है। क्यू एक FIFO डेटा संरचना है जिसमें पहले डाला गया तत्व हटाया जाने वाला पहला होता है। एक प्रायोरिटी क्यू एक प्रकार की क्यू है जिसमें तत्वों को प्राथमिकता के

  1. C++ STL में प्राथमिकता कतार (Priority Queue) C++ STL में प्राथमिकता कतार (Priority Queue)

    प्राथमिकता कतार प्राथमिकता वाले तत्वों के संग्रह को संग्रहीत करने के लिए एक अमूर्त डेटा प्रकार है जो उनकी प्राथमिकताओं के आधार पर एक तत्व के सम्मिलन और विलोपन का समर्थन करता है, अर्थात् पहली प्राथमिकता वाले तत्व को किसी भी समय हटाया जा सकता है। प्राथमिकता कतार स्टैक, कतार, सूची आदि की तरह अपने स्थान

  1. C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार

    हमें डेटा और प्राथमिकता एक पूर्णांक मान के रूप में दी गई है और कार्य दिए गए प्राथमिकता के अनुसार डबल लिंक्ड लिस्ट बनाना और परिणाम प्रदर्शित करना है।कतार एक FIFO डेटा संरचना है जिसमें पहले डाला गया तत्व सबसे पहले हटाया जाता है। प्राथमिकता कतार एक प्रकार की कतार है जिसमें तत्वों को प्राथमिकता के आधार