मैं सी # में एक तेज आरएनजी (यादृच्छिक संख्या जनरेटर) कैसे बना सकता हूं जो अधिकतमवैल्यू (और/या एक मिनीवैल्यू) के साथ बाइट्स की सरणी भरने का समर्थन करता है? मुझे यह http://www.codeproject.com/KB/cs/fastrandom.aspx मिला है लेकिन इसमें यह सुविधा नहीं है।फास्ट रैंडम जेनरेटर
उत्तर
तथ्य यह है कि आप पूर्णांकों के साथ बाइट्स द्वारा भरे जा रहे से काफी अलग है सिस्टम के लिए सामान्य उपयोग केस। यादृच्छिक है कि यदि आपको वास्तव में आवश्यकता है तो आप शायद इसे बुरी तरह से हरा सकते हैं।
सिस्टम। सामान्य उपयोग के लिए यादृच्छिक बनाया जाता है। (वास्तव में, मैं आमतौर पर सिस्टम यादृच्छिक दिनचर्या को अनजान करता हूं जब मैं उन पर गति और वितरण परीक्षण करता हूं।) ऐसे मामले हैं जहां आप कुछ और चाहते हैं। लेकिन आपको अपनी जरूरतों के बारे में बहुत स्पष्ट होना चाहिए। कितना तेज? आप क्या छोड़ने को तैयार हैं?
तुम सच में की जरूरत है "फास्ट" Marsaglia बहुत तेजी से यादृच्छिक संख्या जनरेटर है कि अपनी आवश्यकताओं के लिए अनुकूलित किया जा सकता है की एक संख्या का उत्पादन किया गया।
- Xorshift (Wikipedia)
- Fastest implementation of Xorshift in C#, and measurements comparing it to System.Random
- Diehard tests दिलचस्प हैं: यहाँ उनमें से एक के बारे में कुछ लिंक, Xorshift हैं।
- Agner has C++ code कई तेजी से randoms के लिए।
- Here's a fast twister जो सिम निर्देशों का उपयोग करता है।
आखिरी व्यक्ति इस तथ्य को संबोधित करता है कि आप बाइट्स को लक्षित कर रहे हैं।
मुझे केवल कुछ बार सुपर फास्ट रैंडम्स की आवश्यकता है। धीमी प्रोसेसर के साथ कंसोल गेम में जहां यादृच्छिक फ्रेम दर लक्ष्य को मारने और इसे मारने के बीच अंतर नहीं बना सकता है। आपका उपयोग केस क्या है? हर तरह से, सिस्टम का उपयोग करें। यादृच्छिक यदि आप कर सकते हैं।
या, उस दिनचर्या को अनुकूलित करें जिसे आप अपने प्रश्न में लिंक करते हैं (जिसे लेखक का दावा सिस्टम की गति 8x है। यादृच्छिक।)
वह अंतिम लिंक जांचने में काफी दिलचस्प था, +1 –
आपके उत्तर के लिए धन्यवाद, आरएनजी जितना संभव हो उतना तेज़ होना चाहिए, मेरे पास कुछ सेकंड (10^9 और अधिक) में उत्पन्न होने के लिए कई यादृच्छिक संख्याएं हैं। मैंने अपने लिंक में दिनचर्या को अनुकूलित करने की कोशिश की है, लेकिन मैंने सफलता नहीं ली है, क्या आप मेरी मदद कर सकते हैं? – tazzo
कई संभावनाएं हैं। कल्पना करें कि आपने सीमा के लिए यादृच्छिक संख्याओं का 4k बफर सेट किया है (कहें, 0-100)। ऑफ़सेट चुनने और पकड़ने के लिए यादृच्छिक संख्या जनरेटर का उपयोग करें, अपनी सूची से 16 बाइट्स कहें। फिर एक और ऑफसेट उत्पन्न करें और एक और 16 बाइट पकड़ो। यह _fantastically_ यादृच्छिक नहीं होगा, लेकिन यह _sufficiently_ यादृच्छिक हो सकता है। मेरे पूछने के बावजूद, आपने मुझे यह नहीं बताया है कि आप गति प्राप्त करने के लिए क्या छोड़ना चाहते हैं। इन सभी संख्याओं के साथ आप क्या करेंगे? – Nosredna
आप Reflector का उपयोग System.Random से सी # तक डिकंपाइल करने के लिए कर सकते हैं। इससे आपको एक तेज़ यादृच्छिक संख्या जनरेटर का सी # कोड मिलेगा जो आपकी आवश्यकताओं को पूरा करता है।
असल में, नहीं ... फ्रेमवर्क प्रीकंपिल्ड और अनुकूलित है, आप इसके साथ प्रतिस्पर्धा नहीं कर सकते (जब तक कि आप अपना कोड भी प्रीकंपल नहीं करते)। कम से कम यह अनुभव मैंने बनाया है (ढांचे को आगे बढ़ाने की कोशिश करते समय;))। – Bobby
और वह वास्तव में ऐसा क्यों करेगा? संभवतः, चूंकि वह पूछता है, रैंडम बहुत धीमी है, अन्यथा वह इसका उपयोग करेगा, नहीं? –
@ बॉबी: निराशाजनक, सच। अपने कोड को प्रीकंपलिंग करने में मदद नहीं मिलेगी, हालांकि। –
सिस्टम। यादृच्छिक किसी भी सामान्य उपयोग के लिए पर्याप्त तेज़ है। यदि आपके पास सिस्टम के साथ प्रदर्शन समस्याएं हैं जिनमें सिस्टम.रैंडम कॉल शामिल हैं, तो सुनिश्चित करें कि आप से पहले एक नया रैंडम बनाने की कोशिश कर रहे हैं। संभावना है कि आपके प्रदर्शन मुद्दे ढांचे में नहीं बल्कि आपके अपने कोड में हैं।
यदि आप एक लूप में रैंडम में कॉल कर रहे हैं, तो सुनिश्चित करें कि आप प्रत्येक पुनरावृत्ति के साथ एक नया यादृच्छिक उदाहरण नहीं बना रहे हैं, बल्कि इसके बजाय एक सामान्य यादृच्छिक उदाहरण का उपयोग कर रहे हैं। ऐसा करने से प्रदर्शन में सुधार होगा क्योंकि आप जीसी को साफ करने के लिए नई वस्तुएं नहीं बना रहे हैं, और उत्पन्न होने वाली यादृच्छिक संख्याओं की गुणवत्ता में भी सुधार करेंगे।
मेरे कोड में केवल कुछ सेकंड में कई यादृच्छिक संख्याएं उत्पन्न हुई हैं – tazzo
यह आश्चर्यजनक है कि एसओ उत्तरों में से कितने सवाल पूछने के बजाय पूछने वाले की जरूरतों के बारे में बहस करने का फैसला करते हैं। – Nosredna
@tazzo: कितने लोग हैं? आप किस विशिष्ट आवश्यकताओं के बाद हैं? @ नोस्रेना: कभी-कभी प्रश्न का उत्तर देते हुए और पूछने वाले की मदद दो अलग-अलग चीजें होती है। और बहस कौन कर रहा है? –
क्रिप्टोग्राफिक सेवाओं का उपयोग ....
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
byte[] bytes= new byte[5];
crypto.GetBytes(bytes);
निश्चित रूप से
, यह केवल संतुष्ट बाइट क्षेत्र आवश्यकता ...
से अधिक हैं, मैंने इसे स्वयं का समय नहीं दिया है, लेकिन मुझे लगता है कि आरएनजी क्रिप्टो सेवा प्रदाता, जिसमें क्रिप्टोग्राफिक रूप से सुरक्षित होने की अतिरिक्त संपत्ति है, सिस्टम से धीमी होगी। यादृच्छिक। – SoftMemes
मैंने RNGCryptoServiceProvider की जांच की है लेकिन मेरी ज़रूरतों को पूरा नहीं करता है, धीमा करना और अधिकतम यादृच्छिक संख्याओं को उत्पन्न न करें। – tazzo
आप एक यादृच्छिक संख्या जनरेटर है कि इकाई अंतराल से संख्या देता है, कोड परियोजना लेख आप का उल्लेख में से एक की तरह है, तो आप पहली बार एक मूल्य u
कि जनरेटर का उपयोग उत्पन्न कर सकते हैं और फिर a + (b-a)*u
लौटने के बीच मूल्यों को पाने के लिए ए और बी।
आपका सूत्र गलत है, अगर मैं ए = 5 और बी = 20 और यू = 55 चुनता हूं तो मुझे 5+ (20-5) * 55 = 830 मिलता है। सही सूत्र यू/(यूएमएक्स + 1) * (बी-ए) + ए है जहां यूएमएक्स यादृच्छिक संख्या का अधिकतम मूल्य है। – tazzo
यदि यादृच्छिक मान आप * यूनिट अंतराल * से आता है, यानी 0 और 1 के बीच, तो सूत्र सही है। आपके उदाहरण में, u = 55 0 और 1 के बीच की संख्या नहीं है। –
- 1. क्रैपी रैंडम नंबर जेनरेटर
- 2. आईओएस रैंडम नंबर जेनरेटर एक नए दृश्य के लिए
- 3. जेनरेटर
- 4. जेनरेटर
- 5. रैंडम तत्व
- 6. `रैंडम` ऑब्जेक्ट
- 7. जावा - जेपीए - जेनरेटर - @ सिकेंस जेनरेटर
- 8. जावा - रैंडम लाइन
- 9. रैंडम स्तंभ कैसेंड्रा
- 10. रैंडम भारित पसंद
- 11. हास्केल रैंडम जनरेशन
- 12. रैंडम ऑब्जेक्ट सी #
- 13. रैंडम भारित पसंद
- 14. एसक्यूएल सर्वर रैंडम सॉर्ट
- 15. अजगर रैंडम स्लाइस मुहावरा
- 16. सीएसवी रैंडम एक्सेस; सी #
- 17. Mysql 1 रैंडम पंक्ति
- 18. मजबूत रैंडम नंबर जनरेशन
- 19. वितरित रैंडम नंबर जनरेशन
- 20. सशर्त रैंडम फ़ील्ड्स
- 21. रैंडम नाव संख्या
- 22. पाइथन जेनरेटर
- 23. पायथन जेनरेटर -
- 24. पाइथन जेनरेटर
- 25. फास्ट तरीका
- 26. फास्ट तरीका
- 27. फास्ट फैक्टरलाइजेशन
- 28. फास्ट स्क्रॉलिंग
- 29. सिस्टम में बग। रैंडम कन्स्ट्रक्टर?
- 30. जावा जेनरेट रैंडम नंबर {-1,0,1}
सिस्टम है। यादृच्छिक बहुत धीमी है? – driis
यह बहुत अच्छा हो सकता है। वह बाइट भर रहा है, जो एक सुंदर विशेष मामला है। बाइट भरने के उद्देश्य से कोड शायद तीव्रता या अधिक तीव्रता का क्रम हो सकता है। क्या वह उस गति को _need_ करता है? मुझे नहीं पता। – Nosredna
हां, सिस्टम। यादृच्छिक बहुत धीमी है। मेरे पास उत्पन्न करने के लिए कई यादृच्छिक संख्याएं हैं I – tazzo