कुछ इस तरह:
1: (1/1) * (1/2) * (2/3) * (3/4) = 1/4
2: (1/2) * (2/3) * (3/4) = 1/4
3: (1/3) * (3/4) = 1/4
4: 1/4 = 1/4
संपादित करें: स्टीव जेसप ने बताया चल बिन्दु तुलना
int count = 0;
int index = -1;
for (int i = 0; i != n; ++i)
{
if (values[i])
{
++count;
if (unit_random <= 1.0f/count)
{
index = i;
}
}
}
उदाहरण के लिए 4 मूल्यों के लिए
तो तुम अपने इंडेक्स के लिए निम्नलिखित संभावनाओं मिल अंत में एक बहुत ही समान वर्दी चयन का नेतृत्व करेंगे। rand
के असतत प्रकृति के कारण
typedef unsigned long long u64;
u64 product = u64(count) * rand();
if (product <= u64(RAND_MAX))
यह एकदम सही वितरण नहीं दे देंगे, लेकिन यह बेहतर होगा: मान लिया जाये कि unit_random
rand()/RAND_MAX
तुलना के रूप में परिभाषित किया गया है करने के लिए बदला जा सकता है।
स्रोत
2012-03-23 13:42:24
क्षमा है, मैं एक शब्द भी भूल गया। मेरा कहना था: एक यादृच्छिक TRUE मान की अनुक्रमणिका लौटें ... केवल हमें नहीं मिला पहला। लेकिन फ़ंक्शन को किसी भी इंडेक्स को यादृच्छिक रूप से वापस करना चाहिए। – PaulV
@PaulV यह वही है जो यह कार्य करता है। –
@ निक हाँ, लेकिन मैंने अपना जवाब संपादित कर दिया है;) –