Php 基于浮点数权重的随机选择

Php 基于浮点数权重的随机选择,php,random,Php,Random,假设我有一个具有以下值的数组: 0.7523262 0.9232192 1.5824928 5.2362123 从该数组中随机选取一个值的最佳方法是什么,以便该值越高,被选中的可能性越大?有一些常用的函数可以进行加权选择,但它们都使用mt_rand(),这对于这样的情况不起作用 例如,2.4652474的值可能是1.2326237的值的两倍。我不知道这是否是最好的方法,但您可以通过计算数组中所有项的总和,将其乘以0和1之间的随机数来获得目标,然后计算数组中所有项的运行总数,直到该总数超过目标值

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

0.7523262
0.9232192
1.5824928
5.2362123
从该数组中随机选取一个值的最佳方法是什么,以便该值越高,被选中的可能性越大?有一些常用的函数可以进行加权选择,但它们都使用mt_rand(),这对于这样的情况不起作用


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

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

计算一个介于
0
和整个数组之和之间的随机数

对数组进行排序,使较小的数字排在第一位

从左边开始对数组求和。当总和大于随机数时,选择已达到的索引

如果你有

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

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

如果它也加权,那么拾取怎么可能是随机的?对于如何进行加权,您是否有一个特定的算法(用简单的英语)在头脑中?它们更可能是“如何”重要吗?是否存在位置线性增加的机会(最低、第二最低等)(这可能很容易),或与实际内容线性增加的机会,其他方式(如非线性)相关?不管他们是否有关联,只是增加了机会而已?@Calvin,关于我的问题,你有什么不明白的?我又读了一遍,对我来说,它似乎是用通俗易懂的英语写的。我想从列表中随机挑选一个数字,但数字越高,被挑选的可能性就越大。。你在他的评论之后添加了关于他们应该如何联系的解释,所以可能就是这样?是的,你在之后添加了解释。我认为你是对的。我想我有一个分类计划,但我现在记不起来了。