Các Hàm Hoán Vị, Chỉnh Hợp, Tổ Hợp trong Python (itertools)
Trong Python, đặc biệt khi giải các bài toán về tổ hợp, xác suất hoặc sinh dữ liệu thử nghiệm, thư viện itertools cung cấp các hàm mạnh mẽ để tạo ra:
- Hoán vị (permutations)
- Chỉnh hợp (permutations với số phần tử lấy ít hơn)
- Tổ hợp (combinations)
- Tổ hợp lặp (combinations_with_replacement)
- Tích Đề Các (product)
1. Hoán vị (permutations)
Hoán vị là việc sắp xếp tất cả các phần tử theo mọi thứ tự có thể. Đây là dạng liệt kê phổ biến.
from itertools import permutations
items = [1, 2, 3]
# Hoán vị 3 phần tử
for p in permutations(items):
print(p)
Kết quả:
- (1, 2, 3)
- (1, 3, 2)
- (2, 1, 3)
- (2, 3, 1)
- (3, 1, 2)
- (3, 2, 1)
Hoán vị chọn k phần tử (chỉnh hợp)
from itertools import permutations
items = ['A', 'B', 'C']
# Chỉnh hợp 2 phần tử
for p in permutations(items, 2):
print(p)
2. Tổ hợp (combinations)
Tổ hợp chỉ quan tâm chọn phần tử, không quan tâm thứ tự.
from itertools import combinations
items = [1, 2, 3]
# Tổ hợp 2 phần tử
for c in combinations(items, 2):
print(c)
Kết quả:
- (1, 2)
- (1, 3)
- (2, 3)
3. Tổ hợp lặp (combinations_with_replacement)
Dùng khi phần tử được phép lặp lại trong tổ hợp.
from itertools import combinations_with_replacement
items = ['A', 'B', 'C']
for c in combinations_with_replacement(items, 2):
print(c)
Kết quả:
- ('A', 'A')
- ('A', 'B')
- ('A', 'C')
- ('B', 'B')
- ('B', 'C')
- ('C', 'C')
4. Tích Đề Các (product)
product() tạo ra mọi kết hợp có lặp giữa các tập giá trị — rất hữu ích để mô phỏng.
from itertools import product
dice = [1, 2, 3, 4, 5, 6]
# Mô phỏng tung 2 viên xúc xắc
for p in product(dice, repeat=2):
print(p)
5. Bảng so sánh nhanh
| Hàm | Mô tả | Quan tâm thứ tự? | Có lặp? |
|---|---|---|---|
| permutations(n) | Hoán vị toàn bộ | Có | Không |
| permutations(n, k) | Chỉnh hợp A(n, k) | Có | Không |
| combinations(n, k) | Tổ hợp C(n, k) | Không | Không |
| combinations_with_replacement(n, k) | Tổ hợp lặp | Không | Có |
| product(...) | Tích đề các | Có | Có |
6. Ứng dụng thực tế
- Bài toán xác suất – thống kê.
- Sinh mật khẩu thử (brute force).
- Tạo dữ liệu test cho chương trình.
- Dạy học về tổ hợp – hoán vị.
7. Ví dụ tổng hợp
from itertools import permutations, combinations, product
letters = ['A', 'B', 'C']
print("Hoán vị:")
print(list(permutations(letters)))
print("\nChỉnh hợp 2 phần tử:")
print(list(permutations(letters, 2)))
print("\nTổ hợp 2 phần tử:")
print(list(combinations(letters, 2)))
print("\nTích đề các (lặp):")
print(list(product(letters, repeat=2)))
Kết luận
Thư viện itertools là công cụ mạnh giúp Python xử lý các bài toán hoán vị, chỉnh hợp, tổ hợp và mô phỏng. Đây là nội dung rất phù hợp cho học sinh THCS – THPT khi học xác suất, tổ hợp hoặc lập trình.
Nhận xét
Đăng nhận xét