抽奖算法
抽奖算法有不少,我们考虑稍微简单的两种。
我们的考量
一、时间换空间
可以抽奖的时候生成一个随机值,之后和概率范围for循环比对。这样的场景适合那种需要,非常大的空间存放抽奖概率,不划算的时候,可以考虑这种。

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

计算公式:
- 找到范围内最小的概率值,比如 0.1、0.02、0.003,需要找到的值是 0.003
- 基于1找到的最小值,0.003 就可以计算出百分比、千分比的整数值。这里就是1000
- 那么「概率 * 1000」分别占比100个、20个、3个,总计是123个
- 后续的抽奖就用123作为随机数的范围值,生成的值100个都是0.1概率的奖品、20个是概率0.02的奖品、最后是3个是0.003的奖品。
三、我的选择
因为空间换时间的复杂度只有O(1),适合于高并发场景,所以选择空间换时间方案。
抽奖算法
http://example.com/2024/01/17/大营销项目/抽奖算法/