>백엔드 개발 >PHP 튜토리얼 >求一个中奖概率的算法

求一个中奖概率的算法

WBOY
WBOY원래의
2016-06-06 20:39:01819검색

需求
我有一个会员系统,每位会员发布文章后,发布文章次数+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.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.