Lý lịch:
Có khoảng 60 sinh viên tại trường nội trú tôi làm việc. Người tư vấn yêu cầu đồng nghiệp của tôi và tôi đưa ra một cách tốt hơn để đưa ra cách sắp xếp chỗ ngồi cho bữa tối hơn là bằng tay. Anh ấy muốn bài tập cho phần còn lại của năm học. Ông cũng yêu cầu chúng tôi cố gắng giải quyết một số vấn đề mà ông đã nghe về các sinh viên và giảng viên.
Các ràng buộc:
- Hầu hết các sinh viên không đến từ Mỹ, vì vậy khi họ được bao quanh bởi những người có cùng quốc tịch (ví dụ, tại bàn ăn tối), họ nói ngôn ngữ mà họ thông thạo, thay vì thực hành tiếng Anh,
- Khiếu nại được đưa ra khi học sinh đã ngồi ở một bàn nhất định "quá nhiều" lần,
- hoặc nếu họ ngồi cùng một bàn nhiều hơn hai lần liên tiếp,
- và một số học sinh không hợp nhau, vì vậy họ không thể ngồi cùng nhau.
Đầu vào:
Trong thời gian chạy, chương trình được cung cấp với:
- Một tập hợp những người,
- Một tập hợp các bảng và
- Mỗi bàn có số lượng ghế khác nhau (cho phép lặp lại)
Kích thước của cả hai bộ và kích thước của mỗi bảng không thay đổi giữa mỗi lần gán.
Các xét nghiệm:
Tôi đang sử dụng 18 người có quốc tịch khác nhau và bao gồm 4 bảng cỡ 3 đến 6. Tôi đã chọn các số mà tôi nghĩ có ý nghĩa cho tập dữ liệu đó:
- Không quá 3 người có cùng quốc tịch có thể ngồi cùng một lúc
- Không ai có thể ngồi vào bàn quá 4 lần
Các kết quả:
Tôi đã chạy trình tạo khoảng 15 lần mà không thay đổi dữ liệu đầu vào. Mỗi lần, nó đi kèm với bất cứ nơi nào từ 6 đến 12 "tuần" bài tập.
Câu hỏi:
(ít nhất là quan trọng nhất)
- Tại sao tôi nhận được một số lượng bài tập được tạo khác nhau mỗi khi tôi chạy chương trình? Tập dữ liệu không thay đổi giữa các lần chạy.
- Làm thế nào để tôi tìm thấy ...
- số lượng người tối thiểu có cùng quốc tịch có thể ngồi tại một bàn nhất định
- số lần tối thiểu của tổng số lần họ ngồi tại một bàn nhất định
- tối đa hóa số lượng bài tập được tạo ra?
- Làm thế nào để tôi đảm bảo rằng đây thực sự là những con số chính xác?
Biên tập:
Mỗi lần tôi tạo một nhiệm vụ mới, tôi gọi Collections.shuffle(List)
vào danh sách những người để ngẫu nhiên hóa đơn hàng của họ. Sau đó, tôi chuyển danh sách các bảng và mọi người sang một phương thức quay lui dựa trên triển khai tám nữ hoàng của kapilid trên github để gán mọi người vào các bảng.