【发布时间】:2019-06-24 15:51:52
【问题描述】:
我不确定这里的技术术语是什么,所以我可以搜索的术语将不胜感激。
假设一个角色有多个不同权重的决定。
Decision A: 1
Decision B: 3
Decision C: 5
Sum: 9
代码的作用是将它们加在一起,这样有 1/9 的几率做出决定 A,做出决定 B 的几率为 3/9,做出决定 C 的几率为 5/9。
有一些因素会从池中删除和添加某些决策。这些权重不是固定的(例如,对于更智能的字符,B 可能为 2,或者根据各自的权重分为 B1 和 B2)。
现在我正在做的只是一个线性搜索,如下所示(在 JavaScript 中):
let totalWeight = 0;
for (let i = array.length - 1; i >= 0; i--) {
totalWeight += array[i].weight;
}
// this function rolls a random number from 1 to totalWeight
let r = roll(1, totalWeight);
let search = 1;
for (let i = 0; i < array.length; i++) {
let w = array[i].weight;
if (r >= search && r < (search+w)){
return array[i];
}
search += w;
}
但这似乎不是很有效。看起来这里可以有一个二进制搜索算法,但我似乎想不出一个。有什么想法吗?
【问题讨论】:
标签: javascript algorithm binary-search