04/16
2019
今天看到的一个算法,挺有意思。
假设有五个选项,在 100 个人里,有 8 个人选择第一项,22 个人选择第二项,26 个人选择第三项,26 个人选择第四项,18 个人选择第五项。如何用程序模拟?
先按照顺序把每个选项的概率保存到数组:[8, 22, 26, 26, 18]
,然后生成一个 100 以内的随机数,依次减去每个数字,当结果小于 0 时,就选择当前这个选项。
var a = [8, 22, 26, 26, 18] // 5 个选项,每个的概率 var r = [0, 0, 0, 0, 0] // 统计结果 for (let i = 0; i < 10000; i++) { // 测试 10000 次 let random = Math.random() * 100 // 生成随机数。如果概率之和不是 100,那么这里的 100 要换成概率之和 for (let j = 0; j < 5; j++) { random -= a[j] // 随机数依次减去概率 if (random < 0) { // 当随机数小于 0 时,选择当前选项 r[j]++ break } } } console.log(r)
经过上面的 demo 验证,结果符合预期。
JavaScript 按概率选择项目
-
Firefox 101Windows -
Firefox 66Windows ( ´_ゝ`)老实讲,看到这个标题,我还以为是那种人员随机分配性质的的随机数生成,必可活用于下次……
是不是也可以按权重来选