"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo generar números aleatorios con sumas fijas para garantizar una distribución uniforme?

¿Cómo generar números aleatorios con sumas fijas para garantizar una distribución uniforme?

Publicado el 2025-04-19
Navegar:176

How to Generate Random Numbers with a Fixed Sum, Guaranteed Uniform Distribution?

generando números aleatorios con una suma fija

el desafío planteado es generar una serie de números pseudo-random cuya suma equivale un valor predefinido. Específicamente, cómo generar cuatro números que, cuando se suman, igual, 40.

en lugar de confiar en un método que podría sesgar la distribución del primer número, se emplea un enfoque más uniforme. La solución utiliza una estrategia de dividir el valor predefinido en segmentos más pequeños, utilizando divisores seleccionados al azar.

Suponga que tenemos cuatro enteros positivos aleatorios (e, f, g, g, g) tal que 0 [&] a = e

f
d = 40 - g

Esta técnica garantiza una probabilidad igual para cada conjunto de números, asegurando una distribución uniforme. Los números aleatorios resultantes cumplen con el requisito de sumar al valor predefinido.

que extiende este concepto, la siguiente función de Python genera una lista aleatoria de enteros positivos que suma a un total especificado:

al azar Def restringido_sum_sample_pos (n, total): "" "Devuelve una lista elegida al azar de N enteros positivos que suman al total. Cada lista es igualmente probable. "" "" divisores = sorted (random.sample (rango (1, total), n - 1)) return [a - b para a, b en zip (divisores [total], [0] divisores)]
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)]

definsted_sum_sample_nonneg (n, total):::: "" "Devuelva una lista elegida al azar de N no negativos que suman al total. Cada lista es igualmente probable. "" "" return [x - 1 para x en restricted_sum_sample_pos (n, total n)]

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3