javascript - 用于从每个条目具有不同权重的数组中选择项目的高效 javascript 算法

标签 javascript arrays algorithm

基本上我在java脚本中有一个二维数组,以对象的形式,概率:

A,10 B,50 C,20 D,20

其中数字是从 100 个项目中选择的概率。

按照指定概率随机选择项目的最有效算法是什么?

(目前我从 1-100 中获得一个随机数,并根据前面各项的总和选择一项,因此 5 将获得 A、40 B、65 C 等)

谢谢!

中号

最佳答案

我们假设您的输入是在表单中

var probs = [['A' ,10], ['B', 50], ['C', 20], ['D', 20]];

计算累积概率:

var cur = 0;
var cumulative = probs.map(elt => cur += elt[1]);

这将创建一个数组

[10, 60, 80, 100]

编写一个函数来查找哪个元素对应于特定概率:

function get_element(prob) {
  for (var i = 0; i < cumulative.length; i++) {
    if (prob <= cumulative[i]) return i;
  }
}

现在就写

probs[get_element(Math.random() * 100)] [0]

关于javascript - 用于从每个条目具有不同权重的数组中选择项目的高效 javascript 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34402317/

相关文章:

javascript - 使用 while 调用 javascript 函数

javascript - 无法获取数据集数值

java - Coin change : get the combinations recursively,如何将它们保存到数组中

java - 查找阴影对象

javascript - 如何使用 Javascript/JQuery 将 date_select 值构造为单一日期格式?

javascript - 复合网页动画

javascript - 与 Sammy.js 深度链接?

arrays - 查找数组中是否存在两个互质数

c++ - 大数组的C++/CUDA怪异行为

javascript - 日期未显示在 angular-bootstrap 日期选择器中