ฮีพ (Heap)
โครง สร้างข้อมูลแบบฮีพ (Heap) เป็นโครงสร้างข้อมูลแบบพิเศษของไบนารีทรีที่มีคุณสมบัติไบนารีทรีแบบสมบูรณ์ ซึ่งค่าของโหนดรากจะมากกว่าหรือเท่ากับค่าของโหนดลูกเสมอ
คุณ สมบัติของไบนารี่ทรี
· แต่ ละ Subtree ค่าของ root >= child เสมอ
· Max heap
· หรือ แต่ละ subtree ค่าของ root <= child เสมอ
· Min heap
· เป็น complete หรือ nearly complete
· leaf ทุกโหนด จะอยู่ level เดียวกัน
· ถ้า ไม่ complete,leaf จะเรียงอยู่ทางด้านซ้ายมือ
โครง สร้างของ Max Heap
โครง สร้างของ Mix Heap
Heap Operation
1. Insert & Reheap up
· insert โหนดใหม่ที่ level ล่างสุด ณ ตำแหน่งว่างด้านซ้ายสุด
· reheap up ปรับ tree หลังจาก insert ให้เป็น heap
2. Delete & Reheap down
· delete ที่ root เท่านั้นและนำ node ที่ level ล่างสุดตำแหน่งขวาสุดขึ้นมาแทน
· reheap down ปรับ tree หลังจาก delete ให้เป็น heap
Reheap up
· สลับที่ระหว่างโหนดที่ insert เข้ามากับ parent ของมันเองตามหลักของ heap
· ทำซ้ำกับโหนดเดิมจนกว่าจะอยู่ ตำแหน่งที่ถูกต้อง
Reheap down
· สลับที่ระหว่างโหนดที่ตำแหน่ง root กับโหนดลูกของมันเองจนกว่าโหนดนั้นจะอยู่ตำแหน่งที่ถูกต้อง
· ทำซ้ำจนกว่า root จะอยู่ตำแหน่งที่ถูกต้อง
การ แทน heap ในหน่วยความจำ
· นิยมแทน heap ลงในอาร์เรย์ 1 มิติ เนื่องจากคุณสมบัติของการเป็น nearly complete ของตัวมันเอง
· ข้อมูลที่จัดเก็บลงในอาร์เรย์ จะเรียงต่อกันไปตามลำดับจากซ้ายไปขวาของ แต่ละ level ใน heap
· จะได้ความสัมพันธ์ของตำแหน่ง ข้อมูลใน heap คือ
– parent ของโหนด i ใดๆ = i/2 ถ้า i <> 1 (โหนดรูทอยู่ที่ตำแหน่งแรกของอาร์เรย์)
– left child ของโหนด i ใดๆ = 2i (โหนดลูกซ้ายจะอยู่ที่ 2 เท่าของโหนดพ่อ)
– right child ของโหนด i ใดๆ = 2i + 1(โหนดลูกขวาอยู่ที่ตำแหน่ง 2 เท่าบวก 1)