例如,如果我有一个像这样的整数数组:
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/