我必须生成一个随机数列表,并且它们必须具有给定的平均差异。例如,给定的平均差异为 10,因此这些数字很好:1 3 5 9 15 51
。我所做的是将给定的平均差值乘以 2,然后加 1。如下所示:
while (i <= 50000)
{
i += Math.random() * givenAverageDiff * 2 + 1;
list.add(i);
}
但我从来没有得到过 5000 或更多。事实上,它总是 4,850 或更少。为什么?假设 givenAverageDiff
是 10。我的错误是什么?我该如何修复它?
附注用 C 或 PHP 实现对我来说也有好处。
最佳答案
因为你正在做“+ 1”。
让我们计算一下预期的差异:
E(2*10*x+1)= 2*10*E(x)+1 = 2*10*0.5+1 = 10+1。因此,平均而言您将得到 50000/11 的数字。
您需要选择期望值等于 10 的值。将其更改为以下内容,它应该可以工作:
while (i <= 50000)
{
i += Math.random() * (givenAverageDiff-1) * 2 + 1;
list.add(i);
}
关于java - 生成具有一定平均差的随机数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16152938/