找到最佳报价组合的算法,该组合在给定的一组项目上给出最大折扣

时间:2016-11-17 10:51:53

标签: algorithm

我的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将为我提供最佳的优惠组合,其中42适用于商品1002, 为3件商品3和3件商品1005提供1002

以上是我希望根据数量计算最佳报价组合的结果。

到目前为止,我已经能够在不考虑数量的情况下找到最佳报价组合。但现在我的要求是考虑商品数量,然后找到最佳商品组合。

如果有人能为我提供伪代码,那将非常有用。非常感谢任何建议。

P.S。我在Golang中编写代码,但欢迎使用任何语言的解决方案。

我希望我能正确地提出问题。如果需要有关于问题的更多信息,请在下方评论。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

即使每种类型只有一个项目且每个商品都给出相同的总折扣(比如1美元),这是 NP-hard ,因为NP难问题{{3可以简化为:对于每一组,为总折扣$ 1的相同元素提供报价。由于所有报价都提供相同的好处,因此对此构造的问题实例的最佳解决方案是使用最大的报价,此解决方案直接对应于原始Set Packing的最佳解决方案问题

因此,没有希望通过多项式时间解决问题。