古典的な範囲ランダム関数は次のようになっています。
public static final int random(final int min, final int max) {
Random rand = new Random();
return min + rand.nextInt(max - min + 1); // +1 for including the max
}
1..10の範囲でランダムに数値を生成するアルゴリズム関数を作成したいのですが、次のような不均一な可能性があります:
1)1,2,3-> 3/6(1/2)
2)4,5,6,7 -> 1/6
3)8,9,10-> 2/6(1/3)
上記は、関数が1から3までの数値を返す可能性が1/2、4から7までの数値を返す可能性が1/6、8から10までの数値を返す可能性が1/3であることを意味します。
誰もがアルゴリズムを知っていますか?
更新:
実際には、1..10の間の範囲は単なる例として提供されています。私が作成したい関数は、1..10000などの任意の範囲の数値に適用されますが、ルールは同じです。トップレンジ(30%の部分)の場合は3/6、ミドルレンジ(次の部分)の場合は1/6です。 40%の部分)、およびボトムレンジの2/6(最後の30%の部分)。