亲品藏
^
微信红包怎么抢到手气最佳?微信随机红包算法分析

  观点七:

  从工程角度来说,红包分配算法需要简单粗暴的实现。

  楼上有人的算法过于复杂,第几个人领取都要面面俱到的计算,考虑因素太多,工程实现上真的没必要。

  其实只需要按照如下框架即可:

  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的前九个值分给前九个人,第十个得到剩下的。

相关阅读

CopyRight 亲品藏移动版(m.qinpinchang.com)