优惠券算法解析

简介: 基于单张优惠券与叠加优惠券的算法解析及场景举例。

①单张优惠券算法

单张优惠券的优惠金额计算流程如下:

  • 1)判断优惠券限定范围,找出范围内的课程
  • 2)计算课程总价
  • 3)判断券是否可用
  • 4)计算优惠金额

假设有商品信息如下:

序号 价格 分类
1 100 a
2 100 b
3 100 b

有优惠券信息如下:

序号 分类
1 200 100 b

我们按照上述算法来判断:

  • 1)判断限定范围:这张券限定分类 b,对应的商品序号是2、3
  • 2)计算课程总价:商品序号2、3的总价为200
  • 3)判断是否可用:总价刚好达到优惠券满减门槛200,可以使用
  • 4)计算优惠:满200减100,因此最终优惠金额就是100元
  • 5)计算优惠明细:因为-100在商品序号2/3上,各占50%,因此优惠金额均摊,各为50,如下
序号 价格 分类 优惠金额
1 100 a 0
2 100 b 50
3 100 b 50

这里如果序号2/3的价格不是2的倍数,应该怎么整呢?一般的实现方案是:为了避免出现精度损失导致的金额不一致,最后一个商品的优惠明细等于优惠总金额减去其它商品的优惠明细之和


②叠加优惠券算法

券叠加就是按照券组合的顺序,依次计算每张券的优惠金额,最终优惠金额就是所有权的优惠累加。

需要注意的是:由于一张券计算完优惠后,商品的金额会发生变化,因此下一张券的计算金额会随之改变,因此券叠加的顺序非常重要

而且为了方便计算后续券的优惠金额,我们必须知道商品金额具体的变化,也就是弄清楚每一张优惠券使用后,每个商品的具体优惠金额,我们称之为优惠明细,我们可以用一个表格来记录

序号 优惠明细
1 *
2 *
3 *

因此,券叠加算法比单券算法需要多一步:

  • 1)判断优惠券限定范围,找出范围内的课程
  • 2)计算课程总价
  • 3)判断券是否可用
  • 4)计算优惠金额
  • 5)计算优惠明细

假设有商品信息如下:

序号 价格 分类
1 100 a
2 100 b
3 100 b

有优惠券信息如下:

序号 分类
1 100(每) 20 a,b
2 200 100 b
3 80 20 a

我们按照上述算法来一条条判断:

  • 1)判断限定范围:券1可用于所有分类,因此商品序号1、2、3都可以用
  • 2)计算课程总价:所有商品累加共300元
  • 3)判断是否可用:券1门槛是100,符合要求
  • 4)计算优惠:每满100减20,因此总共折扣就是60元
  • 5)计算优惠明细

正常情况下,按照商品价格在商品总价中的比例,乘以优惠总金额

最后一个商品,为了避免出现精度损失导致的金额不一致,最后一个商品的优惠明细等于优惠总金额减去其它商品的优惠明细之和

例如,商品1、2的折扣:(100 / 300) 60 = 20 ,商品3的折扣等于:*60 - 20 - 20 = 20,因此

券1信息如下:

image-20230428113616454.png


券2的计算步骤如下:

  • 1)判断范围:券2可用于分类b,因此商品序号2、3都可以用
  • 2)计算总价:商品2已经优惠了20,现在价格是80,商品3已经优惠了20,现在价格是80。因此商品总价是160
  • 3)判断是否可用:券2门槛是200,不符合要求,跳过

券2信息如下:

image-20230428113805520.png


券3的计算步骤如下:

  • 1)判断范围:券3可用于分类a,因此商品序号1可以用
  • 2)计算总价:商品1原价100元,已经优惠20,现价80元
  • 3)判断是否可用:券3门槛是80,符合要求
  • 4)计算优惠金额:满80减20,因此总共折扣就是20元
  • 5)计算优惠明细:由于只有商品1可用,商品1优惠明细就是20元

券3信息如下:

image-20230428113940068.png

目录
相关文章
|
11天前
|
机器学习/深度学习 搜索推荐 算法
推荐系统的算法与实现:深入解析与实践
【6月更文挑战第14天】本文深入探讨了推荐系统的原理与实现,包括用户和项目建模、协同过滤、内容过滤及混合推荐算法。通过收集用户行为数据,系统预测用户兴趣,提供个性化推荐。实践中,涉及数据处理、建模、算法选择及结果优化。随着技术发展,推荐系统将持续改进,提升性能和用户体验。
|
2天前
|
机器学习/深度学习 算法 数据挖掘
算法金 | K-均值、层次、DBSCAN聚类方法解析
**摘要:** 这篇文章介绍了聚类分析的基本概念和几种主要的聚类算法。聚类是无监督学习中用于发现数据内在结构的技术,常用于市场分析、图像分割等场景。K-均值是一种基于划分的算法,简单高效但易受初始值影响;层次聚类包括凝聚和分裂方式,形成层次结构但计算复杂;DBSCAN基于密度,能处理任意形状的簇,但参数选择敏感。文章还讨论了这些算法的优缺点和适用场景,并提供了相关资源链接和Python实现。
22 9
算法金 | K-均值、层次、DBSCAN聚类方法解析
|
7天前
|
机器学习/深度学习 算法 TensorFlow
Inception v3算法的实战与解析
Inception v3算法的实战与解析
|
16天前
|
存储 自然语言处理 算法
编辑距离算法全解析:优化文本处理的关键技术
编辑距离算法全解析:优化文本处理的关键技术
|
16天前
|
存储 算法 数据挖掘
螺旋矩阵 II:从理论到实践的五种算法解析
螺旋矩阵 II:从理论到实践的五种算法解析
|
20天前
|
存储 算法 Java
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(二)
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(二)
22 1
|
1天前
|
机器学习/深度学习 算法 TensorFlow
Inception v3算法的实战与解析
Inception v3算法的实战与解析
6 0
|
5天前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
6天前
|
机器学习/深度学习 算法 数据可视化
决策树算法:从原理到实践的深度解析
决策树算法:从原理到实践的深度解析
11 0
|
20天前
|
存储 算法 Java
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(一)
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(一)
23 0

推荐镜像

更多