^
微信红包怎么抢到手气最佳?微信随机红包算法分析
2022-07-26 11:07:27
观点七:
从工程角度来说,红包分配算法需要简单粗暴的实现。
楼上有人的算法过于复杂,第几个人领取都要面面俱到的计算,考虑因素太多,工程实现上真的没必要。
其实只需要按照如下框架即可:
1. 发红包时,按照设计的快速随机算法,将红包分好若干份。
2. 按照设计的评估算法,对得到的红包分配进行校验。
3. 如果校验不通过,如贫富差距过大,则重复随机分配。
4. 如果若干次重复,如5次,则停止重复,就按照当前分配。
5. 再有用户请求红包,直接队列化请求,再从红包序列中取出对应编号红包。
上述方案的优势是:
1. 只需“一次”计算。
随机算法选择简单粗暴的即可,系统按照校验策略对其评价,不满足则有限次重复,直到满足或次数太多为止。
2. 此后就只有读取。
后续操作完全是读取缓存,无需密集计算。
那么是不是还有更简单粗暴的方案呢?还是有的,那就是伪随机序列查表法。
百万千万级别的红包请求,如果每次都按照真随机来计算,仍然会有不小的计算压力。
索性预先计算得到若干伪随机分配方案,调用时只需要随机选择一个即可。
举例来说,有人的红包是10元分配给5人,系统预先存有多种分配方案,如1,1,2,3,3,或1,1,2,2,4,请求时随机选取一个方案即可。
当然,各种组合未必能穷尽,但是只需要让用户在有限次操作中觉得这是随机就够了。
观点八:
100块分10个红包:
1.产生10个随机数,X=(x1,x2.。.x10)
2.求和sum=x1+x2+.。.+x10
3.Y=X*100/sum
4.取两位小数(微信貌似就到分了)
5.取Y的前九个值分给前九个人,第十个得到剩下的。
相关阅读