假设我们有一个名称和权重数组
类似的东西
简 5约翰福音 3丹麦人 0母鹿 1
如果权重为 0,则名称 Dane 应该比权重为 1 时显示 1/10
其余的都是成比例的。
所以简的名字会比多出现 5 次
最大重量为 10
我正在考虑一种有效的算法,可以根据名称的权重来选择名称。
我目前所做的方法是将权重转换为一个非常大的数组。
所以戴恩会有一个条目。Jane 将有 50 个条目。然后我随机选择每个条目都有平等机会的地方。
我正在使用PhP。
我想知道是否有更有效的方法。
您可以使用
以下步骤:首先,对所有权重的值求和。
其次,生成介于 1 和总和之间的随机数。
现在,我们有一个随机数,它小于或等于所有权重的总和。但是我们需要有一个砝码。此外,它应该有更高的机会获得更高的权重。
我们可以通过从生成的随机数中逐个减去所有权重来做到这一点。如果结果值为非负值,则其权重可能较低。如果结果值为负数,则它应该是更高权重的元素。