2010-05-20 6 views
7

मुझे कुछ अच्छे छद्म यादृच्छिक संख्या जनरेटर की आवश्यकता है जिसे किसी भी राज्य छिपाने के बिना अपने पिछले आउटपुट से शुद्ध फ़ंक्शन की तरह गणना की जा सकती है। के तहत "अच्छा" मेरा मतलब है:क्या छिपे हुए राज्य के बिना "अच्छा" पीआरएनजी उत्पन्न मूल्य है?

  1. मैं इस तरह से जनरेटर parametrize करने के लिए कि किसी भी पैरामीटर के साथ 2^n पुनरावृत्तियों के लिए इसे चलाने (या उनमें से कुछ बड़े सबसेट के साथ) के बीच सभी या लगभग सभी मूल्यों को शामिल करना चाहिए सक्षम होना चाहिए 0 और 2^n - 1, जहां n आउटपुट मूल्य में बिट्स की संख्या है।

  2. n + p बिट्स की संयुक्त जनरेटर उत्पादन सभी को कवर करना होगा या लगभग 0 और 2^(n + p) - 1 बीच के सभी मानों अगर मैं इसे अपने मानकों, जहां p मानकों में बिट्स की संख्या है के हर संभव संयोजन के लिए 2^n पुनरावृत्तियों के लिए चलाते हैं।

उदाहरण के लिए, LCG एक शुद्ध समारोह की तरह गणना की जा सकता है और यह पहली शर्त को पूरा कर सकते हैं, लेकिन यह एक दूसरे को पूरा नहीं कर सकते हैं। कहें, हमारे पास 32-बिट एलसीजी, m = 2^32 है और यह स्थिर है, हमारे p = 64 (दो 32-बिट पैरामीटर a और c), n + p = 96, इसलिए हमें दूसरी स्थिति को पूरा करने के लिए आउटपुट से तीन इंच से डेटा देखना होगा। दुर्भाग्यवश, आउटपुट में अजीब और यहां तक ​​कि इनट्स के कड़ाई से वैकल्पिक अनुक्रम के कारण स्थिति को पूरा नहीं किया जा सकता है। इसे दूर करने के लिए, छुपा राज्य पेश किया जाना चाहिए, लेकिन इससे कार्य शुद्ध नहीं होता है और पहली स्थिति (लंबी छुपी अवधि) तोड़ता है।

संपादित करें: सच पूछिये तो, मैं p बिट्स द्वारा और n बिट्स से भरा राज्य के साथ, हर तरह अद्वितीय "randomish" में p + n बिट्स के सभी संभव द्विआधारी तार पैदा करने के लिए, बस लगातार (p + n) incrementing नहीं parametrized कार्यों का परिवार चाहते हैं - थोड़ा int उस अनोखे तरीके का चयन करने के लिए पैरामीट्रिजेशन आवश्यक है।

क्या मैं बहुत ज्यादा चाहता हूं?

+0

आप लगभग एक अलग अनुक्रम उत्पन्न करने के लिए एक यादृच्छिक संख्या जेनरेटर चाहते हैं? –

+0

@ मॉरन, हाँ। जनरेटर प्रत्येक पैरामीटर के लिए 2^एन पुनरावृत्तियों से अधिक नहीं कर रहे विभिन्न पैरामीटर के साथ कई रनों में पूर्वनिर्धारित लंबाई एल के सभी या लगभग सभी संभावित विशिष्ट बिट अनुक्रम उत्पन्न करने में सक्षम होना चाहिए, जहां n <एल <= n + p। – actual

+2

यदि आप के कॉल में के विशिष्ट संख्याओं की अपेक्षा करते हैं, तो यह बिल्कुल यादृच्छिक नहीं है। उदाहरण के लिए मैं हमेशा आखिरी एक की भविष्यवाणी कर सकता हूं! या मैंने गलत समझा? –

उत्तर

1

LFSR
आपको केवल प्राचीन बहुपदों की सूची चाहिए।
इस तरह परिमित क्षेत्र उत्पन्न करने की अवधि, आकार 2^एन -1 के क्षेत्र उत्पन्न करता है। लेकिन आप k^n-1 की किसी भी श्वेत अवधि उत्पन्न करने के लिए इस प्रक्रिया को सामान्यीकृत कर सकते हैं।

मैं इस से लागू नहीं देखा है, लेकिन आप सभी को लागू करना द्वारा छोटी संख्या रों संख्या स्थानांतरण> n जहां gcd (रों, 2^n-1) == 1. gcd सबसे बड़ा आम भाजक के लिए खड़ा है

+0

जैसा कि मैं समझता हूं, जेरोस युक्त संयुक्त मूल्यों का सबसेट होता है जिसे उत्पन्न नहीं किया जा सकता है। – actual

+0

यह सच है। यदि आपको इसकी आवश्यकता हो तो आपको ज़ीरो के लिए मैन्युअल रूप से समर्थन जोड़ना चाहिए और उदाहरण के लिए पूर्वनिर्धारित मान से 0x001 से 0x000 और 0x001 के अगले मान की तुलना में कूदना चाहिए। –

2

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

+0

दिलचस्प विचार, लेकिन मेरे आवेदन के लिए बहुत धीमी है। कोई बात नहीं धन्यवाद। – actual

+0

हम्म ... शायद इतना धीमा नहीं है। आपको लगता है कि यह कैसे काम करेगा, अगर मैं चौड़ाई पी की कुंजी उत्पन्न करूंगा, न कि एन + पी, और एन + पी चौड़ाई के डेटा के साथ XORING शुरू करें। क्या यह एन + पी चौड़ाई के सभी संयोजन उत्पन्न करेगा? – actual

+0

निर्भर करता है कि आप डेटा कहां प्राप्त करते हैं। व्यापक रूप से बोलते हुए, शायद यह क्रमपरिवर्तन उत्पन्न नहीं करेगा। –

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