二倍均值法红包推荐PHP代码 [复制链接]

moqu8 11月前

751 0

假设:假设10个人抢100元红包。
操作:取0.01~(剩余金额 / 剩余人数 * 2)之间的随机数(2为常数,用于影响结果使其趋向平均值),最后一人兜底剩余金额。
结论:二倍均值法理论上可实现相对均衡的随机金额。

function red_envelope($money, $person) {
$arr = [];
for($i = 0; $i < $person; $i ++) {
$arr[$i] = $money;
if($person !== ($i + 1)) {
$arr[$i] = bcdiv(mt_rand(1, intval($money / ($person - $i) * 200)), 100, 2);
$money = bcsub($money, $arr[$i] , 2);
}
}
return $arr;
}


理想情况下平均每人金额在10元上下,以下是模拟:













第几人下限随机金额上限随机金额上限随机金额算法理论平均金额实际随机金额
10.0120.00100 / 10 * 210.0012.25
20.0119.5087.75 / 9 * 29.766.87
30.0120.2280.88 / 8 * 210.1211.22
40.0119.9069.66 / 7 * 29.9610.01
50.0119.8859.65 / 6 * 29.950.85
60.0123.5258.80 / 5 * 211.7719.56
70.0119.6239.24 / 4 * 29.814.23
80.0123.3435.01 / 3 * 211.689.85
90.0125.1625.16 / 2 * 212.5912.59
1012.57





最新回复 (0)
返回
支持中心
邮箱:winkill2012@qqcom
新站优化中!部分功能尚未完善,敬请谅解!
支持中心