Cây khung nhỏ nhất — Prim & Kruskal
Cây khung nhỏ nhất (MST — Minimum Spanning Tree) là tập cạnh nối liền tất cả các đỉnh với tổng trọng số nhỏ nhất và không có chu trình. Bạn sẽ học hai cách kinh điển: Prim (mở rộng dần bằng heap) và Kruskal (sắp cạnh tăng dần + Union-Find).
1. Trực quan: nối làng bằng đường rẻ nhất
Có nhiều ngôi làng, bạn muốn xây đường nối tất cả chúng với tổng chi phí thấp nhất. Không cần nối mọi cặp — chỉ cần liên thông. Kết quả là một cây (V đỉnh, V-1 cạnh, không vòng) có tổng trọng số nhỏ nhất.
Do thi (trong so tren canh):
1 3
A ------ B ------ C
| | |
4| 2| 5|
| | |
D ------ E ------ F
6 1
MST chon: A-B(1), B-E(2), E-F(1), B-C(3), A-D(4)
Tong = 1+2+1+3+4 = 11, dung 5 canh noi 6 dinh.
2. Hai chiến lược tham lam
| Prim | Kruskal | |
|---|---|---|
| Ý tưởng | Lớn dần một cây từ một đỉnh | Gom cạnh rẻ nhất, tránh tạo vòng |
| Công cụ | Heap chọn cạnh rẻ nhất ra biên | Sắp cạnh + Union-Find |
| Hợp với | Đồ thị dày (nhiều cạnh) | Đồ thị thưa, danh sách cạnh |
Cả hai đều tham lam nhưng đều cho ra MST tối ưu nhờ "tính chất cắt": cạnh nhẹ nhất băng qua một lát cắt luôn nằm trong MST nào đó.
3. Chạy debug: Prim
4. Code chạy được
5. Kruskal — sắp cạnh + Union-Find
Kruskal đi từ góc nhìn cạnh: sắp toàn bộ cạnh tăng dần theo trọng số, rồi lần lượt nhận cạnh nào không tạo chu trình. Để biết hai đầu cạnh đã cùng một nhóm chưa, ta dùng Union-Find.
6. Phân tích & so sánh
| Thuật toán | Thời gian | Cấu trúc chính |
|---|---|---|
| Prim (binary heap) | O(E log V) | Hàng đợi ưu tiên |
| Kruskal | O(E log E) | Sắp xếp + Union-Find |
Bẫy thường gặp:
- Quên kiểm tra
v in seen(Prim) hoặc cùng nhóm (Kruskal) → tạo chu trình, sai MST. - MST yêu cầu đồ thị liên thông; nếu không sẽ chỉ ra rừng khung (spanning forest).
- MST làm việc với trọng số cạnh, không liên quan tới đường đi ngắn nhất.
7. Mẫu nhận diện
- "Nối tất cả các điểm với chi phí nhỏ nhất", "kéo cáp / xây đường rẻ nhất" → MST.
- Dữ liệu cho dạng danh sách cạnh → Kruskal thường tiện hơn.
- Đồ thị dày hoặc cho dạng danh sách kề → Prim với heap.
8. 🎮 Trò chơi: Hiểu MST
9. Quiz kiểm tra nhanh
10. Hoàn thành
…☑️ Tiếp theo: 3.3.7 — Union-Find (DSU) (cấu trúc đứng sau Kruskal).