随机分布任意数量的项目

时间:2014-07-15 12:55:42

标签: php random distribution normal-distribution

我需要一个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);

0 个答案:

没有答案