首页 >后端开发 >php教程 >如何在 PHP 中生成加权随机数?

如何在 PHP 中生成加权随机数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-03 08:40:08233浏览

How to Generate Weighted Random Numbers in PHP?

PHP 中的加权随机数生成

问题:

如何生成随机数介于 1 和 10 之间,但与选择数字 3、4 和 5 相比,选择数字 3、4 和 5 的概率更高PHP 中的 8、9 和 10?

答案:

要实现这种加权随机性,您可以利用关联数组将每个所需结果映射到其权重。在这种情况下,您可以创建一个数组,其中 3、4 和 5 的权重(例如,3 - 50%、4 - 30%、5 - 20%)高于 8、9 和 10(例如,8 - 10) %, 9 - 5%, 10 - 5%)。

根据分配的权重,您可以生成使用 mt_rand 在权重总和范围内的随机数。然后,循环遍历数组并从随机数中减去每个权重值,直到其变为负数。使随机数为负数的权重对应的数组键就是期望的结果。

这是一个实现这种加权随机性的 PHP 函数:

/**
 * getRandomWeightedElement()
 * Utility function for getting random values with weighting.
 * Pass in an associative array, such as array('A'=>5, 'B'=>45, 'C'=>50)
 * An array like this means that "A" has a 5% chance of being selected, "B" 45%, and "C" 50%.
 * The return value is the array key, A, B, or C in this case.  Note that the values assigned
 * do not have to be percentages.  The values are simply relative to each other.  If one value
 * weight was 2, and the other weight of 1, the value with the weight of 2 has about a 66%
 * chance of being selected.  Also note that weights should be integers.
 *
 * @param array $weightedValues
 */
function getRandomWeightedElement(array $weightedValues) {
    $rand = mt_rand(1, (int) array_sum($weightedValues));

    foreach ($weightedValues as $key => $value) {
        $rand -= $value;
        if ($rand <= 0) {
            return $key;
        }
    }
}

以上是如何在 PHP 中生成加权随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn