Деление числа на случайные неравные части
поэтому я пытаюсь сделать скрипт, который будет случайным образом разбивать значение 4 на 12 различных переменных. Я не могу придумать хороший способ сделать это правильно. Я думал о рандомизации чисел так, что они близки до 0,33 (1/12 из 4), но это часто приводит к последних чисел underprioritized. Кто-нибудь пробовал что-то подобное раньше или есть отличные идеи о том, как сделать это как можно более случайным и равномерно неравномерным?
3 ответов
генерировать 12 случайных чисел из вашего любимого генератора случайных чисел, назовите их r1..r12
.
сложите их все, назовите сумму sum
.
ваша первая случайная фракция 4
и (r1/sum)*4
. Остальное должно быть очевидно.
генерировать любое случайное число больше 1 и после масштабирования до требуемой суммы.
пример:
- требуемая сумма: 4
- Случайных Чисел: 1 2 3 4 5 6 7 8 9 10 11 12
- Sum = 78
- изменено номерами:
1 масштабируется до (1 * 4) / 78
2 повторно (2*4) / 78
...
12 масштабируется до (12 * 4) / 78
следующий алгоритм обеспечивает равномерно распределенные разделы, предполагая, что можно генерировать равномерно распределенные случайные числа в непрерывном диапазоне (или, по крайней мере, в дискретном диапазоне с достаточно большим количеством возможных значений, что шансы дублирования незначительны).
для создания раздела t
на k
значения:
создать
k-1
равномерно распределенные значения в диапазоне[0, t]
.сортировать их, и добавить
0
в начале иt
в конце.используйте смежные различия в качестве раздела.