基于浮点权重的随机选择

时间:2011-06-20 18:47:55

标签: php random

假设我有一个包含以下值的数组:

0.7523262
0.9232192
1.5824928
5.2362123

从这个数组中随机选择一个值的最佳方法是什么,以便值越高,选择它的可能性越大?有一些常用函数可以进行加权选择,但是它们都使用mt_rand(),这对于类似的东西不起作用。

例如,值为2.4652474的可能性是1.2326237的两倍。

2 个答案:

答案 0 :(得分:1)

我不知道这是否是最好的方法,但你可以通过计算数组中所有条目的总和,将其乘以0到1之间的随机数来得到目标,然后计算数组中所有条目的运行总计,直到该总数超过目标。返回超出目标的条目。

答案 1 :(得分:1)

计算0与整个数组之和的随机数。

对数组进行排序,以便首先使用较低的数字。

从左侧开始总结数组。当总和高于随机数时,您可以选择已达到的指数。

如果你是有

Array = [1, 1.5, 2, 2.5]
Sum of Array = 7
Random = 4

我们检查第一个索引。这低于4,因此我们会添加第二个数字1 + 1.5 = 2.5,而不是4,因此我们添加了另一个数字2.5 + 2 = 4.5,高于4所以我们选择第三个指数。