【问题标题】:How to make a choice based on a percentage probability如何根据百分比概率做出选择
【发布时间】:2013-02-02 21:48:12
【问题描述】:

我希望使用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 之间的值,因此与 Random.NextDouble() 的返回值完美匹配因此可以用于比较,如下面的答案所述。

【问题讨论】:

    标签: c# probability


    【解决方案1】:

    要使用您的概率,请将其与随机变量的样本进行比较,该样本遵循[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() ,它突然在我脑海中响起。不过,感谢您提供的可靠示例,我敢肯定,如果没有它,我会错过一些东西。
    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2014-04-03
    • 2013-12-24
    • 2012-10-31
    相关资源
    最近更新 更多