我想从数组中随机选择一个元素,但是每个元素都有一个已知的选择概率。
(在数组中)所有机会的总和为1。
您会建议哪种算法最快,最适合进行大量计算?
例:
id => chance array[ 0 => 0.8 1 => 0.2 ]
对于此伪代码,所讨论的算法应在多个调用上统计地返回id上的四个元素,以id上0的一个元素1。
0
1
计算列表的离散累积密度函数(CDF)-或简单地说就是权重的累积和数组。然后生成一个介于0和所有权重之和之间的随机数(在您的情况下可能为1),进行二进制搜索以在您的离散CDF数组中找到该随机数,并获取与此条目对应的值- 这是您的加权随机数。