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

मेल करने योग्य प्राथमिकता कतार संचालन

रैंडमाइज्ड मेल्डेबल हीप (जिसे मेल्डेबल प्रायोरिटी क्यू भी कहा जाता है) कई सामान्य ऑपरेशनों का समर्थन करता है। इन्हें इंसर्शन, डिलीशन और एक सर्च ऑपरेशन, फाइंडमिन के रूप में जाना जाता है। सम्मिलन और हटाने के संचालन को एक अतिरिक्त ऑपरेशन के संदर्भ में लागू किया जाता है, जो मेल करने योग्य ढेर, मेल्ड (ए 1, ए 2) के लिए विशिष्ट होता है।

पिघला

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

इस मेल्ड ऑपरेशन की एक उत्कृष्ट विशेषता यह है कि इसे पुनरावर्ती रूप से परिभाषित किया जा सकता है। यदि या तो ढेर शून्य मान से जुड़े हैं, तो विलय एक खाली सेट के साथ पूरा किया जाता है और विधि गैर-खाली ढेर के रूट नोड को वापस कर देती है। यदि A1 और A2 दोनों शून्य नहीं हैं, तो जांचें कि क्या A1> A2 है। अगर ऐसा है, तो दोनों को स्वैप करें। इसलिए यह सुनिश्चित किया जाता है कि A1

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

सम्मिलित करें

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

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

निकालें

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

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

FindMin

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

अतिरिक्त संचालन

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

  • Remove(a) - नोड a और उसकी कुंजी को हीप से हटा दें।
  • Absorb(P) - पिघलने योग्य ढेर P के सभी तत्वों को इस ढेर में जोड़ दें, इस प्रक्रिया में P को खाली कर दें।
  • DecreaseKey(a, q) - नोड में कुंजी को a से q तक घटाता है (पूर्व शर्त:q <=a.p).

  1. सी . में लिंक्ड सूची का उपयोग कर प्राथमिकता कतार

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

  1. सी ++ मानक टेम्पलेट लाइब्रेरी (एसटीएल) में प्राथमिकता कतार

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

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

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