रैंडमाइज्ड मेल्डेबल हीप (जिसे मेल्डेबल प्रायोरिटी क्यू भी कहा जाता है) कई सामान्य ऑपरेशनों का समर्थन करता है। इन्हें इंसर्शन, डिलीशन और एक सर्च ऑपरेशन, फाइंडमिन के रूप में जाना जाता है। सम्मिलन और हटाने के संचालन को एक अतिरिक्त ऑपरेशन के संदर्भ में लागू किया जाता है, जो मेल करने योग्य ढेर, मेल्ड (ए 1, ए 2) के लिए विशिष्ट होता है।
पिघला
मेल्ड (मर्ज के रूप में भी कहा जाता है) ऑपरेशन का मूल लक्ष्य दो ढेर (प्रत्येक ढेर रूट नोड्स ले कर), ए 1 और ए 2 लेना है, और परिणामस्वरूप एक ही ढेर नोड लौटाते हुए उन्हें विलय करना है। यह हीप नोड एक ढेर का रूट नोड है जिसमें A1 और A2 पर रूट किए गए दो सबट्री के सभी तत्व होते हैं।
इस मेल्ड ऑपरेशन की एक उत्कृष्ट विशेषता यह है कि इसे पुनरावर्ती रूप से परिभाषित किया जा सकता है। यदि या तो ढेर शून्य मान से जुड़े हैं, तो विलय एक खाली सेट के साथ पूरा किया जाता है और विधि गैर-खाली ढेर के रूट नोड को वापस कर देती है। यदि A1 और A2 दोनों शून्य नहीं हैं, तो जांचें कि क्या A1> A2 है। अगर ऐसा है, तो दोनों को स्वैप करें। इसलिए यह सुनिश्चित किया जाता है कि A1
मेल्ड ऑपरेशन पूरा होने के साथ, मेल्डेबल हीप में डालना इतना सरल है। सबसे पहले, एक नया नोड, a, बनाया जाता है जिसमें मान p होता है। इस नए नोड को तब केवल हीप्स रूट नोड के साथ मर्ज कर दिया जाता है।
इंसर्ट ऑपरेशन के समान ही, निकालें () हीप से रूट नोड को खत्म करने के लिए मेल्ड ऑपरेशन को लागू करता है। यह केवल रूट नोड के दो बच्चों को मिलाकर और लौटाए गए नोड को नया रूट बनाकर पूरा किया जाता है।
रैंडमाइज्ड मेल्डेबल हीप के लिए संभवत:सबसे सरल ऑपरेशन, FindMin () हीप के रूट नोड में संग्रहीत वर्तमान तत्व को लौटाता है।
अतिरिक्त संचालन
कुछ अतिरिक्त ऑपरेशन जो मेल्डेबल हीप के लिए लागू किए जा सकते हैं जिनमें O(logn) सबसे खराब स्थिति वाली दक्षता भी होती है -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
सम्मिलित करें
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