在Java中生成离散随机变量?

cvs*_*srt 1 java random

今天面试的时候他们问了我这个问题?如何在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)

我不明白如何解决这个问题。

Eri*_*vey 5

由于所有概率之和总是为 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)


xtr*_*tic 5

这是我的解决方案的想法:

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)