Java中如何根据概率生成随机数

Chl*_*son 2 java sampling

我想在 10% 的时间内随机选择“1”,在 30% 的时间内随机选择“2”,在其他 60% 的时间内随机选择“3”。我想知道是否有一种方法可以让我根据 Java 中的这些概率随机抽样。

谢谢

NPE*_*NPE 7

首先生成一个在 0.0 和 1.0 之间均匀分布的双精度值。然后将范围 (0.0 < x < 1.0) 拆分为对应于您所需概率的子范围:

  • 0.0 <= x < 0.1 变为 1(区间宽度为 (0.1 - 0.0) = 0.1,或 10%);
  • 0.1 <= x < 0.4 变为 2(区间宽度为 (0.4 - 0.1) = 0.3,即 30%);
  • 0.4 <= x < 1.0 变为 3(区间宽度为 (1.0 - 0.4) = 0.6,或 60%)。

在代码中:

double rand = rng.nextDouble();
if (rand < .1) {
  return 1;
} else if (rand < .1 + .3) {
  return 2;
} else {
  return 3;
}
Run Code Online (Sandbox Code Playgroud)

(其中rng是 的一个实例java.util.Random。)

这种方法可以很容易地推广到任意一组目标概率。