如何基于百分比概率做出选择

5

我希望使用这篇文章所提供的答案从列表中随机选择唯一项。

按照所描述的方法,在循环的每次迭代中,我生成一个概率值,表示当前项被从列表中选中的百分比。

我需要知道如何使用这个百分比值来选择(或不选择)该项。

以下是我的代码,其中remainingIndices是一个List<int>

for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
}

pixelsToAdd 是120而remainingIndices.Count是3600。我得到的概率值从0.0333333351开始。

解决方案应该灵活,可以处理更广泛的值,最好是任何值。

谢谢

评论

对于这个问题的未来读者,我应该澄清一下,起初我认为概率值是在0和100之间的某个百分比,但实际上它是在0和1之间的一个值,因此与Random.NextDouble()的返回值完美匹配,可以像下面的答案所述进行比较。

1个回答

3

要使用您的概率,请将其与从均匀分布在[0, 1]上的随机变量样本进行比较。

if (Random.NextDouble() <= probability)
    // Take the ith element in the list

你得到的循环将是:

List<???> selectedItems = new List<???>();
for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
    if (Random.NextDouble() <= probability)
    {
        selectedItems.Add(items[i]);
        pixelsToAdd--;
    }
}

通常情况下,就在我提交问题后,我发现了Random.NextDouble(),突然间我恍然大悟。感谢您提供的实例,我相信如果没有它,我可能会错过一些东西。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接