Max Heap คืออะไร?
Max Heap เป็น Binary Tree แบบสมบูรณ์ (Complete Binary Tree) ที่ค่าของแต่ละ parent node มีค่า >= ค่าของ child nodes ทั้งคู่ เริ่มจาก root node เป็นค่าสูงสุด
ตัวอย่าง: ใช้ PriorityQueue (Java Built-in)
import java.util.*;
public class Demo {
public static void main(String args[]) {
// PriorityQueue ปกติเป็น Min Heap -> ใช้ reverseOrder() ทำให้เป็น Max Heap
PriorityQueue maxHeap = new PriorityQueue<>(Collections.reverseOrder());
maxHeap.add(43);
maxHeap.add(56);
maxHeap.add(99);
System.out.println("สมาชิกใน Priority Queue (Max Heap):");
maxHeap.forEach(System.out::println); // 99, 43, 56 (ไม่เรียงเต็มที่ แค่ root มากที่สุด)
maxHeap.poll(); // ลบค่าสูงสุด (root) ออก
System.out.println("หลัง poll() - เหลือ:");
maxHeap.forEach(System.out::println); // 56, 43
Object[] arr = maxHeap.toArray();
System.out.println("Array representation:");
for (Object val : arr)
System.out.println("Value: " + val);
}
}
ผลลัพธ์
สมาชิกใน Priority Queue (Max Heap): 99 43 56 หลัง poll() - เหลือ: 56 43 Array representation: Value: 56 Value: 43
คำอธิบาย
PriorityQueue ใน Java เป็น Min Heap โดยค่าเริ่มต้น ใช้ Collections.reverseOrder() หรือ Comparator.reverseOrder() เพื่อกลับลำดับเป็น Max Heap
ออปเตอร์ชันหลัก
| เมธอด | คำอธิบาย | Complexity |
|---|---|---|
add(e) / offer(e) | เพิ่มสมาชิก | O(log n) |
poll() | ดึงและลบ root (ค่าสูงสุด) | O(log n) |
peek() | ดู root โดยไม่ลบ | O(1) |
size() | จำนวนสมาชิก | O(1) |