gpt4 book ai didi

java - 带概率的随机数

转载 作者:IT老高 更新时间:2023-10-28 20:46:28 26 4
gpt4 key购买 nike

我想知道在特定范围内生成随机数的最佳方法是什么(例如在 Java 中),其中每个数字都有一定的发生概率?

例如

从 [1;3] 中生成具有以下概率的随机整数:

P(1) = 0.2
P(2) = 0.3
P(3) = 0.5


现在我正在考虑在 [0;100] 内生成一个随机整数并执行以下操作的方法:

如果它在 [0;20] 内 --> 我得到了我的随机数 1。
如果它在 [21;50] 内 --> 我得到了我的随机数 2。
如果它在 [51;100] 之内 --> 我得到了我的随机数 3。

你会说什么?

最佳答案

你的方法已经很不错了,适用于任何范围。

只是想:另一种可能性是通过乘以一个常数乘数来去除分数,然后用这个乘数的大小构建一个数组。乘以 10 得到

P(1) = 2
P(2) = 3
P(3) = 5

然后您创建一个具有相反值的数组——“1”进入元素 1 和 2,“2”进入 3 到 6,依此类推:

P = (1,1, 2,2,2, 3,3,3,3,3);

然后你可以从这个数组中选择一个随机元素。


(添加。)使用 kiruwka 评论中示例中的概率:

int[] numsToGenerate           = new int[]    { 1,   2,    3,   4,    5   };
double[] discreteProbabilities = new double[] { 0.1, 0.25, 0.3, 0.25, 0.1 };

导致所有整数的最小乘数是 20,这给了你

2, 5, 6, 5, 2

因此 numsToGenerate 的长度为 20,具有以下值:

1 1
2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4
5 5

分布完全相同:例如,“1”的机会现在是 20 分之 2 - 仍然是 0.1。

这是基于您的原始概率全部加起来为 1。如果不是,则将总数乘以相同的因子(这也将是您的数组长度)。

关于java - 带概率的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20327958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com