需求
我有一个会员系统,每位会员发布文章后,发布文章次数+1
然后,我会发送1-200元的人民币
我想让发布文章越多的会员大奖的概率越大,但是不能超过200元。
巴扎黑2017-04-10 15:18:56
首先假设我们给会员设置一个基准奖励金额 x,x 的值在 1-200 之间,发布文章越多 x 的值越大。这是合理的。至于 x 的算法,可以考虑类似这样的曲线,当横轴增加时,纵轴无限接近于 2。稍微修改一下公式,就能得出一个当文章数量增加时,基准金额无限接近于 200 元的算法。
有了这个基准奖励,我们可以在它周围设置一个“摇摆幅度”,使得奖励看起来有随机性。比如对某会员我得出基准奖励为 50 元,那么当摇摆幅度为 10 元时,我会随机从 40-60 元之间抽取一个值作为最终奖励。这样就能达到你的要求:发布文章越多,得奖的金额也越多,但也不是一个固定的值。
PHPz2017-04-10 15:18:56
额,楼上的厉害啊。提供另一个思路:
均分概率
1-200 元,分 200 节点,平均分布概率是,每个节点 1/200。
即:1/200 + ... = 1
引入文章数因素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
确定 f 值
f 值如上面童鞋所话,是arctan函数,极限值为 1.
这个的缺点是:中间隔断,没有按照曲线平滑增长。