Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

สมมาตร Min-Max Heaps


ฮีปต่ำสุด-สูงสุดที่สมมาตร (SMMH) ถูกกำหนดให้เป็นทรีไบนารีที่สมบูรณ์ซึ่งแต่ละโหนดยกเว้นรูทมีองค์ประกอบเดียว รูทของ SMMH ว่างเปล่า และจำนวนโหนดทั้งหมดใน SMMH คือ m + 1 โดยที่ m คือจำนวนขององค์ประกอบ

ให้ y เป็นโหนดใดๆ ของ SMMH ให้องค์ประกอบ (y) เป็นองค์ประกอบในทรีย่อยที่รูทที่ y แต่ไม่รวมองค์ประกอบ (ถ้ามี) ใน y สมมติว่าองค์ประกอบ (y) j=∅ y มีคุณสมบัติดังต่อไปนี้:

  • ลูกด้านซ้ายของ y มีองค์ประกอบขั้นต่ำในองค์ประกอบ (y)
  • ลูกที่ถูกต้องของ y (ถ้ามี) มีองค์ประกอบสูงสุดในองค์ประกอบ (y)

รูปที่ 1 แสดงตัวอย่าง SMMH ที่มี 12 องค์ประกอบ

เมื่อ y หมายถึงโหนดที่มี 81 องค์ประกอบ (y) ={7, 15, 31, 41}; ลูกด้านซ้ายของ y มีองค์ประกอบขั้นต่ำ 6 ในองค์ประกอบ (y); และลูกที่ถูกต้องของ y มีองค์ประกอบสูงสุด 41 ในองค์ประกอบ (y) เราอาจตรวจสอบได้ว่าทุกโหนด y ของ SMMH นี้มีคุณสมบัติตรงตามที่ระบุ

เนื่องจาก SMMH ถูกแสดงเป็นไบนารีทรีแบบสมบูรณ์ จึงถูกจัดเก็บเป็นโครงสร้างข้อมูลโดยปริยายซึ่งนำการแมปมาตรฐานของไบนารีทรีทั้งหมดไปใช้กับอาร์เรย์ เมื่อ m =1 อิลิเมนต์ต่ำสุดและสูงสุดจะเท่ากันและอยู่ในลูกด้านซ้ายของรูทของ SMMH

สมมาตร Min-Max Heaps

เมื่อ m> 1 อิลิเมนต์ต่ำสุดจะอยู่ที่ชายด์ด้านซ้ายของรูท และค่าสูงสุดจะอยู่ที่ชายด์ด้านขวาของรูท ดังนั้นการดำเนินการ getMin และ getMax จึงใช้เวลา O(1)

เป็นเรื่องง่ายที่จะเห็นว่าไบนารีทรีแบบสมบูรณ์ m + 1 โหนดพร้อมรูทว่างและองค์ประกอบหนึ่งองค์ประกอบในทุกโหนดคือ SMMH หากสิ่งต่อไปนี้เป็นจริง -

A1 − สำหรับทุกโหนด y ที่มีพี่น้องที่ถูกต้อง องค์ประกอบใน y จะน้อยกว่าหรือเท่ากับที่ในพี่น้องที่ถูกต้องของ y

A2 - สำหรับทุกโหนด y ที่มีปู่ย่าตายาย องค์ประกอบในลูกด้านซ้ายของปู่ย่าตายายจะน้อยกว่าหรือเท่ากับสิ่งนั้นใน y

A3 - สำหรับทุกโหนด y ที่มีปู่ย่าตายาย องค์ประกอบในลูกที่ถูกต้องของปู่ย่าตายายจะมากกว่าหรือเท่ากับสิ่งนั้นใน y

ขอให้สังเกตว่าถ้าคุณสมบัติ A1 เป็นที่พอใจที่โหนด y ดังนั้นอย่างน้อยหนึ่งใน A2 และ A3 อาจถูกละเมิดที่ y การใช้คุณสมบัติ A1 ถึง A3 เราไปถึงอัลกอริทึมอย่างง่ายเพื่อแทรกและลบองค์ประกอบ อัลกอริธึมเหล่านี้เป็นการปรับอย่างง่ายของอัลกอริทึมที่สอดคล้องกันสำหรับฮีปต่ำสุดและสูงสุด ความซับซ้อนคือ O(log m)

ที่นี่ เราระบุการดำเนินการแทรก สมมติว่าเราต้องการแทรก 3 ลงใน SMMH ของรูปที่ 1 เนื่องจาก SMMH เป็นไบนารีทรีที่สมบูรณ์ เราจึงต้องเพิ่มโหนดใหม่ให้กับ SMMH ในตำแหน่งที่แสดงในรูปที่ 2 โหนดใหม่มีป้ายกำกับว่า B.

ในตัวอย่างของเรา B จะแสดงถึงโหนดที่ว่างเปล่า ตอนนี้ 3 ถูกแทรกที่โหนด B.