Java中的加权随机性 [英] Weighted randomness in Java

查看:688
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆