我们知道经典的范围随机函数是这样的:
我想创建一个算法函数,用于在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/2的机会返回1到3之间的数字,1/6的机会返回4到7之间的数字,以及1/3的机会返回8到10之间的数字。
有人知道这个算法吗?
更新: 实际上,1到10的范围只是一个例子。我想创建的函数将适用于任何数字范围,例如:1到10000,但规则仍然相同:顶部范围(30%部分)为3/6,中间范围(接下来的40%部分)为1/6,底部范围(最后的30%部分)为2/6。
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/2的机会返回1到3之间的数字,1/6的机会返回4到7之间的数字,以及1/3的机会返回8到10之间的数字。
有人知道这个算法吗?
更新: 实际上,1到10的范围只是一个例子。我想创建的函数将适用于任何数字范围,例如:1到10000,但规则仍然相同:顶部范围(30%部分)为3/6,中间范围(接下来的40%部分)为1/6,底部范围(最后的30%部分)为2/6。