Tôi có một danh sách các mục đó là một chút như thế này:Làm cách nào để chia danh sách các mục thành các phân vùng bằng nhau theo trọng lượng của sản phẩm?
[
["orange", 9],
["watermelon", 3],
["grapefruit", 6],
["peach", 8],
["durian", 2],
["apricot", 6]
]
Tôi muốn chia danh sách này vào ... nói hai nhóm sao cho tổng các trọng lượng của các mục trong mỗi nhóm như bằng nhau, ví dụ:
List 1:
orange: 9
durian: 2
apricot: 6
TOTAL: 17
List 2:
watermelon: 3
grapefruit: 6
peach: 8
TOTAL: 17
Hiện tại tôi đang giải quyết điều này bằng cách duyệt qua danh sách theo thứ tự theo cách zigzag'esque. Chỉ định các vật phẩm có trọng lượng lớn hơn trong lần chuyền đầu tiên cho mỗi nhóm, đảm bảo các vật phẩm có trọng lượng ít hơn trên lần vượt thứ hai, v.v.
Điều này hoạt động tốt, nhưng nó có sai sót. Tôi nghĩ rằng một lần thứ hai thông qua các nhóm mà tôi trao đổi các mục giữa chúng sẽ dẫn đến các nhóm được phân phối đồng đều hơn, nhưng mã liên quan có thể trở nên quá phức tạp.
Có ai đó biết cách hiệu quả hơn hoặc thông minh hơn để thực hiện việc này không?
Cảm ơn!
Xin chào Chris, trước hết, cảm ơn đã cho tôi tên của vấn đề này, "vấn đề phân vùng". Và tất nhiên, cảm ơn câu trả lời cho! Cách tiếp cận tham lam âm thanh hữu ích và nó có thể mang lại kết quả tốt hơn so với phương pháp hiện tại của tôi.Nhưng tôi đoán tôi sẽ đi cho phương pháp bạo lực, bộ dữ liệu của tôi chỉ tạo ra 1680 kết hợp, vì vậy tôi đoán điều này sẽ chỉ rơi vào danh mục "dữ liệu ánh sáng" ... Và tôi sẽ có thể cung cấp một số biến đổi thành dung dịch bằng cách chọn ngẫu nhiên giữa các dung dịch N đầu. Cảm ơn một lần nữa! –