我需要一个PHP函数,可以在任意数量的飞镖上随机分配任意数量的飞镖。它必须返回其中有0个飞镖的飞镖数量,1个飞镖,2个飞镖等的数量。
我必须能够在几毫秒内使用数百万个飞镖和飞镖进行此操作,但近似值已足够。我已经有一个函数可以给我正常分布的随机值,因此可以使用一个可以得到平均结果的解决方案。
//Example result with 1000 darts and 500 dartboards
Array
(
[0] => 62
[1] => 128
[2] => 152
[3] => 96
[4] => 40
[5] => 14
[6] => 6
[7] => 2
)
我已经制作了一个函数,通过随机分配每个飞镖来生成示例值。这仅用于示例目的。该函数的生产版本必须使用正态分布以可伸缩的方式创建结果。
请勿告诉我如何优化此示例,仅用于演示目的:
<?php
function distribute($items, $targets) {
$result = array();
$values = array();
for($i=0; $i<$items; $i++) {
@$values[ mt_rand(0,$targets) ] ++;
}
for($i=0;$i<$targets;$i++) {
@$result[ (int) $values[$i] ] ++;
}
ksort($result);
return $result;
}
$microtime = microtime(true);
echo '<pre>';
print_r( distribute(100000, 50000) );
print_r(microtime(true) - $microtime);