Skip to Content
🧮 CTDL & Giải thuật⛰️ Heap & Priority Queue

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

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/maxO(1)
Thêm phần tửO(log n)
Xóa min/maxO(log n)

K phần tử lớn nhất

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ụngMô tả
DijkstraĐường đi ngắn nhất
Task schedulingXử lý theo priority
Median finderTìm median dòng dữ liệu

Tiếp theo: Đồ thị (Graph)

Last updated on