一尘不染

数组中的加权随机选择

algorithm

我想从数组中随机选择一个元素,但是每个元素都有一个已知的选择概率。

(在数组中)所有机会的总和为1。

您会建议哪种算法最快,最适合进行大量计算?

例:

id => chance
array[
    0 => 0.8
    1 => 0.2
]

对于此伪代码,所讨论的算法应在多个调用上统计地返回id上的四个元素,以id上0的一个元素1


阅读 272

收藏
2020-07-28

共1个答案

一尘不染

计算列表的离散累积密度函数(CDF)-或简单地说就是权重的累积和数组。然后生成一个介于0和所有权重之和之间的随机数(在您的情况下可能为1),进行二进制搜索以在您的离散CDF数组中找到该随机数,并获取与此条目对应的值-
这是您的加权随机数。

2020-07-28