2012-05-19 11 views
5

random.shuffle के लिए Python documentation है, जो एक सूची लेता है और आदेश randomizes से अगर उसके तत्वों:पायथन के random.shuffle सीमा

ध्यान दें कि यहां तक ​​कि अपेक्षाकृत छोटे लेन के लिए (x), की कुल संख्या x की क्रमिकता सबसे यादृच्छिक संख्या जेनरेटर की अवधि से अधिक है; इसका तात्पर्य है कि लंबे अनुक्रम के अधिकांश क्रमपरिवर्तन कभी उत्पन्न नहीं हो सकते हैं।

क्या यह किसी भी भाषा के बारे में सच है, क्योंकि सीमा यादृच्छिक संख्या जेनरेटर पर निर्भर प्रतीत होती है? क्या एक ऐसा कार्य लिखना संभव है जो मनमाने ढंग से लंबी सूची के संभावित क्रमपरिवर्तन उत्पन्न कर सके?

+0

मुझे लगता है कि आपका मतलब "व्यवहार्य" नहीं है "संभव"। –

+0

मेरा मतलब व्यवहार्य था, लेकिन अब मैं उत्सुक हूं यदि यह संभव नहीं है, लेकिन संभव है, हम किस प्रकार की पागलपन के बारे में बात कर रहे हैं? – Colin

+4

देखें http://stackoverflow.com/questions/3062741/maximal-length-of-list-to-shuffle-with-python-random-shuffle और http://mail.python.org/pipermail/python-dev/ 2006-जून/065815.html (धागे का पालन करें, यह वास्तविक है, अगर बहुत गंभीर नहीं है, तो समस्या)। – TryPyPy

उत्तर

3

http://mail.python.org/pipermail/python-ideas/2009-March/003670.html देखें। सटीक लंबाई यह एक समस्या होने पर शुरू होती है, पीआरएनजी पर निर्भर है, लेकिन मूल समस्या हमेशा लागू होगी।

पिछले प्रश्न जो @TryPyPy से जुड़ा हुआ है, वह भी पाइथन पर केंद्रित है, लेकिन स्वीकृत उत्तर काफी अच्छी तरह से बताता है कि यह हमेशा क्यों होगा।

  1. , एक सूची उत्पन्न p, इनपुट के सभी संभव क्रमपरिवर्तन
  2. अपने PRNG
  3. से एक यादृच्छिक संख्या, x, जाओ की: व्याख्या करने के लिए, अगर आप इस तरह काम कर रहे एक अनुभवहीन फेरबदल एल्गोरिथ्म कल्पना कर सकते हैं फेरबदल सूची p[x]

है p सभी संभव x कि PRNG उत्पादन कर सकते हैं की सूची से अधिक लंबी है, क्रमपरिवर्तन की कुछ पहुंचा नहीं जा सकता।

चूंकि फैंसी शफल एल्गोरिदम अपने मूल पर, उनमें से किसी एक को छोड़ने से पहले हर संभव क्रमपरिवर्तन उत्पन्न किए बिना ऐसा करने का एक तरीका है, इसके आस-पास एकमात्र तरीका सच यादृच्छिकता का स्रोत होना है।

2

हां, यह संभव है। आप एक क्रमपरिवर्तन जनरेटर लिख सकते हैं जो आपके सभी निर्णयों के लिए random.SystemRandom का उपयोग करता है।

इसका नकारात्मक पक्ष यह है कि आपके प्रोग्राम को मनमाने ढंग से लंबे समय तक रोकना पड़ सकता है जबकि आपका ऑपरेटिंग सिस्टम आपके लिए उपयोग करने के लिए अधिक एन्ट्रॉपी एकत्र करता है।

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