从工程角度来说,红包分配算法需要简单粗暴的实现。
有些人的算法过于复杂,第几个人领取都要面面俱到的计算,考虑因素太多,工程实现上真的没必要。
其实只需要按照如下框架即可:
1. 发红包时,按照设计的快速随机算法,将红包分好若干份。
2. 按照设计的评估算法,对得到的红包分配进行校验。
3. 如果校验不通过,如贫富差距过大,则重复随机分配。
4. 如果若干次重复,如5次,则停止重复,就按照当前分配。
5. 再有用户请求红包,直接队列化请求,再从红包序列中取出对应编号红包。
上述方案的优势是:
1. 只需“一次”计算。
随机算法选择简单粗暴的即可,系统按照校验策略对其评价,不满足则有限次重复,直到满足或次数太多为止。
2. 此后就只有读取。
后续操作完全是读取缓存,无需密集计算。
那么是不是还有更简单粗暴的方案呢?还是有的,那就是伪随机序列查表法。
百万千万级别的红包请求,如果每次都按照真随机来计算,仍然会有不小的计算压力。
索性预先计算得到若干伪随机分配方案,调用时只需要随机选择一个即可。
举例来说,有人的红包是10元分配给5人,系统预先存有多种分配方案,如1,1,2,3,3,或1,1,2,2,4,请求时随机选取一个方案即可。
当然,各种组合未必能穷尽,但是只需要让用户在有限次操作中觉得这是随机就够了。
扩展资料
微信红包是腾讯旗下产品微信于2014年1月27日推出的一款应用,功能上可以实现发“红包”、查收发记录和提现。
2014年4月14日,“安卓手机用户只要用微信扫描身边出现的红色二维码,通过腾讯应用宝成功安装其他应用软件,即可领取微信红包。
2019年2月10日,微信官方发布2019年春节数据报告,除夕到初五,8.23亿人次收发微信红包。
设计简单
在“微信红包”这个功能的设计上,遵循了简单的原则。发送方通过“新年红包”公众号,选择发送红包的数量和金额,以及祝福的话语,通过“微信支付”进行支付,就可以发送给好友;接收方则在打开后获得相应收益,只需要将储蓄卡与微信关联,就可以在一个工作日后提现。2014年1月27日前,用户在抢红包之前,要先写上祝福,然后才可以抢。在这之后,已经改为先抢红包再发送祝福的过程。
这个应该是有系统分配决定的了,随机的话大家一起抢红包每个人的数额大部分都是不相同的,你是第一个抢到红包的基本上都不是数额最多的,一般来说抢到金额最多的基本都是中间段的多,所以来说运气是很重要的。
根据红包总额和红包个数,随机分配。