泊松分布或正态分布

Poisson distribution or Normal distribution

如果需要在[N,M]范围内生成随机数,但更多的数字接近avg (N <= avg <= M),哪个更好使用:

查看 cppreference 页面(页面底部)的示例,它们都生成了所需的内容:

poisson_distribution 在点 4:

0 *
1 *******
2 **************
3 *******************
4 *******************
5 ***************
6 **********
7 *****
8 **
9 *
10 
11 
12 
13

normal_distribution5 点,标准差 2:

-2 
-1 
 0 
 1 *
 2 ***
 3 ******
 4 ********
 5 **********
 6 ********
 7 *****
 8 ***
 9 *
10 
11 
12

选择什么?可能是别的东西?

我更喜欢正态分布,因为它更接近现实生活中的问题,而泊松分布仅用于特殊情况。选择 N.D 会使您的问题更笼统。

您可以将两个分布集中在一个适合您需要的点上。

但是如果M很小,那么泊松分布有一个'fat tail',也就是说得到一个在M以上的数的概率比正态分布高。

一般情况下,你可以通过方差参数来控制这个几率(可以小到你想要的大小)。

另一个相当明显的区别是泊松只会给你正整数,而正态分布会给出 [N,M] 范围内的任何数字。

此外,当[N,M]足够大时,泊松分布收敛于正态分布。所以即使泊松是正确的模型,正态近似也不会那么不准确。

考虑到这一点,如果数字不模拟计数过程,我会选择 Normal。

如果您需要有限范围内的结果,那么这两种选择都不好。正态分布的尾部无限大,泊松分布的尾部无限大。至少您需要其中一个的截断形式。如果您没有截断,请注意法线始终关于其均值对称,而泊松分布可能会非常倾斜。这两种分布的不同之处还在于,正态分布是连续的,泊松分布是离散的,尽管您可以通过对结果进行分箱来离散化连续分布。

如果您想要在有限范围内的一组离散结果,您可以尝试缩放和平移 binomial distribution。带有参数 np 的二项式计算当试验是独立的并且所有试验都以 p 的概率成功时,您从 n 试验中获得了多少 "successes"。制作 n = M - N 并将结果移动 N 以获得 [N,M] 范围内的结果。

如果您想要连续的结果范围,请考虑 beta distribution。您可以捏造参数以获得各种各样的分布形状,并将平均值调整到您想要的位置,然后缩放+移动到您想要的任何范围。

如果您需要范围内的分布(不是像正态或泊松那样的无限或半无限分布),但有明确的最大值,您可以尝试具有多个自由度的 Irwin-Hall 分布。假设 IH(16) 的最小值为 0,最大值为 16,峰值为 8,参见 http://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution

非常容易采样,易于缩放,您可以使用 n 来获得更宽或更窄的峰