Если это необходимо для генерации случайностей в [N, M] диапазон, но с большим количеством чисел, близких к средний (N <знак равно средний <знак равно M), который лучше использовать:
Видя примеры на страницах cppreference (внизу страниц), они оба генерируют то, что нужно:
poisson_distribution
в точке 4
:
0 *
1 *******
2 **************
3 *******************
4 *******************
5 ***************
6 **********
7 *****
8 **
9 *
10
11
12
13
normal_distribution
в точке 5
со стандартным отклонением 2
:
-2
-1
0
1 *
2 ***
3 ******
4 ********
5 **********
6 ********
7 *****
8 ***
9 *
10
11
12
Что выбрать? Может быть, что-то еще?
Вы можете центрировать оба дистрибутива в точке, которая соответствует вашим потребностям.
Но если M
мал, то распределение Пуассона имеет «толстый хвост», то есть вероятность получить число выше M
выше по сравнению с нормальным распределением.
В обычном случае вы можете управлять этим шансом с помощью параметра дисперсии (он может быть настолько мал, насколько вы хотите).
Другое, довольно очевидное отличие состоит в том, что Пуассон даст только положительные целые числа, тогда как нормальное распределение даст любое число в [N,M]
спектр.
Плюс, когда [N,M]
достаточно большие, Пуассон сходится к нормальному распределению. Таким образом, даже если Пуассон — правильная модель, нормальное приближение не будет таким неточным.
Имея это в виду, что если числа не имитируют процесс подсчета, я бы выбрал Normal.
Ни один из вариантов не будет отличным, если вам нужны результаты в ограниченном диапазоне. Нормальное распределение имеет бесконечные хвосты на обоих концах, распределение Пуассона имеет бесконечный верхний хвост. Как минимум, вы хотите усеченную форму одного из них. Если вы не усекаете, обратите внимание, что нормаль всегда симметрична относительно своего среднего значения, в то время как Пуассон может быть весьма искажен. Два распределения также отличаются тем, что нормаль является непрерывной, а Пуассон дискретным, хотя вы можете дискретизировать непрерывные распределения, разбивая результаты.
Если вы хотите дискретный набор результатов в ограниченном диапазоне, вы можете попробовать масштабировать и сдвигать биномиальное распределение. Бином с параметрами n
а также p
подсчитывает, сколько «успехов» вы получите n
испытания, когда испытания независимы и все дают успех с вероятностью p
, Делать n = M - N
и сдвиньте результат на N, чтобы получить результаты в диапазоне [N, M].
Если вы хотите непрерывный диапазон результатов, рассмотрите бета-распределение. Вы можете изменить параметры, чтобы получить широкий спектр форм распределения и набрать среднее значение в том месте, где вы хотите, и масштабировать + сдвинуть его в любой желаемый диапазон.
Если вам нужно распределение, которое находится в пределах диапазона (не бесконечное или полубесконечное, как нормальное или пуассоновское), но имеет явный максимум, вы можете попробовать Ирвин-Холл с несколькими степенями свободы. Скажем, IH (16) будет иметь минимум в 0, максимум в 16 и пик в 8, см. http://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution
Очень легко выбирать, легко масштабировать, и вы можете играть с n
чтобы получить пик шире или уже
Я предпочитаю нормальное распределение, потому что оно ближе к реальным проблемам, в то время как распределение Пуассона используется только для особых случаев. Выбор Н.Д. делает вашу проблему более общей.