Разделение числа на случайные неравные части

Поэтому я пытаюсь создать скрипт, который будет беспорядочно разбивать значение 4 на 12 разных переменных. Я не могу придумать хороший способ сделать это правильно. Я думал о рандомизации чисел, чтобы они были близки к 0,33 (1/12 из 4), но это часто приводило к тому, что последние несколько чисел были недооценены. Кто-нибудь пробовал что-либо подобное раньше или имел какие-то отличные идеи о том, как сделать это как можно более случайным и равномерно неравномерным?

Сгенерируйте 12 случайных чисел из вашего любимого генератора случайных чисел, назовите их r1..r12 .

Добавьте их все, назовите sum .

Ваша первая случайная доля 4 равна (r1/sum)*4 . Остальное должно быть очевидно.

Создайте любое случайное число, большее 1, и после масштабирования до требуемой суммы.

Пример:

  • Требуемая сумма: 4
  • Случайные числа: 1 2 3 4 5 6 7 8 9 10 11 12
  • Сумма = 78
  • Измененные номера:

1 изменено на (1 * 4) / 78

2 изменено на (2 * 4) / 78

12 изменено на (12 * 4) / 78

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

Чтобы создать разбиение t на k значений:

  • Сгенерировать k-1 равномерно распределенные значения в диапазоне [0, t] .

  • Сортируйте их и добавьте 0 в начале и t в конце.

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