java - 如何以加权的方式选择随机数

标签 java algorithm random

例如,如果我有一个像这样的整数数组:

int[] list = {1, 4, 2};

我想选择这 3 个数字之一,但更频繁地选择较大的值:

1 get chosen 1/7 of the time
4 gets chosen 4/7 of the time
2 gets chosen 2/7 of the time

如果 Java 中还没有这样的函数,我该如何为此编写一个函数。

编辑:我正在寻找一个有效的解决方案,O(n) 或更好。

我将在多个线程中多次运行此代码。建立一个新列表是不够的。

最佳答案

累加列表中的值并调用结果总和S。现在生成一个从 0 到 S - 1 的随机数。再次迭代list,并对每个元素执行以下操作:如果该元素大于S,则选择该元素。否则,将 S 减去该元素的值,然后继续处理下一个元素。

关于java - 如何以加权的方式选择随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26751458/

相关文章:

java - 如何获取 JTable 单元格内文本所占的确切空间?

python - 我在特征脸图像识别部分有错误

algorithm - 优化包含给定点集的网格间距

python - 如何使用某种 "momentum"生成随机方向(N、S、E、W、无)?

java - 在二维数组中生成唯一的行和列

java - 图像中的颜色优势和直方图的使用

java - 如何将操作事件监听器的多个结果添加到对话框

java - 为什么要在eclipse中使用project clean?

c# - 优化(降低复杂性)。从 n 个边长计算锐角、直角和钝角三角形

javascript - 安卓猜谜游戏?当用户正确时如何更改随机数并在用户什么都不输入时解决崩溃修复?