红包随机算法&微信群红包随机算法 您所在的位置:网站首页 微信红包群最大金额能发多少 红包随机算法&微信群红包随机算法

红包随机算法&微信群红包随机算法

2023-12-19 06:48| 来源: 网络整理| 查看: 265

在这里插入图片描述在这里插入图片描述1.前言

因疫情影响,部门 2021 年会以线上直播的形式进行,通过微信小程序展开。为活跃年会氛围,年会直播间会有抢红包环节。因产品要求,红包金额要随机生成,所以这里涉及到指定红包总额、数量和最大最小值情况下如何生成红包金额。

可以看出,红包随机金额生成的输入是一个四元组 ,其中 sum 是红包总额,num 是红包数量,min 和 max 分别是红包最小最大值。所以这里可以抽象成如下算法:

input: output: 随机红包金额数组

因为法币都有最小单位,比如人民币是分,所以上面输入四元组均可视为整数。

2.参考微信群红包算法

本质上,这和微信群红包没什么区别,发出一个固定总金额的红包,指定红包数量,那么随机分配红包金额时需要满足哪些规则? (1)所有人抢到金额之和等于红包总金额,不能超过,也不能少于; (2)抢到的红包金额至少是一分钱; (3)要保证抢到红包的人获取到的红包金额是随机的。

实际上,微信群红包的 min 是 1 分钱,max 是剩余红包金额均值的两倍,为什么是这两个值,因为这么做会保证随机值的期望值等于均值,来保证不会因为抢红包的先后顺序而造成不公平。这两个值是算法内设的,不提供给用户指定。另外总金额 sum 和数量 num 是由用户指定的。

为什么微信群红包要搞一个最大上限,因为如果不设置一个最大上限,会出现一种不公平的现象。就是越在前边领取红包的同学,其可随机范围越大,获得大额红包的几率也越高。一旦前边的同学随机到一个较大的金额,后边的同学可以随机的范围就逐步收窄,抢红包就变成了一个拼手速的游戏了。

实际上,微信群红包采用的是二倍均值法,也就是每次随机上限为剩余红包金额均值的两倍。微信群红包金额分配算法是这样的:

每次抢红包直接随机,随机的范围是[1, 剩余红包金额均值的两倍],单位分

这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。

实际上微信群红包的算法虽然公平,但是有个缺陷,不过这个微信产品同学可以接受,只是对于用户来说体验并不是那么友好,因为有时发个群红包会出现下面这种最后一个红包金额非常大的情况。

出现这种情况的原因是,上面的随机上限 max 为剩余红包金额均值的两倍,对于最后一个红包是无法生效的。当然,出现这种情况的概率非常小。

这说明了一个什么问题呢?红包金额随机分配算法不是一个标准算法,而是产品逻辑。 如果你是产品同学,你完全可以搞一个你想要的随机分配算法,比如随机范围严格在 [min, max] 之间,或者像微信群红包那样,每次抢红包时,max 是动态变化的。

这里说下大家最关心的问题,就是如何才能抢到大红包。通过上面的介绍,结论就是除了最后一个红包金额是有可能大于均值的两倍,其他都是在 [0.01 - 剩余均值*2] 之间随机。如果红包数量充足,那么最后一位抢才有可能获得大红包。但绝大部分情况是僧多粥少,需要拼手速才能抢到红包,这种情况下,你不能保证你是最后那位抢到红包的人。

3.一个可用的随机算法

此次年会产品同学开始跟我说需要像微信群红包那样的随机分配红包金额,但是仔细研究了微信群红包的算法,才发现产品同学想要的效果和微信群红包并不同,她想要的是红包金额严格随机范围在 [min, max]。

在实现时要满足如下几个条件: (1)所有人抢到金额之和等于红包总金额,不能超过,也不能少于; (2)抢到的红包金额在 [min, max] 之间; (3)要保证抢到红包的人获取到的红包金额是随机的。

下面给一个可行的随机分配算法。

// min 最小金额分 max 最大金额分 num 红包数量 sum 红包总额分 input: // 参数合法性校验 step 1: min*num


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有