- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在 Java 中,给定 n 个项目,每个项目的权重 w,如何从集合中随机选择一个具有等于 w 机会的项目em>?
假设每个权重是从 0.0 到 1.0 的 double ,并且集合中的权重总和为 1。Item.getWeight() 返回项目的权重。
最佳答案
2020 年更新(有趣的是,这在下面的 2011 版本中获得了 37 次投票,但有一个明显的错误):
Math.random()
产生一个非常接近 1.0
的数字时无法选择最后一项的问题,并且我们在浮点精度方面不走运:随机索引结果是-1,这显然是错误的。Item[] items = ...;
// Compute the total weight of all items together.
// This can be skipped of course if sum is already 1.
double totalWeight = 0.0;
for (Item i : items) {
totalWeight += i.getWeight();
}
// Now choose a random item.
int idx = 0;
for (double r = Math.random() * totalWeight; idx < items.length - 1; ++idx) {
r -= items[idx].getWeight();
if (r <= 0.0) break;
}
Item myRandomItem = items[idx];
2011版(留作比较):
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 - Java中的加权随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6737283/
我试图影响 Z3 生成的模型值结果的随机性。据我所知,这方面的选择非常有限:在线性算术的情况下,单纯形求解器不允许仍然满足给定约束的随机结果。但是,有一个选项 smt.arith.random_ini
我需要从表中获取一些数据并通过两个参数对它们进行排序。参数之一是 RAND(),因为记录需要是随机的。我有一个很大的数据库,使用 RAND() 会大大降低性能,我想避免它。是否有机会优化随机排序的性能
所以我尝试将 Boost.Random mt19937 生成器与模板一起使用。我的 c++ 有点生疏,但据我所知(和文档一样,Boost 的文档也很模糊)它应该采用一个模板参数来指定它的返回类型(fl
我正在尝试为家庭作业编写一个遗传算法来解决旅行商问题。 我正在尝试的变异函数之一是在游览中使用 random.shuffle。 当我阅读 random.shuffle 的文档时,我看到: shuffl
尝试创建随机 (0/1) boolean 操作。我设置了一个多维数组。到目前为止,一切正常。我在正确的道路上吗?我目前使用递归;有没有更有效的方法来做到这一点? function randomMove
我想在每天下午 1 点到 2 点之间的随机时间运行一个云函数。我使用 Cloud Scheduler (cron) 将消息发布到触发该功能的 PubSub。我想在 Cloud Scheduler 端实
我想在每天下午 1 点到 2 点之间的随机时间运行一个云函数。我使用 Cloud Scheduler (cron) 将消息发布到触发该功能的 PubSub。我想在 Cloud Scheduler 端实
这可能是一个相当愚蠢的问题。我想知道在 Swift 中使用 arc4random_uniform 是否可以实现不同的细微差别/随机性程度。这是一个例子: let number = arc4random
我正在开发一部分代码,其中我必须使用日历 API 使用现有的 api,而我使用的是全新的 API。在转换中出现了一些奇怪的行为,请看这个例子: SimpleDateFormat df = new Si
我是一名优秀的程序员,十分优秀!