20,359
社区成员
发帖
与我相关
我的任务
分享
//概率分布
function Probability($ar) {
$total = array_sum($ar);
foreach($ar as $k=>$v) {
$n = rand(1, $total);
if($n <= $v) return $k;
$total -= $v;
}
return $k;
}
$k = array(
array(9,19),
array(21,29),
array(31,39),
array(41,49),
);
$d = array(60,25,10,5);
for($i=0; $i<100; $i++) {
$t = Probability($d);
@$r[join('-',$k[$t])]++;
do {
$n = rand($k[$t][0] , $k[$t][1]);
}while($t == 0 && $n == 10);
echo " $n";
}
//ksort($r);
print_r($r); //验证算法的有效性
一个可能的结果
26 23 23 14 17 13 9 16 23 9 17 34 14 9 19 13 14 16 48 31 16 17 24 9 13 9 13 13 28 28 17 13 19 14 13 18 49 21 9 18 16 46 25 39 22 15 25 27 37 19 18 22 16 17 9 11 16 19 24 14 13 11 17 16 18 12 17 19 23 28 18 17 13 19 29 26 15 14 18 11 44 22 19 13 9 19 9 23 33 43 14 9 17 43 18 18 29 25 15 45Array
(
[21-29] => 22
[9-19] => 66
[31-39] => 5
[41-49] => 7
)