php - 求一个中奖概率的算法
迷茫
迷茫 2017-04-10 15:16:56
0
2
484

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

reply all (2)
巴扎黑

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

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

    PHPzhong

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

    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.

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

      Latest Downloads
      More>
      Web Effects
      Website Source Code
      Website Materials
      Front End Template
      About us Disclaimer Sitemap
      php.cn:Public welfare online PHP training,Help PHP learners grow quickly!