优惠券算法解析

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

①单张优惠券算法

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

  • 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

目录
相关文章
|
2天前
|
机器学习/深度学习 搜索推荐 算法
推荐系统的算法与实现:深入解析与实践
【6月更文挑战第14天】本文深入探讨了推荐系统的原理与实现,包括用户和项目建模、协同过滤、内容过滤及混合推荐算法。通过收集用户行为数据,系统预测用户兴趣,提供个性化推荐。实践中,涉及数据处理、建模、算法选择及结果优化。随着技术发展,推荐系统将持续改进,提升性能和用户体验。
|
6天前
|
存储 自然语言处理 算法
编辑距离算法全解析:优化文本处理的关键技术
编辑距离算法全解析:优化文本处理的关键技术
|
6天前
|
存储 算法 数据挖掘
螺旋矩阵 II:从理论到实践的五种算法解析
螺旋矩阵 II:从理论到实践的五种算法解析
|
11天前
|
存储 算法 Java
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(二)
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(二)
19 1
|
11天前
|
存储 算法 Java
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(一)
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(一)
20 0
|
15天前
|
机器学习/深度学习 数据采集 存储
【机器学习】K-近邻算法(KNN)全面解析
K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。
173 0
|
16天前
|
存储 搜索推荐 算法
归并排序算法深入解析
归并排序算法深入解析
|
19天前
|
存储 算法 搜索推荐
深度解析:Python中的高效数据结构与算法实现
深度解析:Python中的高效数据结构与算法实现
31 0
|
27天前
|
机器学习/深度学习 编解码 算法
算法工程师面试问题总结 | YOLOv5面试考点原理全解析
本文给大家带来的百面算法工程师是深度学习目标检测YOLOv5面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。
|
30天前
|
缓存 算法 Java
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析

推荐镜像

更多