Генерация случайных чисел, суммирующихся с предопределенным значением
В этом контексте мы стремимся создать список псевдослучайных чисел, которые в совокупности складываются до определенного заранее заданного значения. Один метод включает в себя случайное генерирование числа в заданном диапазоне, вычитание его из общей суммы и повторение этого процесса до тех пор, пока сумма не станет равной желаемому значению. Однако этот подход отдает предпочтение первому сгенерированному числу с точки зрения его вклада в сумму.
Для обеспечения единообразия было разработано более сложное решение:
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)]
Увеличивая каждое значение на единицу, мы можем сгенерировать список неотрицательных целых чисел, которые в сумме дают желаемую сумму.
Этот метод гарантирует, что каждая возможная комбинация, независимо от того, являются ли числа положительными или неотрицательными, имеет равную вероятность создания. Благодаря удобной реализации и универсальности в различных сценариях, constrained_sum_sample_pos и constrained_sum_sample_nonneg стали неотъемлемой частью задач генерации случайных чисел в Python.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3