2008-10-12 15 views
6

को छोड़कर यादृच्छिक संख्या उत्पन्न करना कुछ सीमाओं को छोड़कर आप एक सीमा के भीतर यादृच्छिक संख्या कैसे उत्पन्न करते हैं। उदाहरण के लिए। 1-10 नहीं बल्कि सीमा 2-4 या 7. समाधान मैं अब तक का उपयोग किया है में:रेंज

  • एक यादृच्छिक एक परीक्षण उत्पन्न करता है, तो यह असंतुष्ट अनुमत श्रेणी में है। परिणाम के आधार पर या तो संख्या आउटपुट या फिर से प्रयास करें।
  • मानचित्र की अनुमति एक समान सीमा तक है। 1 और 6 के बीच यादृच्छिक प्राप्त करें और फिर मानचित्र (यानी 6 हो जाता है 10)।
  • श्रेणी (1-1,5-6,8-10) की अनुमति दें। यादृच्छिक रूप से एक श्रेणी चुनें (वैकल्पिक रूप से वजन का उपयोग करें) और रेंज में एक संख्या चुनें।

आपका समाधान क्या है?

उत्तर

8

(बी) अनुमत मूल्यों के लिए एकल श्रेणी और मानचित्र का उपयोग करें।

(ए) धीमा और चलने का समय गैर-निर्धारिती है क्योंकि आपको सही सीमा में कोई संख्या प्राप्त होने तक प्रतीक्षा करना है। यदि आप एक बड़ी रेंज छोड़ना चाहते थे, तो आपको लगाया जाएगा।

(सी) (बी) से अधिक जटिल है; यदि आवश्यक नहीं है तो जटिलता न जोड़ें।

+0

(सी) भी भारित श्रेणियों का उपयोग करना चाहिए। अन्यथा, विचार करें: 0..10, 20..80, 90..100; तीन श्रेणियां हैं, लेकिन यदि श्रेणियों को समान रूप से चुना जाने की संभावना है, तो आप बहुत कम किए गए परिणाम देखने जा रहे हैं। –

+1

हां, यदि वितरण महत्वपूर्ण है (इसलिए वैकल्पिक रूप से वजन का उपयोग करने के बारे में मेरा बयान)। इसके अलावा मुझे प्रत्येक विधि की कमी के बारे में पता है - मुझे आश्चर्य हुआ कि वहाँ एक और अधिक सुरुचिपूर्ण समाधान है :) – Goran

1

यह इस बात पर निर्भर करेगा कि बहिष्करण श्रेणियां कितनी/बड़ी हैं। अनुमत सीमा के लिए परीक्षण (आपका विकल्प 1) छोटे सेट के लिए ठीक काम करेगा; एक आसान समस्या के समाधान को जटिल करने की कोई ज़रूरत नहीं है। समाधान 3 अधिक असंख्य बहिष्करण सेट के लिए बेहतर काम करेगा। समाधान 2 सबसे अधिक काम है, लेकिन शायद सबसे सही सैद्धांतिक समाधान है।

1

मैं आमतौर पर ऊपर बुलेट नंबर दो द्वारा वर्णित तकनीक का उपयोग करता हूं, खासकर अगर स्वीकार्य संख्याओं का सेट काफी छोटा है। एक सांख्यिकीय दृष्टिकोण से, परिणामों के यादृच्छिकता को बर्बाद करने या परिणामों को एक फ्लैट वितरण से दूर करने के लिए आसान तरीका है।

इसमें एक ही पिक (जैसे कार्ड से निपटने या बिंगो गेंदों को चुनने) की अनुमति देने का अतिरिक्त लाभ है ... आप बस मानचित्र से पहले से चुने गए मानों को हटा दें।

0

ऐसा लगता है कि आपके एल्गोरिदम को एक मामूली रीडिज़ाइन से लाभ हो सकता है जो यादृच्छिक संख्या जनरेटर का उपयोग करके स्पष्ट रूप से उन्हें खोजने के बजाय यादृच्छिक संख्या को अंतर्निहित बना देगा।

उदाहरण के लिए यदि आप 1 से 10 तक की यादृच्छिक श्रृंखला प्राप्त करना चाहते हैं, तो आदेश दिया गया श्रृंखला से शुरू करना बेहतर है, उदाहरण के लिए इसे स्वैपिंग के माध्यम से कुछ फैशन में मिलाएं (इस बारे में एक सवाल था) और दूसरे के बाद नंबर एक ले लो।

1

उन्हें उन श्रेणियों की कुल संख्या में मानचित्र करें जिन्हें आप उम्मीद करते हैं। फिर उन्हें श्रेणियों के बीच वितरित करें।

उदा। यदि आपको 0..10 और 100 के बीच यादृच्छिक की आवश्यकता है। .110

20 के बीच एक यादृच्छिक संख्या उत्पन्न करें। निचले 10 को 0..10 रेंज में सौंपा गया है, शेष अन्य अंतराल (या कुछ ऐसा कि - मैं एक से दूर हो सकता हूं .. अंतराल अंकगणित इन चीजों में से एक है कि मैं पहली कोशिश पर कभी सही नहीं होता)।

इसका कारण यह है कि आप अक्सर गैर परिपूर्ण यादृच्छिक जेनरेटर से निपटते हैं।ये अजीब व्यवहार करना शुरू करते हैं यदि आप कई आयामों पर लगातार यादृच्छिक-संख्या चर वितरित करते हैं (उदाहरण के लिए पहले एक यादृच्छिक अंतराल चुनें, फिर चुने हुए अंतराल के अंदर एक यादृच्छिक चुनें)। इससे एक बहुत ही स्पष्ट गैर-यादृच्छिक व्यवहार हो सकता है।

यदि आप एक बेहतर यादृच्छिक संख्या जनरेटर के साथ शुरू करते हैं जो वास्तविक यादृच्छिक स्रोतों से डेटा प्राप्त करता है तो आप कीमती यादृच्छिक बिट्स बर्बाद कर सकते हैं। यदि आप इसे हर सेकेंड में एक बार करते हैं तो यह कोई समस्या नहीं हो सकती है। यदि आप इसे अक्सर करते हैं, हालांकि आप प्रोग्राम को रोक सकते हैं क्योंकि शुद्ध यादृच्छिक स्रोतों को आपके यादृच्छिक-बिट उपभोग के साथ पकड़ना पड़ता है।

+0

दो श्रेणियों में से प्रत्येक में से एक के द्वारा, मुझे डर है (श्रेणी 0..10 में 11 मान; इसी प्रकार 100 ..110)। –

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