मैं अगर वहाँ एक रास्ता करने के लिए "भविष्यवाणी" अगले जनरेट की गई संख्या है जानना चाहता हूँ और कैसे JVM क्या संख्या अगले उत्पन्न करने के लिए निर्धारित करता है?
बिल्कुल। Random
कक्षा को रैखिक संगत संख्या जनरेटर (एलसीएनजी) के रूप में लागू किया गया है।एक रैखिक congruential जनरेटर के लिए सामान्य सूत्र है:
new_state = (old_state * C1 + C2) modulo N
सटीक Random
द्वारा प्रयोग किया जाता एल्गोरिथ्म javadocs में निर्दिष्ट है। यदि आप जेनरेटर की वर्तमान स्थिति जानते हैं, तो अगला राज्य पूरी तरह अनुमानित है।
क्या मेरे कोड आउटपुट नंबर किसी भी जेवीएम और ओएस पर वास्तविक यादृच्छिक के करीब होंगे?
यदि आप Random
का उपयोग करते हैं, तो नहीं। किसी भी ओएस पर किसी भी JVM के लिए नहीं।
एलसीएनजी द्वारा उत्पादित अनुक्रम निश्चित रूप से यादृच्छिक नहीं है, और इसमें सांख्यिकीय गुण हैं जो एक वास्तविक यादृच्छिक अनुक्रम से काफी अलग हैं। (अनुक्रम दृढ़ता से स्वतः सहसंबंधित होगा, और यदि आप Random.nextInt()
पर लगातार कॉल के परिणाम प्लॉट करते हैं तो यह दिखाया जाएगा।)
क्या यह कोई समस्या है? वैसे यह इस बात पर निर्भर करता है कि आपके आवेदन की क्या ज़रूरत है। यदि आपको "यादृच्छिक" संख्याओं की आवश्यकता है जो भविष्यवाणी करने में कठोर हैं (उदा। सुरक्षा से संबंधित एल्गोरिदम के लिए), तो स्पष्ट रूप से नहीं। और यदि मोंटे कार्लो सिमुलेशन के लिए संख्याओं का उपयोग किया जा रहा है, तो एलसीएनजी के इनलेट ऑटो-सहसंबंध सिमुलेशन को विकृत कर सकते हैं। लेकिन अगर आप सिर्फ एक सॉलिटेयर कार्ड गेम बना रहे हैं ... इससे कोई फर्क नहीं पड़ता।
स्रोत
2016-02-17 11:56:16
यह वास्तव में छद्म यादृच्छिक है। इसका मतलब है कि वे वास्तव में यादृच्छिक नहीं हैं। बस हर बार एक ही बीज का उपयोग करें और संख्या हमेशा एक ही होगी। क्यूं कर? क्या आप किसी को भविष्य की भविष्यवाणी करने में सक्षम होने के रूप में प्रभावित करने की कोशिश कर रहे हैं? : पी – Arc676
आप दस्तावेज क्यों नहीं पढ़ते? https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#next-int- – the8472
आपको यह दिलचस्प लगेगा कि आप एक पसंद यादृच्छिक बीज के साथ क्या कर सकते हैं। http://vanillajava.blogspot.co.uk/2011/10/randomly-no-so-random.html –