假设我们有一个名称和重量数组
像
这样的东西简5 约翰3 丹麦人0 Doe 1
如果重量为0,Dane的名称应显示为重量为1的1/10
其余的是成比例的。
因此名字Jane将比Doe
多出5次最大重量为10
我正在考虑一种基于权重选择名称的有效算法。
我目前的做法是将重量转化为一个非常大的数组。
所以Dane会有一个条目。简将有50个条目。然后我随机选择每个条目都有相同的机会。
我正在使用PhP。
我想知道是否有更有效的方式。
答案 0 :(得分:0)
您可以使用以下步骤: 首先,将所有权重的值相加。
其次,在1和总和之间生成随机数。
现在,我们有一个小于或等于所有重量总和的随机数。但我们需要有一个权重。此外,它应该有更高的机会获得更高的重量。
我们可以通过从生成的随机数中逐个减去所有权重来实现。如果结果值是非负的,那么它可能具有较低的权重。如果结果值为负,则它应该是更高的加权元素。