javascript - 基于概率的变体选择

标签 javascript algorithm language-agnostic

抱歉我的英语不是很好。这对我来说是新主题(我的意思是我第一次使用英语谈论它 :) 所以我可以犯一些错误)。

所以问题。

例如,我有 3 个变体。概率是:例如 0.5、0.2、0.3。我现在如何选择要选择的变体?我想我可以这样做:

  1. 创建区间[0; 1].
  2. 以较小的间隔(在我的示例中为 3)将其分开。 [0; 0.5), [0.5, 0.7), [0.7, 1]。
  3. 生成一个从 0 到 1 的随机数(float,double)
  4. 检测号码所属的区间

例如生成了 0.3,所以第一个间隔,所以第一个变体。

  1. 这是正确的方法吗?
  2. 如何使用 JavaScript 对此进行编码或至少使用伪代码进行展示。

P.S.:我每次都有动态数量的变体。

谢谢。

最佳答案

这是正确的方法,您可以像这样让它工作:

var rand = Math.random();

if (rand < 0.5) {
    // first variant
} else if (rand < 0.7) {
    // second variant
} else {
    // third variant
}

您不需要在条件中完全指定区间,因为 Math.random() 从区间 [0,1] 生成实数。

对于动态数量的变体,您可以创建间隔的相应右端数组并循环遍历它:

var intervals = [0.1, 0.25, 0.28] // note that the array has to be sorted for this to work

var rand = Math.random();

for(i in intervals) {
    if (rand < intervals[i]) {
        // i-th variant
        break;
    }
}

关于javascript - 基于概率的变体选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22898235/

相关文章:

javascript - 使用jquery访问具有相同类名但不同测试的嵌套div

javascript - 具有特定类的最接近的 div

algorithm - 选择哪个节点作为最近邻算法的起始节点

algorithm - 具有大量局部最小值的多参数优化

订购产品时找到最佳价格组合的算法

javascript - 如何使用 Vue.js 设置和获取输入组件的值?

javascript - 如何在按下手机后退按钮时关闭 ionic 弹出窗口

language-agnostic - 按引用传递还是按值传递?

Java数组——消除中间的连续数

algorithm - 如何在 for 循环(matlab)中压缩 n-1,n-2,...?