Деление числа на случайные неравные части

поэтому я пытаюсь сделать скрипт, который будет случайным образом разбивать значение 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 в конце.

  • используйте смежные различия в качестве раздела.