Matroid - Lý Thuyết Tổ Hợp Nâng Cao¶
Tác giả: FPTOJ Team
Nội dung tham khảo từ: CP-Algorithms - Matroid
1. Bản chất vấn đề¶
Định nghĩa Matroid¶
Matroid \(\mathcal{M} = (E, \mathcal{I})\) gồm:
- \(E\): tập hợp các phần tử (ground set).
- \(\mathcal{I} \subseteq 2^E\): tập các tập con độc lập (independent sets).
Tính chất:
- \(\emptyset \in \mathcal{I}\) (tập rỗng độc lập).
- Nếu \(A \in \mathcal{I}\) và \(B \subseteq A\) thì \(B \in \mathcal{I}\) (hereditary).
- Nếu \(A, B \in \mathcal{I}\) và \(|A| < |B|\) thì \(\exists x \in B \setminus A\) sao cho \(A \cup \{x\} \in \mathcal{I}\) (exchange property).
Các loại Matroid¶
| Loại | Ground set \(E\) | Tập con độc lập |
|---|---|---|
| Uniform matroid \(U_{k,n}\) | \(n\) phần tử | Tập con kích thước \(\le k\) |
| Linear matroid | Các vector | Tập con tuyến tính độc lập |
| Graphic matroid | Các cạnh đồ thị | Tập con không tạo chu trình (rừng, cây khung) |
| Partition matroid | Phân hoạch \(E\) | Chọn \(\le k_i\) phần tử từ mỗi nhóm |
2. Tư duy cốt lõi¶
Thuật toán tham lam trên Matroid¶
Bài toán: Tìm tập con độc lập lớn nhất có trọng số lớn nhất.
Thuật toán: Sắp xếp phần tử theo trọng số giảm dần. Thêm phần tử vào tập kết quả nếu tập kết quả vẫn độc lập.
Kết quả: Thuật toán tham lam cho nghiệm tối ưu trên mọi matroid!
Trace chi tiết¶
Graphic matroid (cây khung trọng số lớn nhất): Đồ thị 4 đỉnh, 5 cạnh.
| Cạnh | Trọng số |
|---|---|
| \((0,1)\) | 10 |
| \((1,2)\) | 8 |
| \((0,2)\) | 5 |
| \((2,3)\) | 7 |
| \((0,3)\) | 3 |
Sắp xếp giảm dần: \((0,1)=10\), \((1,2)=8\), \((2,3)=7\), \((0,2)=5\), \((0,3)=3\)
| Bước | Cạnh | Thêm? | Lý do | Kết quả |
|---|---|---|---|---|
| 1 | \((0,1)\) w=10 | Có | Không tạo chu trình | \(\{(0,1)\}\) |
| 2 | \((1,2)\) w=8 | Có | Không tạo chu trình | \(\{(0,1),(1,2)\}\) |
| 3 | \((2,3)\) w=7 | Có | Không tạo chu trình | \(\{(0,1),(1,2),(2,3)\}\) |
| 4 | \((0,2)\) w=5 | Không | Tạo chu trình \(0-1-2-0\) | |
| 5 | \((0,3)\) w=3 | Không | Tạo chu trình \(0-1-2-3-0\) |
Kết quả: Cây khung最大 = \(\{(0,1),(1,2),(2,3)\}\), trọng số = \(10+8+7 = 25\).
3. Phân tích tính đúng đắn¶
Tại sao tham lam đúng trên Matroid?¶
Định lý: Thuật toán tham lam tìm được tập con độc lập có tổng trọng số lớn nhất trên mọi matroid.
Chứng minh: Giả sử thuật toán chọn \(A = \{a_1, a_2, \ldots, a_k\}\) (theo thứ tự giảm dần). Nghiệm tối ưu là \(B = \{b_1, b_2, \ldots, b_m\}\).
Bằng exchange property, có thể biến đổi \(A\) thành \(B\) mà không giảm tổng trọng số. Do đó \(A\) là tối ưu.
4. Đánh giá độ phức tạp¶
| Thao tác | Thời gian |
|---|---|
| Tham lam trên Matroid | $O( |
\(T\) = thời gian kiểm tra tính độc lập.