Danh sách nhóm không lặp và số thành viên
```python
def all_groups(groups):
result = []
for row in groups:
for group in row:
if group not in result:
result.append(group)
return result
```
```python
def member_count(groups, group):
count = 0
for row in groups:
if group in row:
count += 1
return count
```
all_groups gom các tên nhóm xuất hiện trong dữ liệu, mỗi nhóm một lần theo thứ tự gặp đầu. member_count đếm số tài khoản có tham gia một nhóm, không cộng số nhóm của một tài khoản.
Với tệp mẫu: Lập trình3 thành viên,Đọc sách3,Cờ vua2,Âm nhạc3. Đây là số tài khoản trong tệp, không suy ra số thành viên của một dịch vụ thật.
Chỉ so những nhóm tài khoản chưa tham gia
```python
def suggested_group(groups, index):
best, best_count = None, 0
for group in all_groups(groups):
if group not in groups[index]:
count = member_count(groups, group)
if best is None or count > best_count:
best, best_count = group, count
return best, best_count
```
index phải là chỉ số tìm thấy hợp lệ. Nhóm đã có trong groups[index] bị loại trước khi so số thành viên. Mỗi nhóm hợp lệ có count lớn hơn mức tốt nhất hiện tại thì cập nhật cả tên và số đếm. Nếu đồng hạng, mã giữ nhóm gặp trước theo all_groups.
Khởi tạo best=None giúp xử lí dữ liệu chưa có nhóm hoặc tài khoản đã tham gia mọi nhóm. Khi không còn ứng viên, hàm trả(None,0), không truy cập nhóm đầu của danh sách rỗng.
Đối chiếu điều kiện chưa tham gia
Chạy:
```text
python3 g11-cs-danh-sach-chung.py nhom g11-cs-nhom.inp "Mẫu A"
python3 g11-cs-danh-sach-chung.py nhom g11-cs-nhom.inp "Mẫu B"
```
A đã tham gia Lập trình,Đọc sách,Cờ vua nên được gợi ý Âm nhạc với 3 thành viên. B đã có tất cả nhóm trong tệp nên nhận thông báo không có nhóm chưa tham gia.
Với D, Lập trình và Đọc sách cùng có 3 thành viên và D chưa tham gia cả hai. Bài toán cho phép chọn một nhóm tối đa; mã giữ Lập trình vì gặp trước. Thử tên chưa có để kiểm thông báo lỗi trước khi dùng index.
Bài luyện
Vì sao Mẫu A được gợi ý Âm nhạc trong tệp mẫu?
Thỏa cả điều kiện chưa tham gia và tối đa trong các ứng viên.
Bài yêu cầu nhóm chưa tham gia.
Tệp còn ba nhóm khác.
Bài đang tìm số thành viên lớn nhất.
Lời giải
Ba nhóm khác đều đã thuộc danh sách của A. Âm nhạc là ứng viên còn lại, có B,C,D tham gia nên số thành viên3.
Bài luyện
Tài khoản đã tham gia mọi nhóm có trong tệp cần nhận kết quả gì?
Có thể gây lỗi và không tạo được ứng viên hợp lệ.
Miền ứng viên sau khi lọc là rỗng.
Vi phạm điều kiện chưa tham gia.
Chưa có dữ liệu để kết luận như vậy.
Lời giải
Mọi nhóm bị điều kiện chưa tham gia loại. Giữ best=None và thông báo phù hợp; không lấy một nhóm đã bị loại làm đáp án.
Bài luyện
Khi hai nhóm chưa tham gia có cùng số thành viên lớn nhất, bài toán này cho phép gì?
Nhóm mới không thuộc dữ liệu.
Sẽ không còn đạt mục tiêu lớn nhất.
Mỗi nhóm đó đều đạt số thành viên tối đa.
Đồng hạng không làm mất ứng viên.
Lời giải
Yêu cầu tìm một nhóm đông nhất trong các nhóm chưa tham gia. Nếu có nhiều nhóm cùng tối đa, chọn một nhóm hợp lệ; mã đã nêu ưu tiên nhóm gặp trước.
Đang học