重複の可能性:
不均一な密度で乱数を生成する
不均一な分散数列を与える関数 (Java で) を特定/作成しようとしています。からまでfunction f(x), and x>0
の乱数を与えるという関数がある場合。0
x
この関数は、与えられたもので最も機能しx
ます。以下は、私がどのようにしたいかの例にすぎません。
x=100
しかし、関数f(x)
が s nonunifrom distributed を返すと言った場合。
たとえば、
0 to 20
全体の約20%になります。
21 to 50
すべてのケースの約 50% になります。
51 to 70
全体の約20%になります。
71 to 100
すべてのケースの約 10 になります。
要するに、正規分布のような数値が得られ、この場合x
は30 ~ 40 でピークになり100
ます。
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);
}