>백엔드 개발 >PHP 튜토리얼 >PHP에서 가중치 난수를 생성하는 방법은 무엇입니까?

PHP에서 가중치 난수를 생성하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 08:40:08234검색

How to Generate Weighted Random Numbers in PHP?

PHP에서 가중 난수 생성

질문:

난수를 어떻게 생성할 수 있나요? 1과 10 사이에 있지만, 비교하면 3, 4, 5를 선택할 확률이 더 높습니다. PHP에서는 8, 9, 10으로?

답변:

가중 무작위성을 달성하려면 원하는 각 결과를 가중치에 매핑하는 연관 배열을 활용할 수 있습니다. . 이 경우 3, 4, 5가 8, 9, 10(예: 8~10)보다 더 높은 가중치(예: 3~50%, 4~30%, 5~20%)를 갖는 배열을 만들 수 있습니다. %, 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으로 문의하세요.