从偏倚列表中选择项目?

时间:2010-04-08 18:43:11

标签: random

给定项目列表x1 ... xn和相关概率p1 ... pn总和为1,通过根据权重对列表进行排序来选择具有相关可推广性的随机项目,这是一个众所周知的过程,选择一个随机值介于1和0之间,并加起来达到顶点总和,直到超过所选值并在此时返回该项目。

所以,如果我们有x1 - > 0.5,x2 - > 0.3,x3 - > 0.2,如果随机选择的值小于0.5 x1将被选择,如果介于0.5和0.8之间,x2和x3之间。

这需要排序,因此需要O(nlogn)时间。还有什么比这更有效的吗?

1 个答案:

答案 0 :(得分:0)

我认为您实际上不需要对列表进行排序以使算法起作用。

x1 = 0.2,x2 = 0.7,x3 = 0.1

如果你排序,那么你有:

x3: 0.0 to 0.1 = 10%
x1: 0.1 to 0.3 = 20%
x2: 0.3 to 1.0 = 70%

如果你不这样做,你会得到:

x1: 0.0 to 0.2 = 20%
x2: 0.2 to 0.9 = 70%
x3: 0.9 to 1.0 = 10%

只需消除排序并迭代将使其成为O(n)。