如何解决从数组中随机带来更大数字的算法
我做了研究,发现了一般用于小清单的算法。我有一些这样的数组:
arr = [1,2,3,4 ....,96,97,98,99,100];
arr2 = [105,110,165,170];
arr3 = [1,7,8,9];
我想将这些数组发送给函数并从该数组中获取随机数,但是我希望每次获取较大数字的可能性更高。
例如,在数组1中,概率96应该大于4,但是概率97应该大于96。
How to generate a random weighted distribution of elements
通常,解决方案类似于本主题。但是,这可能会导致阵列性能出现问题。
我该如何实现?
解决方法
您可以计算概率并选择值。
要与自定义数组一起使用,请使用random
getRandomValue = random(sortedArray),
以及稍后循环
let value = getRandomValue();
const
random = sortedValues => {
let length = sortedValues.length,sum = length * (length + 1) / 2;
return () => {
let r = Math.random();
return sortedValues.find((_,i) => (r -= (i + 1) / sum) <= 0);
};
},getRandomValue = random([6,7,8,9,10]),counts = {};
for (let i = 0; i < 1e6; i++) {
let value = getRandomValue();
counts[value] = (counts[value] || 0) + 1;
}
console.log(counts);
.as-console-wrapper { max-height: 100% !important; top: 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。