抽奖算法

抽奖算法有不少,我们考虑稍微简单的两种。

我们的考量

一、时间换空间

可以抽奖的时候生成一个随机值,之后和概率范围for循环比对。这样的场景适合那种需要,非常大的空间存放抽奖概率,不划算的时候,可以考虑这种。

image-20240729143548648

二、空间换时间

提前计算好抽奖概率分布,用本地内存 guava 或者 redis 存储,最后抽奖的时候通过生成的随机值,在空间内定位即可,复杂度为O(1)。

image-20240729143555897

计算公式:

  1. 找到范围内最小的概率值,比如 0.1、0.02、0.003,需要找到的值是 0.003
  2. 基于1找到的最小值,0.003 就可以计算出百分比、千分比的整数值。这里就是1000
  3. 那么「概率 * 1000」分别占比100个、20个、3个,总计是123个
  4. 后续的抽奖就用123作为随机数的范围值,生成的值100个都是0.1概率的奖品、20个是概率0.02的奖品、最后是3个是0.003的奖品。

三、我的选择

因为空间换时间的复杂度只有O(1),适合于高并发场景,所以选择空间换时间方案。


抽奖算法
http://example.com/2024/01/17/大营销项目/抽奖算法/
作者
sxswldy
发布于
2024年1月17日
许可协议