Java中的加权随机性 [英] Weighted randomness in Java
本文介绍了Java中的加权随机性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Java中,给定 n 项目,每个项目的权重 w ,如何从集合中选择一个等于 w的随机项目?
In Java, given n Items, each with weight w, how does one choose a random Item from the collection with a chance equal to w?
假设每个权重是从0.0到1.0的两倍,并且集合中的权重总和为1. Item.getWeight()返回Item的权重。
Assume each weight is a double from 0.0 to 1.0, and that the weights in the collection sum to 1. Item.getWeight() returns the Item's weight.
推荐答案
Item[] items = ...;
// Compute the total weight of all items together
double totalWeight = 0.0d;
for (Item i : items)
{
totalWeight += i.getWeight();
}
// Now choose a random item
int randomIndex = -1;
double random = Math.random() * totalWeight;
for (int i = 0; i < items.length; ++i)
{
random -= items[i].getWeight();
if (random <= 0.0d)
{
randomIndex = i;
break;
}
}
Item myRandomItem = items[randomIndex];
这篇关于Java中的加权随机性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文