2009-07-23 16 views
8

ज्योथन में यादृच्छिक संख्या (छद्म) का उपयोग करते समय, क्या यह पाइथन यादृच्छिक मॉड्यूल या जावा की यादृच्छिक कक्षा का उपयोग करने के लिए अधिक कुशल होगा?ज्योथन में यादृच्छिकता

+3

कृपया "कुशल" पर विचार करें। –

+2

क्या आपने प्रत्येक के लिए आवश्यक समय मापने की कोशिश की है? –

उत्तर

9

पायथन के संस्करण पर मेरे Mac एक साधारण परीक्षण में बहुत तेजी से है:

jython -m timeit -s "import random" "random.random()" 

1000000 छोरों, 3 का सबसे अच्छा: पाश

प्रति 0.266 usec बनाम

jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()" 

1000000 छोरों, सबसे अच्छा 3: 1.65 usec प्रति लूप

ज्योथन संस्करण 2.5 बी 3 और जावा संस्करण 1.5.0_1 9।

+1

समय-समय पर, आह? मुझे वह याद रखना चाहिए !! +1 – richq

+0

टाइमिट उन पायथन 'बैटरी शामिल' चीजों में से एक है। सख्ती से जरूरी नहीं है लेकिन बहुत अच्छा है। –

4

जावा की रैंडम क्लास का उपयोग करता है (और वास्तव में जावा के चश्मे द्वारा उपयोग किया जाना चाहिए) एक रैखिक संगत एल्गोरिदम, जबकि पायथन का मेर्सन ट्विस्टर का उपयोग करता है। मेर्सन बेहद उच्च गुणवत्ता की गारंटी देता है (हालांकि क्रिप्टो गुणवत्ता!) यादृच्छिक संख्या और हास्यास्पद लंबी अवधि (53-बिट परिशुद्धता फ्लोट, अवधि 2 ** 19937-1); रैखिक congruential जेनरेटर अच्छी तरह से जाना जाता है issues। यदि आपको वास्तव में यादृच्छिक संख्याओं की गुणवत्ता की परवाह नहीं है, और केवल गति के बारे में परवाह है, तो एलसीजी हालांकि तेजी से तेज होने की संभावना है क्योंकि यह कम परिष्कृत है।

+1

दरअसल, कुछ पुराने मानकों के मुताबिक मैंने डी प्रोग्रामिंग भाषा में किया था, मेर्सन ट्विस्टर तेज है, हालांकि यह अधिक मेमोरी का उपयोग करता है। ऐसा इसलिए है क्योंकि मेर्सन ट्विस्टर ने डिवीजन ओप से बचाया है जो रैखिक संगत आवश्यकताओं की आवश्यकता है। रैखिक संयोग का उपयोग करने के एकमात्र अच्छे कारणों के बारे में हैं यदि आपके पास अत्यधिक स्मृति बाधाएं हैं या यदि आपको केवल कुछ यादृच्छिक संख्याओं की आवश्यकता है और जेनरेटर को बीज लेने में लगने वाला समय एक बाधा है। (रैखिक congruential एक छोटी राज्य अंतरिक्ष है इसलिए बीजिंग तेज है।) – dsimcha

+0

एलसीजी को एक विभाजन की आवश्यकता है? अधिकांश एलसीजी जिनका उपयोग कहीं भी किया जाता है, उनके मॉड्यूलस के रूप में दो की शक्ति का उपयोग करते हैं (जो उपयुक्त पैरामीटर को कठिन बनाता है लेकिन काफी तेज है)। – Joey

+2

जावा बिल्कुल (2 ** 48) -1 का एक मॉड्यूलस निर्दिष्ट करता है, और सभी जावा मानक कार्यान्वयन का बिल्कुल उपयोग करना चाहिए, इसलिए मुझे नहीं लगता कि "कहीं भी उपयोग किए जाने वाले अधिकांश एलसीजी" मामले के साथ क्या करना है - जावा यादृच्छिक अपने स्वयं के बहुत सटीक नियम हैं। –

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