gpt4 book ai didi

javascript - 使用带有偏差的 Random()

转载 作者:行者123 更新时间:2023-12-01 00:07:49 24 4
gpt4 key购买 nike

假设我有一个数组

var list = ['a', 'b', 'c', 'd'];

我想从 List 中随机选择一个值。如果是完全随机的,则每个都有 25% 的机会。有没有办法随机选择一个带有偏差的值,如下所示:

var bias = [0.1, 0.2, 0.1, 0.6];

(偏差当然加起来为 1)

所以 'a' 有 10% 的机会被选中,而 'b' 有 20% 的机会被选中,等等

编辑:我知道我可以修改 do var list = ['a', 'b', 'b', 'c', 'd', 'd', 'd', 'd' , 'd', 'd'] 并只是随机选择一个值,但我正在寻找一种更有效的方法,只需要一个包含偏差的数组。

最佳答案

制作一个累积偏差列表:

var sum = 0;
var cumulativeBias = bias.map(function(x) { sum += x; return sum; });

然后生成一个从0sum的随机数(即cumulativeBias[cumulativeBias.length - 1]):

var choice = Math.random() * sum;

然后在 cumulativeBias 中搜索第一个大于 choice 的元素。您可以使用二进制搜索来提高速度,但对于短列表,顺序搜索就足够了。该元素的索引是选定的索引。例如,像这样的东西:

var chosenIndex = null;
cumulativeBias.some(function(el, i) {
return el > choice ? ((chosenIndex = i), true) : false;
});
chosenElement = list[chosenIndex];

关于javascript - 使用带有偏差的 Random(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com