चूंकि कचरा संग्रह गैर-नियतात्मक है, इसलिए इसका उपयोग यादृच्छिक संख्या पीढ़ी के लिए क्यों नहीं किया जाता है?


13

मुझे लगता है कि / देव / यादृच्छिक एन्ट्रापी का एक अच्छा स्रोत है, और वह है जो आमतौर पर उपयोग किया जाता है-- यह वैसा ही है जैसे मैं जीसी पर पढ़ रहा हूं, कम से कम जावा में, यह लगता है कि कचरा संग्रह डेमॉन गैर-निर्धारक रूप से निष्पादित करता है । अगर यह सच है, तो हम चर / देव / यादृच्छिक के बजाय एंट्रोपी के स्रोत के रूप में कचरा संग्रह के समय का उपयोग क्यों नहीं करते हैं?


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

15
कुछ शब्दशः अभी भी अत्यधिक अनुमानित हो सकता है
शाफ़्ट सनकी

7
इस मामले में "गैर-निर्धारक" एक खराब विवरण है। कूड़ा उठाने वाला एक पूरी तरह से निर्धारक प्रणाली है और यदि आपको इसके राज्य और उस कार्यक्रम की स्थिति का पूरा ज्ञान है जो इसका उपयोग करता है, तो आप परिणामों का अनुमान लगा सकते हैं।
रोबोट नो

4
@DXM क्या आप क्रिप्टोग्राफिक रूप से सुरक्षित कचरा कलेक्टर के लिए एक अच्छे कार्यान्वयन के बारे में जानते हैं? ;)
ए जेमन्सफील्ड

7
"कोई भी जो यादृच्छिक अंकों के उत्पादन के अंकगणितीय तरीकों पर विचार करता है, निश्चित रूप से, पाप की स्थिति में है।" - जॉन वॉन न्यूमैन
मार्क एडलर

जवाबों:


58

"अनिर्दिष्ट" और "यादृच्छिक" दो पूरी तरह से अलग अवधारणाएं हैं।

कचरा उठाने वाले के सटीक कार्य निर्दिष्ट नहीं होते हैं और कचरा संग्राहक तक होते हैं (आमतौर पर इसे वीएम द्वारा लागू किया जाता है, लेकिन यह आवश्यक नहीं है)।

इसलिए, आपके पास कोई निर्दिष्ट (यानी निर्धारक) समय नहीं है जिस पर कचरा एकत्र किया जाएगा।

हालांकि किसी भी दिए गए कार्यान्वयन में कुछ नियमों का पालन किया जाएगा और एक उच्च संभावना है कि एक ही कार्यक्रम के दो बाद के रनों में बहुत समान कचरा संग्रह पैटर्न होगा।

इसलिए एक कचरा संग्रहकर्ता द्वारा प्रदान की जाने वाली वास्तविक एन्ट्रॉपी बहुत कम होगी (और यह पता लगाना कि आप वास्तव में एंट्रोपी के रूप में किन भागों का उपयोग कर सकते हैं ) मुश्किल हो जाएगा।

तुलना के रूप में: HashMapजावा में A अपने सदस्यों के लिए किसी भी रिट्रीवल के आदेश की गारंटी नहीं देता है (मूल रूप से इसकी गारंटी देने के कारण यह ओवरहेड जोड़ देगा जो भुगतान करने के लायक नहीं है, अधिकांश समय)। हालांकि एक के लिए दिए गए कार्यान्वयन और एक दिया सम्मिलन के सेट / निकालने की प्रक्रिया आप कर सकते हैं निश्चित रूप से जिसके परिणामस्वरूप आदेश की गणना। सिर्फ इसलिए कि किसी भी आदेश के लिए कोई गारंटी नहीं है, इसका मतलब यह नहीं है कि ऑर्डर यादृच्छिक है।


20
मुझे लगता है कि यह कहना उचित होगा कि यदि कंप्यूटर कभी ऐसा कुछ करता है जो वास्तव में गैर-नियतात्मक है, तो वह कंप्यूटर टूट जाता है।
23

गैर-नियतात्मक का अर्थ यह भी हो सकता है कि यह हाथ में कार्यक्रम के लिए कुछ बाहरी राज्य पर निर्भर करता है, जो स्वयं नियतात्मक हो सकता है, लेकिन कार्यक्रम के लिए पूरी तरह से असंबंधित होगा और इसलिए कार्यक्रम के चलने पर हर बार अलग हो सकता है।
asmeurer

@asmeurer मुझे नहीं लगता कि मैंने ये शब्द ऐसे किसी भी संदर्भ में सुने हैं। वास्तव में, मुझे यह भी निश्चित नहीं है कि आपका क्या मतलब है: हर प्रोग्राम जो बाहरी इनपुट लेता है (यानी, सबसे उपयोगी प्रोग्राम) "कुछ बाहरी राज्य पर निर्भर करता है", लेकिन यह इसे गैर-निर्धारक नहीं बनाता है।
us2012

2
@ शिलकोट: कुछ आधुनिक सीपीयू में हार्डवेयर में गैर-नियतात्मक (सच) आरएनजी है। ये वास्तव में क्वांटम स्तर भौतिकी के लिए गैर-नियतात्मक नीचे हैं।
एमएसलटर्स

2
@ Schilcote यहां तक ​​कि विशेष RNG निर्देशों के बिना (Intel के RDRAND और RDSEED) एक कंप्यूटर पूरी तरह से नियतात्मक नहीं है। कुछ समय पूरी तरह से निर्दिष्ट नहीं हैं और तापमान जैसे बाहरी कारकों पर निर्भर कर सकते हैं।
कोडइन्चोस

8

सबसे पहले, हमें केवल शब्दों के हेरफेर द्वारा तर्क के जाल में नहीं पड़ने के लिए सावधान रहना होगा। उदाहरण के लिए, हम पूछ सकते हैं, क्योंकि एक एनएफए "गैर-नियतात्मक परिमित ऑटोमोटन" है, हम इसका उपयोग यादृच्छिक संख्या प्राप्त करने के लिए क्यों नहीं करते हैं? उस स्थिति में, ऐसा इसलिए होगा क्योंकि NFA में "गैर-नियतात्मक" का अर्थ नहीं है; वास्तव में, जब हम किसी दिए गए इनपुट पर एनएफए का अनुकरण करते हैं, तो सिमुलेशन का व्यवहार पूरी तरह से नियतात्मक होता है।

"नियतात्मक" एक लोडेड वाक्यांश है। एक कंप्यूटर प्रोग्रामर या कंप्यूटर वैज्ञानिक के लिए, गैर-नियतात्मक व्यवहार का अर्थ है "सटीक व्यवहार का निर्धारण करना जटिल है सोचने के लिए", और प्रोग्राम इनपुट सहित कई कारकों पर निर्भर करता है।

हालाँकि, इसका मतलब यह नहीं है कि यह क्रिप्टोकरंसी पर हमला करने के लिए प्रेरित करने वाले के लिए निर्धारक नहीं है। कभी-कभी पर्यावरणीय कारकों और आदानों को नीचे रखा जा सकता है, और दोहराए जाने वाले पैटर्न "गैर-नियतात्मक" व्यवहार से निकलते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.