【发布时间】:2012-11-26 11:21:22
【问题描述】:
我正在重新开发一个旧系统,将 一篮子 用户选择的零售产品 匹配为一个或多个有效的促销。这些促销是行业标准的BOGOF(买一送一),买二送三,购买产品X和Y并获得10%的折扣等......但都要求您可以将潜在商品列表过滤到那些满足这些促销活动。
我希望解决方案能够在一次操作中获取整个购物篮零售商品并对其进行分析,而不是在订购时匹配单个产品的现行方法。 (当前的解决方案会导致不良的限制)
每个促销活动都有一系列符合条件的产品,必须存在这些产品才能触发促销活动。它们排列在 n 个集合(或位置)中,例如:
Example "Buy two get third free" Promotion =
| Item 1 | | Item 1 | | Item 2 |
| or | | or | | or |
| Item 2 | AND | Item 4 | AND | Item 6 |
| or | | or | | or |
| Item 3 | | Item 9 | | Item 4 |
Set 1 Set 2 Set 3
每个促销活动必须包含每个组中的一个产品,除非该项目多次出现在同一个集合中。促销可以有无限(但通常
作为一个简单的例子,Item 1, Item 4 and Item 6 的购物篮会触发促销,
同样Item 1, Item 1 and Item 2 的篮子也会触发它。
但是Item 1, Item 2 and Item 3的篮子不会因为每套都不满意。
除了检测何时触发促销的最佳方法这一显而易见的问题外,我还需要恢复该项目已匹配到的集合(位置)以处理定价等细节。它会如果在将更昂贵(以货币计)的商品分配给促销活动时,较便宜(同等匹配)的商品更受青睐,这也是可取的。
希望下一部分能帮助解决问题,不要听起来太不清楚以至于会产生不必要的噪音,请随意忽略!
到目前为止,我最好的解决方案是为每个零售商品创建一个新套装 在“购物篮”中放置该商品将满足的促销集(位置)。 即。
Item 1 satisifies sets: {1,2}
Item 4 satisifies sets: {2,3}
Item 6 satisifies sets: {3}
那么我的理论是你“检查”这个集合列表在每个位置都包含一个独特的项目,并且每个晋升职位都被填补了。到目前为止,我的工作示例都使用蛮力、循环或递归来生成集合的所有组合(上图),以尝试检查是否存在唯一组合。这非常非常糟糕,除了一个非常微不足道的例子之外的任何东西在现实世界中根本不起作用。 (这个函数会在物品被添加到购物篮时实时调用,所以需要快速)
大量研究表明二分匹配会产生一些预期的结果,但我只能找到有关该主题的研究文章和相当复杂的数学文本。一些伪代码或基本逻辑会很棒。
我的两个问题基本上是:
1) 有没有人发现一种更好/更快/更简单的方法来分析客户购物篮以产生匹配的促销活动。
2) 假设我已经确定了将商品匹配到相关位置的最有效方式,那么确定要针对促销记录的零售商品列表的最便宜方式是什么。
如果我在隧道尽头看不到光明,我们将不胜感激! (最终的解决方案将在 .NET 中,我们使用 SQL server 2008 R2。)
【问题讨论】:
-
快速澄清 - 为什么项目
1,2,3不能满足您的示例?第 1 项满足 {1,2},第 2 项满足 {1,3},第 3 项满足 {1}。所以我们可以让项目 3 满足 {1},项目 1 满足 {2},项目 2 满足 {3}。除非我错过了什么 -
每次促销有多少套?任何给定的提升都可以简化为状态机,但状态的数量会随着集合的数量迅速增加。
标签: algorithm set combinations shopping-cart bipartite