«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как генерировать случайные числа с фиксированными суммами для обеспечения равномерного распределения?

Как генерировать случайные числа с фиксированными суммами для обеспечения равномерного распределения?

Опубликовано в 2025-04-19
Просматривать:789

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

генерирование случайных чисел с фиксированной суммой

задача предназначена для создания серии псевдо-рэндомов. В частности, как генерировать четыре числа, которые, когда они складываются, равны 40.

вместо того, чтобы полагаться на метод, который может сметить распределение первого числа, используется более равномерный подход. Решение использует стратегию деления предопределенного значения на более мелкие сегменты, используя случайно выбранные разделители.

]

. Предположим, что у нас есть четыре случайных положительных целых числа (e, f, g и h) таковы, что 0




f

d = 40 - g

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)]
, расширяя эту концепцию, следующая функция 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)]
для генерации неотрицательных целых чисел используется дополнительное преобразование:

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3