고정 합계로 난수 생성
문제는 합계가 미리 정의된 값과 동일한 일련의 의사 난수를 생성하는 것입니다. . 구체적으로, 더하면 40이 되는 4개의 숫자를 생성하는 방법입니다.
첫 번째 숫자의 분포를 편향시킬 수 있는 방법에 의존하는 대신 보다 균일한 접근 방식이 사용됩니다. 이 솔루션은 무작위로 선택된 구분자를 사용하여 미리 정의된 값을 더 작은 세그먼트로 나누는 전략을 활용합니다.
0 < 전자 < f < g < h < 40. 원하는 4개의 숫자를 다음과 같이 도출할 수 있습니다.
a = e
b = f - e
c = g - f
d = 40 - g
이 기술은 각 숫자 집합에 대해 동일한 확률을 보장하여 균일한 분포를 보장합니다. 결과 난수는 미리 정의된 값으로 합산해야 하는 요구 사항을 충족합니다.
이 개념을 확장하여 다음 Python 함수는 지정된 총합으로 합산되는 양의 정수의 임의 목록을 생성합니다.
<code class="python">import random def constrained_sum_sample_pos(n, total): """Return a randomly chosen list of n positive integers summing to total. Each such list is equally likely to occur.""" dividers = sorted(random.sample(range(1, total), n - 1)) return [a - b for a, b in zip(dividers + [total], [0] + dividers)]</code>
음수가 아닌 정수를 생성하려면 추가 변환이 사용됩니다:
<code class="python">def constrained_sum_sample_nonneg(n, total): """Return a randomly chosen list of n nonnegative integers summing to total. Each such list is equally likely to occur.""" return [x - 1 for x in constrained_sum_sample_pos(n, total + n)]</code>
위 내용은 고정된 합계와 균일한 분포를 보장하는 난수를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!