Tôi đang tìm kiếm một giải pháp cho vấn đề sau, nhưng tôi gặp khó khăn khi xây dựng nó một cách hợp lý, và sau đó tìm một thuật toán thích hợp để giải quyết nó.
Xem xét danh sách các mặt hàng được đặt trong túi mua sắm: 1, 2, 3, 4 ...
Mỗi mục có thể là một phần của một hoặc nhiều chương trình khuyến mãi: A, B, C, D
Chúng tôi muốn áp dụng bộ khuyến mãi sao cho tối đa hóa giá trị giảm giá, không có mặt hàng nào được phép tham gia nhiều hơn một khuyến mãi, nhưng mỗi khuyến mãi có thể được áp dụng nhiều lần.
Khuyến mãi có thể được định nghĩa theo một số cách, nhưng hiện tại tôi chỉ đang xem xét một loại 'Mua 2 mặt hàng đủ điều kiện, lưu X', tôi hy vọng tôi sẽ có thể khái quát từ đây.
Ví dụ của tôi sẽ là:
- Khuyến mãi A - Mua 2 Tiết kiệm 8
- Khuyến mãi B - Mua 2 Tiết kiệm 10
Khuyến mãi C - Mua 2 Lưu 6
Mục 1 - Đủ điều kiện cho A, B
- Mục 2 - Đủ điều kiện cho B
- Mục 3 - Đủ điều kiện cho A, C
- Mục 4 - Đủ điều kiện cho B, C
Ở đây khá dễ dàng để thấy rằng ứng dụng chính xác của các chương trình khuyến mãi là A đến Mục 1, 3 và B đến 2, 4. Điều này giúp giảm tổng cộng 18 lần.
Trong trường hợp lớn hơn, nó trở nên khó khăn, do đó cần phải giải quyết bằng thuật toán.
Tôi đã thử như sau:
- Liệt kê tất cả các kết hợp có thể có của Khuyến mãi mà chúng tôi có thể áp dụng.
- Loại bỏ bất kỳ thứ gì rõ ràng là kém (ví dụ: bản sao trực tiếp của chương trình khuyến mãi có giá trị cao hơn).
- Áp dụng bất kỳ giá trị nào không trùng lặp với các chương trình khuyến mãi khác (ví dụ: Nếu Mục 1 và 2 chỉ có giá trị cho khuyến mãi A, thì hãy áp dụng khuyến mãi đó).
- Lấy bộ còn lại và thử tìm kiếm loại chi nhánh và kết quả trên kết quả.
Tuy nhiên, điều này có thể mất nhiều thời gian (đối với các bộ lớn có mức giảm giá tương tự).
Tôi cảm thấy đây là một loại vấn đề Knapsack hoặc Assign, nhưng tôi không thể viết nó một cách hợp lý. Không thể viết nó một cách hợp lý tôi không thể giải quyết nó.
Đây có phải là một biến thể được công nhận của một vấn đề? Bất kỳ trợ giúp nào để tấn công nó sẽ được đánh giá rất cao, đặc biệt là với mã psuedo để giúp giải quyết nó