2013-02-02 20 views
5

पर आधारित विकल्प कैसे बनाएं I सूची में अद्वितीय आइटम चुनने के लिए 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

संबंधित मुद्दे