我需要关于棘手问题的专家建议。
场景是:
产品由唯一的ProductID标识并具有销售价格。很经典的场景。 该产品还可以享受一次或多次折扣。
折扣可以是不同类型。折扣的一个例子是:
订单项只能获得一个折扣,因此一旦订单项打折,就无法获得其他折扣。
折扣-A :购买两件或两件以上产品可获得以下任何产品20%的折扣
折扣-B :购买产品并从以下产品中获得50%折扣
购物篮:包含以下内容的订单项:
计算#1 :
计算#2 :
这意味着 Discount-A 和 Discount-B 的组合将为客户提供最佳折扣。
购物篮:包含以下内容的订单项:
计算#1 :
计算#2 :
这意味着应用 Discount-A 会为客户提供最佳折扣。
为了计算给定购物篮的最佳折扣,必须对所有产品组合和这些产品的可用折扣进行评估。
通常一篮子中有30-40个订单项,每个都有0-3个折扣。
基本上我一直在寻找一种有效的方法来进行这种计算。
现在我用于应用折扣的算法类似于:
但这并不足够,因为它没有尝试不同的订单项/折扣组合。
我一直在寻找可以解决这类问题的标准化算法,但到目前为止没有运气。
希望收到你的来信:)
答案 0 :(得分:12)
假设:
然后问题变成一个被称为assignment问题的问题,并且可以使用Hungarian algorithm在O(n ^ 3)中进行最佳求解。
如果在产品b上使用折扣a,您将需要计算包含所节省金钱的矩阵M [a,b]。 (如果折扣不适用,则将保存的钱设置为0。)
匈牙利算法将计算为节省最多资金的产品分配折扣的方式。
如果您没有相同数量的折扣和产品,则添加虚拟折扣(零节省)或虚拟产品(再次零节省),直到折扣数量与产品数量相匹配。