我有一个数字列表,例如
$list = array(1,5,19,23,59,51,24)
在实际代码中,这是从数据库生成的,因此该数组最多可容纳 500 个彼此不同的数字。
数据库中的这些数字中的每一个都有记录的发生概率。所以我有以前执行的数据来生成从 1 到 500 的随机数,并记录了每个数字生成 1000 次的概率。
现在有了每个数字的数字和概率列表,我想编写一个函数,该函数将根据它们的概率从这 500 个数字中生成一个随机数。
例如:
number 1 has a chance of: 0.00123 //0.123%
number 6 has a chance of: 0.0421 //4.21%
number 11 has a chance of: 0.0133 //1.33%
所以变量 $finallist 看起来像这样:
$finallist[1] = 0.00123;
$finallist[6] = 0.0421;
$finallist[11] = 0.0133;
现在,如果我运行我的函数并传入 $finallist 作为参数,我想检索一个介于 1 和 6 之间的随机数,但数字 6 出现的可能性高于 1,而 11 出现的可能性高于 1。
我编写了一些函数来处理根据机会返回随机数,但它只需要 1 个值作为参数。
private function randomWithProbability($chance, $num, $range = false)
{
/* first generate a number 0 and 1 and see if that number is in the range of chance */
$rand = $this->getRandomFloatValue(0, 1);
if ($rand <= $chance)
{
/* the number should be returned */
return $num;
}
else
{
/* otherwise return a random number */
if ($range !== false)
{
/* make sure that this number is not same as the number for which we specified the chance */
$rand = mt_rand(1, $range);
while ($rand == $num)
{
$rand = mt_rand(1, $range);
}
return $rand;
}
}
}
如果有人知道执行此操作的解决方案/算法,或者 PHP 中是否有任何内置内容,那将是一个很大的帮助。非常感谢。