我的ID为(1001, 1002, 1003, 1004, 1005, 1006)
的商品。有respective quantities are (2, 5, 1, 1, 5, 2)
:现在我有以下数据。每行都有一个offerId。
offerId :{[Item_Id, Item_quantity_on_which_offer_Applied, Discount per quantity]}
1 :{[1001, 2, 21]}
4 :{[1002, 5, 5]}
6 :{[1003, 1, 25] [1004, 1, 25]}
5 :{[1004, 1, 20]}
3 :{[1005, 5, 17.5] [1002, 5, 17.5]}
2 :{[1005, 2, 18.33] [1001, 2, 26] [1006, 2, 21.67]}
说明当应用商品ID 1
时,我会在21 rs处获得商品2
数量的商品ID 1002
。每个数量的折扣,即我得到21
rs。 1
数量1002
的折扣。
目标我想获得最佳优惠组合。例如,在上述情况下,最佳报价组合将是:
OfferId:2(折扣= 132(即(18.33 + 26 + 21.67)* 2))
OfferId:3(注意:对于3件商品1005
和3件商品1002
,因为2
件商品1005
数量已经在提供Id 2)。 (折扣= 105(即(17.5 + 17.5)* 3))
现在,项目1002
的剩余数量为2
,因此:
offerId:4(适用于2
项目1002
的数量)(折扣= 10(即5 * 2))
offerId:6(折扣=(25 + 25)* 1 = 50)
因此,简而言之,要约2,3,4,6将为我提供最佳的优惠组合,其中4
项2
适用于商品1002
,
为3件商品3
和3件商品1005
提供1002
。
以上是我希望根据数量计算最佳报价组合的结果。
到目前为止,我已经能够在不考虑数量的情况下找到最佳报价组合。但现在我的要求是考虑商品数量,然后找到最佳商品组合。
如果有人能为我提供伪代码,那将非常有用。非常感谢任何建议。
P.S。我在Golang中编写代码,但欢迎使用任何语言的解决方案。
我希望我能正确地提出问题。如果需要有关于问题的更多信息,请在下方评论。 提前谢谢。
答案 0 :(得分:0)
即使每种类型只有一个项目且每个商品都给出相同的总折扣(比如1美元),这是 NP-hard ,因为NP难问题{{3可以简化为:对于每一组,为总折扣$ 1的相同元素提供报价。由于所有报价都提供相同的好处,因此对此构造的问题实例的最佳解决方案是使用最大数的报价,此解决方案直接对应于原始Set Packing的最佳解决方案问题
因此,没有希望通过多项式时间解决问题。