2013-02-02 83 views
5

我希望使用this提供的答案从列表中随机选择唯一项目。如何根据百分比概率进行选择

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

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

这里是我的代码,用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()的返回值完美匹配,因此可用于比较,如下面的答案中所述。

回答

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--; 
    } 
} 
+0

作为典型,我发现Random.NextDouble()刚刚提交问题后,它在我的脑海突然意识到。尽管如此,感谢你的坚实例子,我相信如果没有它,我会错过一些东西。 – Steve