微信红包分配算法代码是怎么实现的
很多人都在微信群里抢红包,有人抢到的多,有人抢到的少,很多人都会以为这是手速的关系,其实不是,红包金额的多少是通过算法决定的,那么微信红包分配算法代码是怎么实现的?下面小编就给大家介绍一下。
1、预生产:
无外乎是在发红包的时候,随机去把金额生成到某个容器当中,然后要用的时候,一个一个的POP;
2、实时随机
用户在抢红包的时候,根据随机算法,算出这次用户要抢到多少
本文讲的是第二种。
红包算法关键是要简单、迅速的找出随机值,而这个坑,什么正态分布修正、什么平方后再开方取随机数优化,我都尝试过。
结果很惨淡:要么是前面的拿大头的几率很大,要么是后面的拿大头的几率很大,而前面拿大头,或者后面拿大头,是我们微信运营的大爷们吐槽我们的随机算法做得不如微信好的一个重要原因(尼玛谈需求的时候不讲,还弄了个随机数范围要在8%到74%之间做限制,觉得不爽就让研发背锅)。
废话完了,现在说下算法:
其实很简单,两个随机数,一个随机0到2;一个随机-1到1;两个随机数之和乘以均值,就是这次跑出来的随机数。然后再做下上下限的保护就行了。
我的代码里面偷了个懒,只做了下限,没做上限的保护。因为毕竟是研究算法,不是实际生产环境代码。
[java] view plain copypublic static void dispath(int total, int people, int min){
for(int i = 0; i < people - 1 ; i++ ){
int leftPeople = people - i;
double avg = Double.valueOf(total)/leftPeople;
double ratio1 = getRandom(0, 2);
double ratio2 = getRandom(-1, 1);
double ratio = ratio1+ratio2;
int cur = (int) Math.floor(ratio * avg) > min ? (int) Math.floor(ratio * avg) : min;
// 扣减总额阅点数目
total = total - cur;
System.out.format("第 %d 个红包: %d 阅点,剩下: %d 阅点 ", i + 1, cur, total);
}
// 剩余的就是最后一个用户的阅点额度
System.out.format("第 %d 个红包: %d 阅点,剩下: 0 阅点 ", people, total);
}
结果嘛,还马马虎虎,反正跑了几次测试,基本上还可以满足要求,反正最大和最小的,不会固定在某个地方出现了。
通过以上的描述你是否了解微信红包分配算法代码是怎么实现的呢?这样如此全面、有效、简单的恢复方法,你学会了吗?更多更详细微信公众号素材内容,请持续关注微素达。
相关推荐:
网站微信支付接口开发怎么做?
微信订阅号怎么发红包?订阅号设置发红包的方法
网站微信支付接口开发怎么做?
上一篇:微信卡包营销之实体店运营实战指南
下一篇:php的微信公众号接口发红包代码