欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求一个中奖概率的算法

程序员文章站 2024-01-29 21:10:40
...
需求
我有一个会员系统,每位会员发布文章后,发布文章次数+1
然后,我会发送1-200元的人民币
我想让发布文章越多的会员大奖的概率越大,但是不能超过200元。

回复内容:

需求
我有一个会员系统,每位会员发布文章后,发布文章次数+1
然后,我会发送1-200元的人民币
我想让发布文章越多的会员大奖的概率越大,但是不能超过200元。

首先假设我们给会员设置一个基准奖励金额 x,x 的值在 1-200 之间,发布文章越多 x 的值越大。这是合理的。至于 x 的算法,可以考虑类似这样的曲线,当横轴增加时,纵轴无限接近于 2。稍微修改一下公式,就能得出一个当文章数量增加时,基准金额无限接近于 200 元的算法。
求一个中奖概率的算法

有了这个基准奖励,我们可以在它周围设置一个“摇摆幅度”,使得奖励看起来有随机性。比如对某会员我得出基准奖励为 50 元,那么当摇摆幅度为 10 元时,我会随机从 40-60 元之间抽取一个值作为最终奖励。这样就能达到你的要求:发布文章越多,得奖的金额也越多,但也不是一个固定的值。

额,楼上的厉害啊。提供另一个思路:

  1. 均分概率
    1-200 元,分 200 节点,平均分布概率是,每个节点 1/200。
    即:1/200 + ... = 1

  2. 引入文章数因素f(0 ~ 1)
    第1 - 100 节点第 i 节点的概率为:
    (1 - f^i)/200
    第 101 - 200 节点第 i 节点的概率为:
    (1 + f^(201-i))/200
    (1 - f^1)/200 + (1 - f^2)/200 + (1 - f^3)/200 + (1 - f^4)/200 + ... + (1 - f^100)/200 + (1 + f^100)/200 + ... + (1 + f^3)/200 + (1 + f^2)/200 + (1 + f^1)/200 = 1

  3. 确定 f 值
    f 值如上面童鞋所话,是arctan函数,极限值为 1.

这个的缺点是:中间隔断,没有按照曲线平滑增长。

相关标签: php