优惠券算法解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 基于单张优惠券与叠加优惠券的算法解析及场景举例。

①单张优惠券算法

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

  • 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

目录
相关文章
|
3天前
|
负载均衡 算法 Java
Spring Cloud全解析:负载均衡算法
本文介绍了负载均衡的两种方式:集中式负载均衡和进程内负载均衡,以及常见的负载均衡算法,包括轮询、随机、源地址哈希、加权轮询、加权随机和最小连接数等方法,帮助读者更好地理解和应用负载均衡技术。
|
9天前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
81 1
|
17天前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
85 1
|
18天前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
41 1
|
26天前
|
机器学习/深度学习 算法 TensorFlow
【深度学习】深度学习语音识别算法的详细解析
深度学习语音识别算法是一种基于人工神经网络的语音识别技术,其核心在于利用深度神经网络(Deep Neural Network,DNN)自动从语音信号中学习有意义的特征,并生成高效的语音识别模型。以下是对深度学习语音识别算法的详细解析
44 5
|
23天前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
37 1
|
24天前
|
机器学习/深度学习 自然语言处理 负载均衡
揭秘混合专家(MoE)模型的神秘面纱:算法、系统和应用三大视角全面解析,带你领略深度学习领域的前沿技术!
【8月更文挑战第19天】在深度学习领域,混合专家(Mixture of Experts, MoE)模型通过整合多个小型专家网络的输出以实现高性能。从算法视角,MoE利用门控网络分配输入至专家网络,并通过组合机制集成输出。系统视角下,MoE需考虑并行化、通信开销及负载均衡等优化策略。在应用层面,MoE已成功应用于Google的BERT模型、Facebook的推荐系统及Microsoft的语音识别系统等多个场景。这是一种强有力的工具,能够解决复杂问题并提升效率。
40 2
|
1月前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
84 1
|
1月前
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
84 2
|
26天前
|
存储 缓存 算法
深入解析B树:数据结构、存储结构与算法优势
深入解析B树:数据结构、存储结构与算法优势

热门文章

最新文章

推荐镜像

更多