java - 随机数,非均匀分布

标签 java random

<分区>

Possible Duplicate:
Generate random number with non-uniform density

我尝试识别/创建一个函数(在 Java 中),它给我一个非均匀分布的数字序列。 如果我有一个函数说 function f(x), and x>0 它会给我一个随机数 从 0x

该函数最适用于任何给定的 x,下面这只是我想要的示例。

但是如果我们说 x=100 函数 f(x) 将返回 s 非均匀分布。

我想举例来说

0 到 20 大约占所有案例的 20%。

21 到 50 大约占所有案例的 50%。

51 到 70 大约占所有案例的 20%。

71 到 100大约是所有情况下的 10。

简而言之,它给了我一个像正态分布一样的数字,在这种情况下,它是 30-40,x100

http://en.wikipedia.org/wiki/Normal_distribution

(如果需要,我可以使用一个统一的随机生成作为分数,并且只有一个函数可以将统一结果转换为非统一结果。)

编辑

我对这个问题的最终解决方案是:

/**
 * Return a value from [0,1] and mean as 0.3, It give 10% of it is lower
 * then 0.1. 5% is higher then 0.8 and 30% is in rang 0.25 to 0.45
 *
 * @return
 */
public double nextMyGaussian() {
    double d = -1000;
    while (d < -1.5) {
        // RANDOMis Java's normal Random() class.
        // The nextGaussian is normal give a value from -5 to +5?
        d = RANDOM.nextGaussian() * 1.5;
    }
    if (d > 3.5d) {
        return 1;
    }
    return ((d + 1.5) / 5);
}

最佳答案

一个简单的解决方案是生成一个介于 0 和 9 之间的第一个随机数。

0 表示前 10 个百分比,1 表示后面的 10 个百分比,依此类推。

因此,如果您得到 0 或 1,则会生成介于 0 和 20 之间的第二个随机数。如果您得到 2、3、4、5 或 6,则会生成介于 21 和 50 之间的第二个随机数,依此类推。

关于java - 随机数,非均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279509/

相关文章:

java - Collections.shuffle 无法按 SimClock 随机值的预期工作

math - 为什么math.random(999999999999)在Lua中返回1?

java - 在 Netbeans 8 中找不到/dist 目录

java - 关于 Java 中具体化泛型的任何消息?

java - 在 Android Studio 中保护密码和 URL

java - google app engine 1.6.4 在本地速度慢吗?

c++ - Rand() % 14 仅生成值 6 或 13

java - 如何使用带有 EXTJS 的 Ajax HTTP GET 下载 xlsx?

php - 使用 Doctrine 获取随机记录

r - 使用 stringi 在 R 中生成唯一的随机字符串