程序数学--如何粗略估计用户不会中奖的概率

假设最多有7个用户并发抽奖 奖品只有店铺券 规则是选取最近创建的一个店铺券再发放给用户 假设店铺券平均库存为46 下面是会不会中店铺券的概率计算

  • 非理想情况 该店铺券可用库存(库存-已领取数)< 7 此时某些用户领取店铺券失败(因为库存不足) 默认为未中奖 概率:6/46~=13%

  • 理想情况 该店铺券可用库存>= 7 均能领取成功 概率: 40/46~=87%

下面想增加领取店铺券成功的概率 假如改成选择最近创建的3个店铺券 再从中随机分配一个店铺券发放 此时概率情况会是怎样的呢?

  • 存在领取失败用户的概率 : 6/(46X3) = 3%

  • 均能领取成功概率 : (46X3-6)/46X3 = 97%

我上面的计算公式正确吗?

即使上面的公式正确的话, 也只是考虑了某一静态时间点的情况(即最高并发数那一时间点的情况), 实际情况要更复杂, 需要知道店铺券生产的平均间隔时间平均并发数以及并发之间的时间间隔。 如平均2分钟生产一个店铺券,平均库存为46, 平均并发数为5, 每隔1分钟就有一次并发抽奖, 假如是这样的话, 2分钟内似乎完全可以支持2次的并发抽奖 因为46>2X5, 但是要考虑到中间还会有个别用户抽奖, 假如每隔2秒钟便有一个用户抽奖,那么2分钟内会有60个用户抽奖(2X60/2), 那么此时店铺券就不够用了(46 < 60+2X5), 但是这些数据用mysql sql还真不好获得呢

店铺券表

ID 创建时间 店铺ID 库存 已领取张数
1 2016-09-17 14:58:00 1 46 0
2 2016-09-17 15:00:00 2 46 0

用户抽奖表

用户ID 抽奖时间 奖品
1 2016-09-17 14:58:01 店铺券
2 2016-09-17 14:58:03 店铺券

所以想粗略估计一下多大的概率用户不会中店铺券 这样的话才能估摸出会有多少用户不会中店铺券, 这个问题没有想象的那么简单呢

阅读 2.3k
1 个回答

这种看上去都不好解决的问题,又不是搞理论研究只需要结果,就应该用蒙特卡罗法呀,随随便便来个十万人次抽个奖,很直观的就知道结果了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏