如何根据概率选择项目?
2022-08-31 13:35:02
我有一个项目列表。这些项目中的每一个都有自己的概率。
任何人都可以建议一种算法来根据它的概率来选择一个项目吗?
我有一个项目列表。这些项目中的每一个都有自己的概率。
任何人都可以建议一种算法来根据它的概率来选择一个项目吗?
示例代码:
double p = Math.random();
double cumulativeProbability = 0.0;
for (Item item : items) {
cumulativeProbability += item.probability();
if (p <= cumulativeProbability) {
return item;
}
}
因此,对于每个项目存储一个标记其相对概率的数字,例如,如果您有3个项目,则选择其中一个项目的可能性应该是其他两个项目的两倍,那么您的列表将具有:
[{A,1},{B,1},{C,2}]
然后对列表的数字求和(在我们的例子中为4)。现在生成一个随机数并选择该索引。int index = rand.nextInt(4);返回数字,使索引在正确的范围内。
Java 代码:
class Item {
int relativeProb;
String name;
//Getters Setters and Constructor
}
...
class RandomSelector {
List<Item> items = new List();
Random rand = new Random();
int totalSum = 0;
RandomSelector() {
for(Item item : items) {
totalSum = totalSum + item.relativeProb;
}
}
public Item getRandom() {
int index = rand.nextInt(totalSum);
int sum = 0;
int i=0;
while(sum < index ) {
sum = sum + items.get(i++).relativeProb;
}
return items.get(Math.max(0,i-1));
}
}