"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 동일한 확률로 미리 정의된 값으로 합산되는 난수를 생성하는 방법은 무엇입니까?

동일한 확률로 미리 정의된 값으로 합산되는 난수를 생성하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:402

How to Generate Random Numbers Summing to a Predefined Value with Equal Probability?

미리 정의된 값으로 합산되는 난수 생성

이 맥락에서 우리는 집합적으로 더하는 의사 난수 목록을 생성하는 것을 목표로 합니다. 특정 사전 결정된 값까지. 한 가지 방법은 지정된 범위 내에서 숫자를 무작위로 생성하고 이를 총계에서 뺀 다음 합계가 원하는 값과 같아질 때까지 이 과정을 반복하는 것입니다. 그러나 이 접근 방식은 합계에 대한 기여도 측면에서 첫 번째 생성된 숫자를 선호합니다.

균일성을 보장하기 위해 보다 정교한 솔루션이 개발되었습니다.

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)]

이 메서드는 합계가 대상 값인 양의 정수 목록을 생성합니다. 핵심 개념은 가능한 모든 숫자 조합이 생성될 가능성이 동일하다는 것입니다. 또한 이 기술을 다양한 합계와 다양한 수의 난수로 확장하는 것은 간단합니다.

예를 들어 n을 4로 설정하고 합계를 40으로 설정하면 다음과 같은 출력을 얻을 수 있습니다. [4, 4, 25 , 7]. 이 목록의 각 요소를 합산하면 미리 정의된 값 40이 생성된다는 점에 유의하는 것이 중요합니다.

양수가 아닌 정수를 허용하려면 수정이 가능합니다.

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)]

각 값을 1씩 증가시켜 원하는 합계를 합산하는 음수가 아닌 정수 목록을 생성할 수 있습니다.

이 방법을 사용하면 숫자가 양수인지 음수가 아닌지에 관계없이 가능한 모든 조합이 생성될 확률이 동일합니다. 사용자 친화적인 구현과 다양한 시나리오에서의 다양성을 갖춘 Constrained_sum_sample_pos 및 Constrained_sum_sample_nonneg는 Python의 난수 생성 작업에 필수적인 요소가 되었습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3