java - 生成具有一定平均差的随机数列表

标签 java php c algorithm random

我必须生成一个随机数列表,并且它们必须具有给定的平均差异。例如,给定的平均差异为 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/

相关文章:

c - 为什么除了eax还要提供orig_eax?

c - 需要从 do/while 和多个 while 循环返回一个值 - C

java - 使用 srcCompat 时 ImageButton 不会显示图像

php - 选项卡在页面返回时错误地刷新

php - Symfony2 中的系统 (SonataAdminBundle) 缺少请求的 PHP 扩展 intl

php - 需要帮助从数据库(PHP)中仅显示每个用户的一个结果

c - 将行分割成单词数组 + C

java - 常数的真正定义是什么?

java - 从 Lotus 脚本 (LS2J) 调用 Java 类的方法

java - 双参数PreparedStatement 抛出语法错误,SQL 状态 42601,靠近第二个参数