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

Ste*_*eve 5 c# probability

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

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

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

这是我的代码,remainingIndices是一个List<int>

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

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

解决方案应该灵活,可以使用更广泛的值,最好是任何值.

谢谢

评论

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

Céd*_*non 3

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

if (Random.NextDouble() <= probability)
    // Take the ith element in the list
Run Code Online (Sandbox Code Playgroud)

结果循环将是:

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--;
    }
}
Run Code Online (Sandbox Code Playgroud)