algorithm - Minimum standard random generator basics -


न्यूनतम मानक यादृच्छिक संख्या जनरेटर।

मैं नीचे न्यूनतम मानक संख्या जनरेटर के बारे में पढ़ रहा हूं

एक यादृच्छिक पूर्णांक xn को देखते हुए, यादृच्छिक अनुक्रम में अगले यादृच्छिक पूर्णांक xn + 1 = एक xn (mod m) कंप्यूटिंग द्वारा दिया जाता है, जहां a = 7 ^ 5 = 16807 और m = 2 ^ 31 ए???? 1 = 2147483647; आपके कार्यान्वयन पर एक जांच के रूप में, यदि x0 = 1, तो x10000 = 1043618065.

पार्क और मिलर ने 2 ^ 32 से कम के सबसे बड़े मेर्सन प्राइम के रूप में मी को चुना है; मी की सबसे छोटी आदिम जड़ 7 है, और 5 से भी प्राइम, 7 ^ 5 भी एक आदिम जड़ है, इसलिए उनकी पसंद एक। चूंकि एक मी की एक आदिम मूल है, सभी मानों की सीमा 1 से मी। 1 समावेशी किसी भी दोहराने से पहले उत्पन्न होगा, इसलिए यादृच्छिक संख्या जनरेटर की पूर्ण अवधि है। गुणक ए = 16807 को अच्छी यादृच्छिकता गुण दिखाया गया है।

अपने मूल पत्र के बाद, पार्क और मिलर ने 48271 की सिफारिश की, और कुछ लोग 69621 का उपयोग करते हैं, लेकिन हम 16807 का उपयोग जारी रखेंगे। यह लागू करने का सबसे आसान तरीका स्पष्ट है: बस

लेकिन एक्सएमएलस के वर्तमान मूल्य से गुणा करें।

लेकिन यह मध्यवर्ती गुणा में ओवरफ्लो का कारण हो सकता है, परिणाम गलत गड़बड़ कर सकता है।

Linus Schrage की एक चाल उस गुणा की अनुमति देता है अतिप्रवाह के बिना किया जा सकता है: गणना q = एक एम / एए और r = m (mod a) ताकि m = एक q + r हो। फिर

एक नया एक्स हाय = â ???? एक्स / qâ, ???, lo = x (mod q), x = एक एक · ल 'द्वारा गणना की जा सकती है आर = हाय, उसके बाद मी से एक्स जोड़ता है अगर x â ?? ¤ 0।

मेरा सवाल है कि लेखक ने कैसे नया एक्स के रूप में hi = floor (x / q) के रूप में गणना की है और लो = x (modq) मैं यहाँ कदम की तलाश कर रहा हूं कृपया प्रस्तुति को सरल करें।

सेट एच = हाय और एल = लो हमारे पास m = a * q + r है एक साधारण गणना से पता चलता है कि q = 127773 और r = 2836. हम मानते हैं कि एक & lt; क्यू।

अब x_ {n} दीजिए और गणना करें एच = x_ {n} / q और एल = x_ {n}% q तो, एलएंडटी के साथ x_ {n} = q * एच + एल; क्यू।

परिभाषा के अनुसार x_ {n + 1} = एक * x_ {n} mod मी दाएं हाथ की तरफ (गणना में कमी से पहले) हम एक * x_ {n} = a * (q * एच + एल) = एक * q * एच + एक * एल = (एम - आर) * एच + एक * एल = एम * एच - आर * एच + ए * एल।

अब आर * एच पर विचार करें। स्पष्ट रूप से 0 & lt; = r * H & lt; एक * (x_ {n} / q)। जैसा x_ {n} & lt; मी और ऊपर एक & lt; Q, a * (x_ {n} / q) & lt; मीटर। विशेष रूप से, यह अतिप्रवाह नहीं है

इसी तरह 0 & lt; सभी टी; एक * q & lt; मीटर। तो, फिर कोई अतिप्रवाह नहीं

हमने निष्कर्ष निकाला है कि x_ {n + 1} = m * h - r * h + a * एल बाद के modulo m को कम करना हम x_ {n + 1} = -r * H + a * एल दो नक्षत्र-हाथ-साइड एक्सप्रेशन से अधिक नहीं है I यदि योग ऋणात्मक है तो हम मी जोड़ते हैं और हम कर चुके हैं।

Comments

Popular posts from this blog

Out of index C/C++ -

regex - PatternSyntaxException: while using String.ReplaceAll function in java? -

java - Projects which are accessed via multiple (different) IDEs: Ant or Maven? -