集合的子集和笛卡儿积与优惠套餐的应用
这是项目中用到的一个算法的实际应用。算法比较简单,求两个集合的子集的笛卡尔积,用于商家的后端优惠组合。还是蛮有意思的哈。
情景
举个例子。
两种优惠:
第一种是满金额减,第二种是满数量减。
第一种有多种优惠,比如:
1、满1000减200
2、满500减100
第二种有多种优惠,比如:
1、满10件商品再打8折
2、满5件商品再打9折
这四种商家可以自由多选,制定自己的优惠。
优惠先执行第一种优惠的计算,然后再计算第二种优惠的计算。
比如:
顾客买了6件商品,总额1028元。那么先可以进行“满1000减200”的优惠,需付款变成828元,然后因为“满5件商品”,可以再打9折,需付款又变成了745.2元。
解决
这么灵活的选择,怎么去计算所有的可能组合,以便进行校验和排除某些组合的操作呢?
计算所有的子集,并进行笛卡尔积,再去重应该就可以了。
代码如下:
github
结果:
1 | [] + [] |