Giải Thuật Cắt Tỉa Alpha-Beta¶
Tác giả: FPTOJ Team
Nội dung tham khảo từ: CP-Algorithms - Alpha-Beta Pruning
1. Bản chất vấn đề¶
Bài toán: Tối ưu hoá cây trò chơi¶
Trong trò chơi 2 người (Minimax), cây trò chơi có độ sâu \(d\) và hệ số phân nhánh \(b\). Thuật toán Minimax thường duyệt \(O(b^d)\) nút.
Alpha-Beta Pruning: Cắt tỉa các nhánh không ảnh hưởng kết quả \(\Rightarrow\) giảm xuống \(O(b^{d/2})\) trong trường hợp tốt nhất.
So sánh¶
| Thuật toán | Worst case | Best case |
|---|---|---|
| Minimax | \(O(b^d)\) | \(O(b^d)\) |
| Alpha-Beta | \(O(b^d)\) | \(O(b^{d/2})\) |
2. Tư duy cốt lõi¶
Ý tưởng: Cắt tỉa bằng khoảng \([\alpha, \beta]\)¶
- \(\alpha\): giá trị tốt nhất mà MAX player có thể đảm bảo (khởi tạo \(-\infty\)).
- \(\beta\): giá trị tốt nhất mà MIN player có thể đảm bảo (khởi tạo \(+\infty\)).
Cắt tỉa: Nếu \(\alpha \ge \beta\), nhánh hiện tại không thể ảnh hưởng kết quả → bỏ qua.
Trace chi tiết¶
Cây trò chơi (MAX đi trước):
graph TD
A["MAX\nα=-∞, β=+∞"] --> B["MIN\nα=-∞, β=+∞"]
A --> C["MIN\nα=?, β=?"]
B --> D["3"]
B --> E["5"]
B --> F["7"]
C --> G["2"]
C --> H["9"]
C --> I["1"]
Chạy Alpha-Beta:
| Bước | Nút | Loại | \(\alpha\) | \(\beta\) | Giá trị | Cắt tỉa? |
|---|---|---|---|---|---|---|
| 1 | D | Lá | — | — | 3 | |
| 2 | E | Lá | — | — | 5 | |
| 3 | F | Lá | — | — | 7 | |
| 4 | B (MIN) | MIN | — | — | \(\min(3,5,7) = 3\) | |
| 5 | A (MAX) | MAX | \(\alpha = 3\) | — | 3 | |
| 6 | G | Lá | — | — | 2 | \(2 < \alpha = 3\) → Cắt! |
| 7 | C (MIN) | MIN | — | — | \(\min(2, \ldots) = 2\) | |
| 8 | A (MAX) | MAX | — | — | \(\max(3, 2) = 3\) |
Kết quả: MAX chọn giá trị 3. Nhánh \(H\) và \(I\) bị cắt vì \(G\) đã cho giá trị 2 < \(\alpha = 3\).
3. Phân tích tính đúng đắn¶
Tại sao cắt tỉa đúng?¶
Nếu tại nút MIN, giá trị hiện tại \(v \le \alpha\) (giá trị tốt nhất của MAX ở nút tổ tiên), thì MAX đã có cách đạt \(\alpha\). Nút MIN sẽ không chọn giá trị \(> v\) (vì MIN muốn minimize). Do đó, MAX không bao giờ chọn nhánh này → cắt an toàn.
4. Đánh giá độ phức tạp¶
| Trường hợp | Thời gian |
|---|---|
| Best case (tối ưu thứ tự) | \(O(b^{d/2})\) |
| Worst case | \(O(b^d)\) |