मेरे एल्गोरिदम में मेरे पास दो मान हैं जिन्हें मुझे यादृच्छिक रूप से चुनने की आवश्यकता है लेकिन प्रत्येक को एक पूर्व निर्धारित संख्या का चयन करना होगा।दो मानों के यादृच्छिक विकल्प
अब तक मेरा समाधान वेक्टर में विकल्पों को सही संख्या में रखना है और फिर इसे घुमाएं। सी ++ में:
// Example choices (can be any positive int)
int choice1 = 3;
int choice2 = 4;
int number_of_choice1s = 5;
int number_of_choice2s = 1;
std::vector<int> choices;
for(int i = 0; i < number_of_choice1s; ++i) choices.push_back(choice1);
for(int i = 0; i < number_of_choice2s; ++i) choices.push_back(choice2);
std::random_shuffle(choices.begin(), choices.end());
तब मैं choices
के लिए एक इटरेटर रखने के लिए और जब भी मैं एक नया एक की जरूरत है मैं iterator बढ़ाने के लिए और है कि मूल्य हड़पने।
यह काम करता है लेकिन ऐसा लगता है कि एक और अधिक प्रभावी तरीका हो सकता है। चूंकि मैं हमेशा जानता हूं कि मैं कितने मूल्य का उपयोग करूंगा, मैं सोच रहा हूं कि मूल्यों को संग्रहीत करने के बजाय ऐसा करने के लिए और अधिक एल्गोरिदमिक तरीका है या नहीं।
मैं कामकाजी समाधान के साथ रहूंगा जब तक कि ऐसा कोई अच्छा कारण न हो। क्या यह एक बाधा या ऐसा कुछ के रूप में प्रोफाइल किया गया है? – amit
एक तरीका है लेकिन यह कम स्पष्ट और संक्षिप्त होगा। मैं इस तकनीक के साथ रहना होगा। –
मुझे वास्तव में वास्तव में इस समाधान को पसंद है। अन्य सभी समाधान जो ध्यान में आते हैं (लगभग 5 सेकंड के लिए सोचने के बाद) यादृच्छिक संख्या जनरेटर शामिल हैं। लेकिन चूंकि आपके पास प्रत्येक विकल्प की पूर्व निर्धारित संख्या है, इसलिए ये समाधान असुरक्षित होंगे क्योंकि आखिरकार उनकी पसंद के बाद मूल्यों को अनदेखा करना शुरू हो जाएगा। (माना जाता है कि शफल विधि संभावित रूप से एक सीपीयू नाली है, लेकिन आप इसे कम से कम एक अनुमानित चलने का समय बना सकते हैं, जिसे आप ऊपर के बारे में सोच रहे समाधानों के साथ नहीं कर सकते हैं) – gnomed