根据重量挑选随机元素


Picking Random Elements Based on Weight

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

类似的东西

简 5约翰福音 3丹麦人 0母鹿 1

如果权重为 0,则名称 Dane 应该比权重为 1 时显示 1/10

其余的都是成比例的。

所以简的名字会比多出现 5 次

最大重量为 10

我正在考虑一种有效的算法,可以根据名称的权重来选择名称。

我目前所做的方法是将权重转换为一个非常大的数组。

所以戴恩会有一个条目。Jane 将有 50 个条目。然后我随机选择每个条目都有平等机会的地方。

我正在使用PhP。

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

您可以使用

以下步骤:首先,对所有权重的值求和。

其次,生成介于 1 和总和之间的随机数。

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

我们可以通过从生成的随机数中逐个减去所有权重来做到这一点。如果结果值为非负值,则其权重可能较低。如果结果值为负数,则它应该是更高权重的元素。