2013-02-02 3 views
5

Ich möchte die Antwort in this Beitrag nach dem Zufallsprinzip wählen einzigartige Gegenstände aus einer Liste verwenden.Wie man eine Wahl basierend auf einer prozentualen Wahrscheinlichkeit treffen kann

Nach der beschriebenen Methode, erzeuge ich in jeder Iteration meiner Schleife einen Wahrscheinlichkeitswert, der die prozentuale Chance darstellt, dass das aktuelle Element aus der Liste ausgewählt wird.

Was ich wissen muss ist, wie verwende ich diesen Prozentwert, um den Artikel auszuwählen (oder nicht).

Hier ist der Code, die ich habe, mit remainingIndices ein List<int>

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

pixelsToAdd 120 und remainingIndices.Count ist 3600. Die Wahrscheinlichkeitswerte zu sein ich Anfang bin immer bei 0,0333333351

Die Lösung sollte flexibel sein mit einem viel breiteren Wertebereich zu arbeiten, vorzugsweise mit beliebigen Werten.

Dank

Kommentar

Für zukünftige Leser dieser Frage soll ich es ist ein Wert zwischen 0 und 1 zuerst dachte ich, der Wahrscheinlichkeitswert eines gewissen Prozentsatz zwischen 0 und 100 war in Wirklichkeit aber klarstellen, dass und stimmt somit perfekt mit dem Rückgabewert von Random.NextDouble() überein, der daher zum Vergleich verwendet werden kann, wie in den Antworten unten beschrieben.

Antwort

3

Um Ihre Wahrscheinlichkeit zu verwenden, vergleichen Sie sie mit einer Zufallsvariablen nach einer gleichmäßigen Verteilung auf [0, 1].

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

Sie resultierende Schleife wird:

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

Als typische entdeckte ich Random.NextDouble() kurz nach der Frage, und es plötzlich klickte in meinem Kopf einreichen. Danke für das solide Beispiel, ich bin sicher, dass ich etwas ohne es verpasst hätte. – Steve

Verwandte Themen