如何根据百分比概率做出选择

时间:2013-02-02 21:48:12

标签: c# probability

我希望使用this帖子中提供的答案随机选择列表中的唯一项目。

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

我需要知道的是如何使用此百分比值来选择项目(或不是)。

以下是我的代码,remainingIndicesList<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之间的值,因此与{{1的返回值完全匹配因此可以用于比较,如下面的答案中所述。

1 个答案:

答案 0 :(得分: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--;
    }
}