前言
◆ ◆ ◆ ◆
还记得2017年,微信红包收发总量达到460亿个,2019年,除夕到初五,8.23亿人收发微信红包。一觉醒来,微信群里各种红包,顿时觉得错过了几个亿,破解了红包的规律,是不是就可以发财了呢?
红包算法主要思想
◆ ◆ ◆ ◆
我们抢红包关心的一般都是“手气最佳”,对于手气最佳,清华的毕啸天小哥哥做过一个统计,发了几亿次红包,得到如下图分析:
关于微信红包算法的重要发现是:
每个人当前抢到的微信红包金额大小服从均匀分布
[0.01,2*当前剩余红包均值两倍)
举个栗子:
在你打开红包的那一瞬间,
红包剩余m元
红包剩余个数为n个
那么你能抢到的金额为在
0.01和2*m/n之间
这个结论也在知乎大神陈鹏也提到过。
所以,如果以上结论是对的,那么结果就是!
结论就是:
这个也是小明同学这几个月的痛……
小明有个微信群,老板每逢8,18,28发红包,手气最佳可得免单券,每次都提前预设闹钟,却一次都没有抢到,每次都是最后几个拿到最佳,如下图
经过抢的这几个月,以上结论也是可以验证的,最大的往往出现在后面,而且会比其他的大很多。
算法实现
◆ ◆ ◆ ◆
基于以上的结论,我们很容易就可以实现抢红包算法了,如下图:
以上代码仅仅供参考,实际过程不会那么简单,商用计算需要用BigDecimal。
如果想要代码或者进一步讨论的同学也可以加小明同学的微信:
miraclesComing
架构设计
◆ ◆ ◆ ◆
一个抢红包的功能当然不会那么简单,会涉及并发、缓存等等、这个也是面试的考题,下面补充几点关注点:
以上架构内容参考知乎:
https://www.zhihu.com/question/22625187