基于权重的随机元素选取

时间:2016-01-28 07:09:26

标签: php algorithm

假设我们有一个名称和重量数组

这样的东西

简5 约翰3 丹麦人0 Doe 1

如果重量为0,Dane的名称应显示为重量为1的1/10

其余的是成比例的。

因此名字Jane将比Doe

多出5次

最大重量为10

我正在考虑一种基于权重选择名称的有效算法。

我目前的做法是将重量转化为一个非常大的数组。

所以Dane会有一个条目。简将有50个条目。然后我随机选择每个条目都有相同的机会。

我正在使用PhP。

我想知道是否有更有效的方式。

1 个答案:

答案 0 :(得分:0)

您可以使用以下步骤: 首先,将所有权重的值相加。

其次,在1和总和之间生成随机数。

现在,我们有一个小于或等于所有重量总和的随机数。但我们需要有一个权重。此外,它应该有更高的机会获得更高的重量。

我们可以通过从生成的随机数中逐个减去所有权重来实现。如果结果值是非负的,那么它可能具有较低的权重。如果结果值为负,则它应该是更高的加权元素。