2013-02-02 10 views
5

Bir listeden benzersiz öğeleri rastgele seçmek için this gönderiminde verilen yanıtı kullanmak istiyorum.Yüzde olasılık temel alınarak nasıl seçim yapılır

Açıklanan yöntemin ardından, döngümün her yinelemesinde, geçerli öğenin listeden seçilme olasılığı yüzdesi olan bir olasılık değeri oluşturur.

Bilmem gereken şey, öğeyi seçmek için bu yüzde değerini nasıl kullanacağımdır (veya değil). 0,0333333351

azından ben başlangıç ​​alıyorum 3600 olasılık değerleri çözümü esnek olmalıdır İşte

remainingIndices bir List<int>

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

pixelsToAdd 120 olduğunu ve remainingIndices.Count olmak, sahip kodudur Daha geniş bir değer aralığıyla çalışmak, tercihen herhangi bir değer.

Teşekkür

Ekle Bu sorunun gelecek okuyucular için

İlk başta ben olasılık değeri 0 ile 100 arasında ama gerçekte bazı yüzdesi 0 ile 1 arasında bir değer olduğunu düşündüğünü açıklamak gerekir ve böylece Random.NextDouble() dönüş değeri ile mükemmel şekilde eşleşir, bu nedenle aşağıdaki cevaplarda açıklandığı şekilde karşılaştırma yapmak için kullanılabilir.

cevap

3

Olasılığı kullanmak için, [0, 1] nolu üniform dağılımı izleyerek rastgele değişkenlerden bir örnekle karşılaştırın.

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

Sen Oluşan döngü olacaktır: Tipik olduğu gibi

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

Sadece soru gönderdikten sonra() Random.NextDouble keşfetti ve aniden kafamda tıkladım. Sağlam örnek için teşekkürler, eminim onsuz bir şeyleri özleyecektim. – Steve