Heap & Priority Queue
Heap là gì?
Heap là cây nhị phân hoàn chỉnh thỏa mãn heap property:
- Max Heap: Node cha ≥ các node con
- Min Heap: Node cha ≤ các node con
💡
Heap giúp lấy phần tử max/min trong O(1) và thêm/xóa trong O(log n)!
Sử dụng Heap
Python
import heapq
# Min Heap (mặc định)
heap = []
heapq.heappush(heap, 30)
heapq.heappush(heap, 10)
heapq.heappush(heap, 20)
print(heap[0]) # Xem min: 10
print(heapq.heappop(heap)) # Lấy min: 10
# Max Heap: đảo dấu
max_heap = []
heapq.heappush(max_heap, -30)
print(-heapq.heappop(max_heap)) # 30Độ phức tạp
| Thao tác | Độ phức tạp |
|---|---|
| Xem min/max | O(1) |
| Thêm phần tử | O(log n) |
| Xóa min/max | O(log n) |
K phần tử lớn nhất
Python
import heapq
def k_largest(nums, k):
return heapq.nlargest(k, nums)
# Hoặc dùng min heap kích thước k
def k_largest_heap(nums, k):
heap = nums[:k]
heapq.heapify(heap)
for num in nums[k:]:
if num > heap[0]:
heapq.heapreplace(heap, num)
return sorted(heap, reverse=True)Ứng dụng thực tế
| Ứng dụng | Mô tả |
|---|---|
| Dijkstra | Đường đi ngắn nhất |
| Task scheduling | Xử lý theo priority |
| Median finder | Tìm median dòng dữ liệu |
Tiếp theo: Đồ thị (Graph)
Last updated on