ฮีป Meldable แบบสุ่ม (เรียกอีกอย่างว่า Meldable Priority Queue) รองรับการดำเนินการทั่วไปจำนวนหนึ่ง สิ่งเหล่านี้เรียกว่าการแทรก การลบ และการดำเนินการค้นหา findMin การดำเนินการแทรกและการลบจะดำเนินการในแง่ของการดำเนินการเพิ่มเติมเฉพาะสำหรับฮีปที่หลอมได้ Meld(A1, A2)
เมล
เป้าหมายพื้นฐานของการดำเนินการ Meld (เรียกอีกอย่างว่าการรวม) คือการรับสองฮีป (โดยนำแต่ละโหนดรูทฮีป) A1 และ A2 และรวมเข้าด้วยกัน ส่งผลให้โหนดฮีปเดียวกลับมา โหนดฮีปนี้เป็นโหนดรูทของฮีปที่มีองค์ประกอบทั้งหมดจากทรีย่อยทั้งสองที่รูทที่ A1 และ A2
คุณลักษณะที่ยอดเยี่ยมของการทำงานแบบผสมผสานนี้คือสามารถกำหนดแบบเรียกซ้ำได้ หากฮีปใดเชื่อมโยงกับค่า null การผสานจะสำเร็จด้วยชุดว่าง และวิธีการส่งคืนโหนดรูทของฮีปที่ไม่ว่างเปล่า หากทั้ง A1 และ A2 ไม่เป็นศูนย์ ให้ตรวจสอบว่า A1> A2 ถ้าใช่ให้สลับทั้งสองอย่าง ดังนั้นจึงมั่นใจได้ว่า A1
เมื่อการดำเนินการ Meld เสร็จสมบูรณ์ การแทรกลงในฮีปที่หลอมได้นั้นง่ายมาก ขั้นแรก โหนดใหม่ a จะถูกสร้างขึ้นโดยมีค่า p โหนดใหม่นี้จะถูกรวมเข้ากับโหนดรูทของฮีปอย่างง่ายดาย
เหมือนกับการดำเนินการแทรกที่ง่าย Remove() ใช้การดำเนินการ Meld เพื่อกำจัดโหนดรูทออกจากฮีป ซึ่งทำได้โดยเพียงแค่รวมลูกสองคนของโหนดรูทเข้าด้วยกันและทำให้โหนดที่ส่งคืนเป็นรูทใหม่
อาจเป็นการดำเนินการที่ง่ายที่สุดสำหรับฮีปที่หลอมได้แบบสุ่ม 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