Java 陷入离散分布,无法完成问题
编写一个程序DiscreteDistribution.java,该程序接受一个整数命令行参数m,后跟一系列正整数命令行参数a1、a2、…、an,并打印m个由空格分隔的随机索引,以与ai成比例的概率选择每个索引i 到目前为止我有Java 陷入离散分布,无法完成问题,java,arrays,Java,Arrays,编写一个程序DiscreteDistribution.java,该程序接受一个整数命令行参数m,后跟一系列正整数命令行参数a1、a2、…、an,并打印m个由空格分隔的随机索引,以与ai成比例的概率选择每个索引i 到目前为止我有 public static void main(String[] args) { // number of random indices int m = Integer.parseInt(args[0]); // read in frequenc
public static void main(String[] args) {
// number of random indices
int m = Integer.parseInt(args[0]);
// read in frequency of occurrence of n values
int n = args.length;
int[] freq = new int[n];
for (int i = 0; i < n; i++) {
freq[i] = Integer.parseInt(args[i]);
}
// compute total count of all frequencies
int total = 0;
for (int i = 0; i < n; i++) {
total += freq[i];
}
for (int j = 0; j < m; j++) {
// generate random integer with probability proportional to frequency
int r = (int) ((total) * Math.random() - 1); // integer in [0, total)
int sum = 0;
int event = -1;
for (int i = 0; i < n && sum <= r; i++) {
sum += freq[i];
event = i;
System.out.println(freq[i]);
}
}
}
假设我正确理解了您的问题,那么您可以使用以下算法根据给定频率生成1到n范围内的m个随机数:
public static void main(String[] args) {
// number of random indices
int m = Integer.parseInt(args[0]);
// read in frequency of occurrence of n values
int n = args.length;
int[] freq = new int[n];
for (int i = 1; i < n; i++) {
freq[i] = Integer.parseInt(args[i]);
}
// compute total count of all frequencies
int total = 0;
for (int i = 1; i < n; i++) {
total += freq[i];
}
double[] summedProbabilities = new double[n];
for (int i = 1; i < summedProbabilities.length; i++) {
final double probability = freq[i] / (double) total;
summedProbabilities[i] = summedProbabilities[i -1] + probability;
}
for (int j = 0; j < m; j++) {
// generate random integer with probability proportional to frequency
double randomProbability = Math.random();
int i = 1;
while (randomProbability > summedProbabilities[i]) {
i++;
}
System.out.print(i + " ");
if (j % 10 == 0) {
System.out.println();
}
}
}
我强烈建议您重构代码,使用方法来计算小片段,然后编写代码。Java对于Javascript就像痛苦对于绘画,火腿对于仓鼠一样。他们完全不同。强烈建议有抱负的程序员尝试学习他们试图编写代码的语言的名称。当你发布一个问题时,请给它贴上适当的标签——这可以让那些了解你需要帮助的语言的人看到你的问题。我理解。我对这是相当陌生的,我不知道这一点。谢谢你帮我澄清。你能分享一个输入字符串数组args的例子吗?你说你在完成这个问题时遇到了问题,但你没有说问题是什么。我添加了一些图片来帮助你。