我正在试图找出一种方法,根据它们的权重迭代地从数组中选择随机值。我将使用here中的示例,但请注意我 - 这是一个稍微不同的问题。这是一个代表经纪人的类:
public class Broker
{
public string Name = string.Empty;
public int Weight = 0;
public Broker(string n, int w)
{
this.Name = n;
this.Weight = w;
}
}
现在,我有一系列经纪人,我想随机选择一个经纪人,以便选择Broker a 的概率等于 a.Weight 除以数组中所有权重的总和。
此处的更改是我想要 n次,其中 n是数组的大小。所以我们可以在开始之前稍微使用数字(它不会比O(n)少)。 另请注意,权重与n 具有相同的数量级。
以下是我到目前为止所考虑的方向
有没有人知道更好的(即O(n),甚至O(log(log(n))))解决方案?否则 - 任何人都可以证明我们不能比O(nlog(n))更快地完成它吗?