可能的重复:
生成密度不均匀的随机数
我尝试识别/创建一个函数(在 Java 中),它给我一个非均匀分布的数字序列。
如果我有一个函数说function f(x), and x>0
它会给我一个随机数
从0
to x
.
该功能最适用于任何给定的x
下面这只是我想要的一个例子。
但如果我们说x=100
功能f(x)
将返回 s 非均匀分布。
我想说
0 to 20
大约占所有案例的 20%。
21 to 50
大约占所有情况的 50%。
51 to 70
大约占所有案例的 20%。
71 to 100
大约占所有情况的 10。
简而言之,它给了我一个类似于正态分布的数字,在这种情况下峰值为 30-40x
is 100
.
http://en.wikipedia.org/wiki/Normal_distribution
(如果需要的话,我可以使用统一的随机生成作为分数,并且只有一个将从统一结果转换为非统一结果的函数。)
EDIT
我对这个问题的最终解决方案是:
/**
* 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 之间的第二个随机数,依此类推。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)