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 중국어 웹사이트의 기타 관련 기사를 참조하세요!