我需要专家意见来解决一个棘手的问题。
情景如下:
- 电子商务网站
- 大量产品
- 这些产品上混合了大量折扣
一个产品由唯一的ProductID标识,并拥有销售价格。这是非常经典的场景。同时,该产品也可以参加一个或多个折扣活动。
折扣可以有不同类型。其中之一的例子是:
- 购买一组产品中的两个或两个以上产品,每个产品享受X%的折扣
一个商品只能获得一个折扣,因此一旦一条线项目被打折,它就不能参加其他折扣。
测试案例数据:
- Product-1: $10
- Product-2: $10
- Product-3: $50
- Product-4: $100
Discount-A: 购买两个或两个以上产品,以下任意一个产品享受20%的折扣
- Product-1
- Product-2
- Product-3
- Product-4
Discount-B: 购买该产品并享受以下产品50%的折扣
- Product-3
测试场景1:
购物篮: 包含如下商品:
- Product-1
- Product-3
- Product-4
计算 #1:
- Discount-A: Product-1, Product-3, Product-4 = $2 + $10 + $20 = $32
- = $32 总共节省的金额
计算 #2:
- Discount-A: Product-2, Product-4 = $2 + $20 = $22
- Discount-B: Product-3 = $25
- = $22 + $25 = $47 总共节省
这意味着 折扣-A 和 折扣-B 的组合将为客户提供最佳可能的折扣。
测试方案2:
购物篮:包含以下线路项目:
- 产品-3
- 产品-4
计算#1:
- 折扣-A:产品-3,产品-4 = $10 + $20 = $30
- = $30 总共节省
计算#2:
- 折扣-B:产品-3 = $25
- = $25 总共节省
这意味着应用 折扣-A 将为客户提供最佳可能的折扣。
为了计算给定篮子的最佳折扣,必须评估所有产品和这些产品上可用的所有折扣的所有组合。
通常篮子中有30-40个行项目,每个行项目都有0-3个折扣。
基本上我陷入了寻找一种有效方式来进行这种计算的困境中。
现在我对应用折扣的算法大致如下:
- 清除篮子上的折扣
- 获取篮子中线路项目的所有唯一ProductID
- 获取这些ProductID的所有可用折扣
- ForEach折扣(无序)
- 如果非折扣标记的行项目满足,则应用折扣
- 将折扣中的行项目标记为已折扣
- 如果非折扣标记的行项目满足,则应用折扣
但是这完全不够,因为它没有尝试不同的行项目/折扣组合。
我一直在寻找可以解决此类问题的标准化算法,但迄今为止没有任何运气。
希望能从您那里听到消息:)