今天面试的时候他们问了我这个问题?如何在Java中生成离散随机变量?我做不到,但我想知道解决方案。他们给了我一个数组:
double[] probabilities={.2,.1,.3,.4};
double[] outcomes ={4,5,8,11.5};
Run Code Online (Sandbox Code Playgroud)
这应该给出答案:
double discreteRV = problem.randPMF(probabilities,outcomes);
Run Code Online (Sandbox Code Playgroud)
我不明白如何解决这个问题。
由于所有概率之和总是为 1,因此您可以生成 0 到 1 之间的随机数,然后迭代概率并减去它们。当数字小于或等于0时,最后减去的概率的索引就是结果的索引:
import java.util.Random;
Run Code Online (Sandbox Code Playgroud)
public static double randPMF(double[] prob, double[] out) {
double rand = Math.random();
int index = -1;
while (rand >= 0) {
index++;
rand -= prob[index];
}
return out[index];
}
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案的想法:
private double randPMF(double[] probabilities, double[] outcomes) {
double random = Math.random();
double p = 0;
for (int i = 0; i < probabilities.length; i++) {
p += probabilities[i];
if (random < p) {
return outcomes[i];
}
}
return outcomes[outcomes.length - 1];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |