बेतरतीब ढंग से बिल्कुल यादृच्छिक है?


79

मैंने रैंडिंट की यादृच्छिकता का परीक्षण करने के लिए ऐसा किया:

>>> from random import randint
>>>
>>> uniques = []
>>> for i in range(4500):  # You can see I was optimistic.
...     x = randint(500, 5000)
...     if x in uniques:
...         raise Exception('We duped %d at iteration number %d' % (x, i))
...     uniques.append(x)
...
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
Exception: We duped 887 at iteration number 7

मैंने लगभग 10 गुना अधिक कोशिश की और सबसे अच्छा परिणाम मुझे एक पुनरावर्तक से पहले 121 पुनरावृत्तियों मिला। क्या यह सबसे अच्छा प्रकार का परिणाम है जो आप मानक पुस्तकालय से प्राप्त कर सकते हैं?


56
"द प्रोगामैटिक प्रोग्रामर", नियम 26। "टूटा हुआ नहीं है" का चयन करें। ओएस या कंपाइलर, या यहां तक ​​कि एक तृतीय-पक्ष उत्पाद या लाइब्रेरी में बग ढूंढना दुर्लभ है। बग आवेदन में सबसे अधिक संभावना है। या इस मामले में, संभावना सिद्धांत का अनुप्रयोग।

11
बस नाइटपैकिंग: uniques = set () और uniques.add (x) अधिक उपयुक्त (कुशल) होगा।
एरिक ओ लेबिगॉट

22
जन्मदिन विरोधाभास के प्रमुख गुणों में से एक यह है कि यह काउंटर-सहज ज्ञान युक्त है। जब तक आप इसके बारे में नहीं जानते हैं या संभावना सिद्धांत में कुछ पृष्ठभूमि है तब तक आपके पास इसके लिए एक कीवर्ड खोज करने का कोई कारण नहीं होगा। Q & A साइटों में से एक USP यह है कि आप उन शब्दों में एक प्रश्न पूछ सकते हैं जो वास्तव में उस प्रश्न के उत्तर से मेल नहीं खाते हैं, यदि आपने शुद्ध कीवर्ड खोज के बिना यह पता किया है कि क्या खोजना है।
कंसर्नडऑफटुनब्रिजवेल्स

7
@okoku: (ConcernedOfTunbridge के आपके उत्तर के बारे में): आप जिस बारे में बात कर रहे हैं वह पूरी तरह से अलग समस्या है। एक ही कार्ड एक पंक्ति में दो बार प्राप्त करने की संभावना है; अन्य एन पिक के बाद पिछले एन -1 कार्डों में से किसी को प्राप्त करने की संभावना है । दूसरी समस्या के लिए एक परिपूर्ण आरएनजी से कार्ड की औसत संख्या लगभग 67 होनी चाहिए; यह देखते हुए कि आप 8 से लेकर 121 तक कहीं भी हैं, यह सही लगता है।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

5
आप समान रूप से वितरित के साथ यादृच्छिक भ्रमित कर रहे हैं। यह एक यादृच्छिक जनरेटर के लिए पूरी तरह से कई बार में एक ही मूल्य वापस करने के लिए पूरी तरह से मान्य है। यदि आप एक समान रूप से वितरित रैंडम संख्या जनरेटर चाहते हैं जो एक पूरी तरह से अलग समस्या है, तो यह एक फेरबदल समस्या है जो जनरेटर की समस्या नहीं है।

जवाबों:


287

बर्थडे विरोधाभास, या PRNGs डुप्लिकेट का उत्पादन जितना आप सोचते हैं उससे अधिक बार कर सकते हैं।


ओपी की समस्या पर कुछ मुद्दे हैं। एक जन्मदिन का विरोधाभास है जैसा कि ऊपर उल्लेख किया गया है और दूसरा वह है जो आप पैदा कर रहे हैं की प्रकृति है, जो स्वाभाविक रूप से गारंटी नहीं देता है कि किसी दिए गए नंबर को दोहराया नहीं जाएगा।

बर्थडे पैराडॉक्स लागू होता है जहां दिए गए मूल्य जनरेटर की अवधि के दौरान एक से अधिक बार हो सकते हैं - और इसलिए डुप्लिकेट मूल्यों के नमूने के भीतर हो सकते हैं। बर्थडे विरोधाभास का प्रभाव यह है कि इस तरह के डुप्लिकेट प्राप्त करने की वास्तविक संभावना काफी महत्वपूर्ण है और उनके बीच की औसत अवधि एक से छोटी है अन्यथा सोचा हो सकता है। कथित और वास्तविक संभावनाओं के बीच यह असहमति जन्मदिन के विरोधाभास को एक संज्ञानात्मक पूर्वाग्रह का एक अच्छा उदाहरण बनाती है , जहां एक सहज ज्ञान युक्त अनुमान का बेतहाशा गलत होना संभव है।

छद्म रैंडम नंबर जेनरेटर (PRNGs) पर एक त्वरित प्राइमर

आपकी समस्या का पहला हिस्सा यह है कि आप एक यादृच्छिक संख्या जनरेटर के उजागर मूल्य को ले रहे हैं और इसे बहुत छोटी संख्या में परिवर्तित कर रहे हैं, इसलिए संभव मानों का स्थान कम हो गया है। हालाँकि कुछ छद्म यादृच्छिक संख्या जनरेटर अपने अवधि के दौरान मानों को नहीं दोहराते हैं लेकिन यह परिवर्तन डोमेन को बहुत छोटे से बदल देता है। छोटा डोमेन 'कोई दोहराता नहीं है' स्थिति को अमान्य करता है ताकि आप दोहराव की एक महत्वपूर्ण संभावना की उम्मीद कर सकें।

जैसे कुछ एल्गोरिदम, रैखिक congruential PRNG ( A'=AX|M) करना पूरी अवधि के लिए गारंटी विशिष्टता। एक LCG में उत्पन्न मान में संचायक की पूरी स्थिति होती है और कोई अतिरिक्त स्थिति नहीं होती है। जनरेटर नियतात्मक है और अवधि के भीतर एक संख्या को दोहरा नहीं सकता है - किसी भी दिए गए संचायक मूल्य केवल एक संभव उत्तराधिकारी मूल्य हो सकता है। इसलिए, प्रत्येक मान केवल जनरेटर की अवधि के भीतर एक बार हो सकता है। हालांकि, इस तरह के एक PRNG की अवधि LCG एल्गोरिदम के विशिष्ट कार्यान्वयन के लिए लगभग 2 ^ 30 है - और संभवतः विभिन्न मूल्यों की संख्या से बड़ा नहीं हो सकता है।

सभी PRNG एल्गोरिदम इस विशेषता को साझा नहीं करते हैं; कुछ अवधि के भीतर दिए गए मान को दोहरा सकते हैं। ओपी की समस्या में, मेर्सेन ट्विस्टर एल्गोरिथ्म (पायथन के यादृच्छिक मॉड्यूल में प्रयुक्त ) की बहुत लंबी अवधि है - 2 ^ 32 से अधिक। रैखिक बधाई PRNG के विपरीत, परिणाम विशुद्ध रूप से पिछले आउटपुट मान का एक फ़ंक्शन नहीं है क्योंकि संचायक में अतिरिक्त स्थिति होती है। 32-बिट पूर्णांक आउटपुट और ~ 2 ^ 19937 की अवधि के साथ, यह संभवतः इस तरह की गारंटी नहीं दे सकता है।

Mersenne ट्विस्टर PRNGs के लिए एक लोकप्रिय एल्गोरिथ्म है क्योंकि इसमें अच्छे सांख्यिकीय और ज्यामितीय गुण हैं और सिमुलेशन मॉडल पर उपयोग किए जाने वाले PRNG के लिए एक बहुत लंबी अवधि - वांछनीय विशेषताएं हैं।

  • अच्छे सांख्यिकीय गुणों का अर्थ है कि एल्गोरिथ्म द्वारा उत्पन्न संख्याओं को समान रूप से वितरित किया जाता है, जिनकी संख्या दूसरों की तुलना में प्रदर्शित होने की काफी अधिक संभावना है। खराब सांख्यिकीय गुण परिणामों में अवांछित तिरछा उत्पादन कर सकते हैं।

  • अच्छी ज्यामितीय उचितता का मतलब है कि एन संख्या के सेट एन-आयामी अंतरिक्ष में एक हाइपरप्लेन पर झूठ नहीं बोलते हैं। गरीब ज्यामितीय गुण सिमुलेशन मॉडल में सहज सहसंबंध उत्पन्न कर सकते हैं और परिणामों को विकृत कर सकते हैं।

  • एक लंबी अवधि का मतलब है कि आप अनुक्रम के शुरू होने से पहले लगभग कई संख्या उत्पन्न कर सकते हैं। यदि किसी मॉडल को बड़ी संख्या में पुनरावृत्तियों की आवश्यकता होती है या उसे कई बीजों से चलाना पड़ता है, तो एक विशिष्ट LCG कार्यान्वयन से उपलब्ध 2 ^ 30 या असतत संख्या पर्याप्त नहीं हो सकती है। MT19337 एल्गोरिथ्म की बहुत लंबी अवधि है - 2 ^ 19337-1, या लगभग 10 ^ 5821। तुलनात्मक रूप से, ब्रह्मांड में परमाणुओं की कुल संख्या लगभग 10 ^ 80 है।

MT19337 PRNG द्वारा निर्मित 32-बिट पूर्णांक संभवतः इतनी बड़ी अवधि के दौरान पुनरावृत्ति से बचने के लिए पर्याप्त असतत मूल्यों का प्रतिनिधित्व नहीं कर सकता है। इस मामले में, डुप्लिकेट मान होने की संभावना है और एक बड़े पर्याप्त नमूने के साथ अपरिहार्य है।

संक्षेप में जन्मदिन का विरोधाभास

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

यह ग्राफ साझा जन्मदिन की संभावना दर्शाता है क्योंकि कमरे में लोगों की संख्या बढ़ जाती है।  23 लोगों के लिए दो जन्मदिन साझा करने की संभावना सिर्फ 50% से अधिक है।

किसी भी दो व्यक्तियों के बीच होने वाले मैच की संभावना मैच के लिए किसी विशिष्ट व्यक्ति की संभावना से बहुत अधिक होती है क्योंकि मैच को किसी विशिष्ट तिथि तक नहीं होना पड़ता है। बल्कि, आपको केवल दो व्यक्तियों को ढूंढना होगा जो एक ही जन्मदिन साझा करते हैं। इस ग्राफ से (जो इस विषय पर विकिपीडिया पृष्ठ पर पाया जा सकता है), हम देख सकते हैं कि हमें कमरे में केवल 23 लोगों की आवश्यकता है ताकि इस तरह से दो का मिलान करने का 50% मौका मिल सके।

विषय पर विकिपीडिया प्रविष्टि से हम एक अच्छा सारांश प्राप्त कर सकते हैं ओपी की समस्या में, हमारे पास 4,500 संभावित 'जन्मदिन' हैं, बजाय 365 के। दिए गए यादृच्छिक मानों की एक संख्या के लिए ('लोगों' के बराबर) हम किसी की संभावना जानना चाहते हैं अनुक्रम में प्रदर्शित होने वाले दो समान मूल्यों ।

ओपी की समस्या पर जन्मदिन के विरोधाभास के संभावित प्रभाव की गणना करना

100 नंबरों के अनुक्रम के लिए, हमारे पास (१०० * ९९) / २ = ४ ९ ५० जोड़े हैं ( समस्या को समझें ) जो संभावित रूप से मेल खा सकते हैं (यानी पहला दूसरे, तीसरे आदि के साथ मेल खा सकता है, दूसरा तीसरे, चौथे आदि से मेल खा सकता है और इसी तरह), इत्यादि। संभावित रूप से मेल खाने वाले संयोजनों की संख्या मात्र 100 से अधिक है।

संभाव्यता की गणना करने से हमें अभिव्यक्ति मिलती है 1 - (4500! / (4500 ** 100 * (4500 - 100)!) । नीचे दिए गए पायथन कोड के निम्नलिखित स्निपेट एक मेलिंग जोड़ी होने की संभावना का एक भोला मूल्यांकन करते हैं।

# === birthday.py ===========================================
#
from math import log10, factorial

PV=4500          # Number of possible values
SS=100           # Sample size

# These intermediate results are exceedingly large numbers;
# Python automatically starts using bignums behind the scenes.
#
numerator = factorial (PV)          
denominator = (PV ** SS) * factorial (PV - SS)

# Now we need to get from bignums to floats without intermediate
# values too large to cast into a double.  Taking the logs and 
# subtracting them is equivalent to division.
#  
log_prob_no_pair = log10 (numerator) - log10 (denominator)

# We've just calculated the log of the probability that *NO*
# two matching pairs occur in the sample.  The probability
# of at least one collision is 1.0 - the probability that no 
# matching pairs exist.
#
print 1.0 - (10 ** log_prob_no_pair)

यह 4500 संभावित मानों की जनसंख्या से 100 नंबरों के भीतर होने वाले मैच के लिए p = 0.669 का एक समझदार दिखने वाला परिणाम उत्पन्न करता है। (हो सकता है कि कोई इसे सत्यापित कर सकता है और यदि यह गलत है तो टिप्पणी पोस्ट कर सकता है)। इससे हम देख सकते हैं कि ओपी द्वारा देखे गए मिलान संख्याओं के बीच रनों की लंबाई काफी उचित प्रतीत होती है।

फुटनोट: छद्म यादृच्छिक संख्याओं का एक अनूठा अनुक्रम प्राप्त करने के लिए फेरबदल का उपयोग करना

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

फुटनोट: क्रिप्टोग्राफिक रूप से सुरक्षित PRNGs

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


एक सुधार: LCG- आधारित PRNGs, जिसका उपयोग ठीक से किया जाता है, पूर्ण चक्र के लिए अद्वितीय आउटपुट की गारंटी नहीं देता है। उदाहरण के लिए, पारंपरिक टर्बो पास्कल एलसीजी में (IIRC) 31 बिट्स की आंतरिक स्थिति होती है, लेकिन यह केवल 15-बिट संख्या उत्पन्न करती है जो एकल चक्र के भीतर दोहरा सकती है और कर सकती है।
पोरकुलस

46

अजगर को दोषी ठहराने से पहले, आपको वास्तव में कुछ संभाव्यता और सांख्यिकी सिद्धांत को ब्रश करना चाहिए। जन्मदिन विरोधाभास के बारे में पढ़कर शुरू करें

वैसे, randomपायथन में मॉड्यूल मॉड्यूल का उपयोग करता है मेर्सन ट्विस्टर PRNG , जिसे बहुत अच्छा माना जाता है, इसकी एक विशाल अवधि होती है और बड़े पैमाने पर परीक्षण किया गया था। इसलिए निश्चिंत रहें कि आप अच्छे हाथों में हैं।


42

यदि आप दोहराव नहीं चाहते हैं, तो अनुक्रमिक सरणी उत्पन्न करें और random.shuffle का उपयोग करें


3
भगवान मैं प्यार करता हूँ random.shuffle। यह मेरी परियोजना के कोर में से एक है :)
PizzAzzra

40

निम्ब के उत्तर के उत्तर के रूप में:

http://xkcd.com/221/

वैकल्पिक शब्द


7
RFC 1149.5 मानक IEEE-vetted यादृच्छिक संख्या के रूप में 4 निर्दिष्ट करता है।
ज़ेनो

15

सच्ची यादृच्छिकता में निश्चित रूप से मूल्यों का पुनरावृत्ति शामिल है इससे पहले कि संभावित मूल्यों का पूरा सेट समाप्त हो जाए। अन्यथा यह यादृच्छिक नहीं होगा, क्योंकि आप अनुमान लगा पाएंगे कि कब तक एक मूल्य को दोहराया नहीं जाएगा।

यदि आपने कभी पासा लुढ़काया है, तो आप निश्चित रूप से पंक्ति में 3 छक्के लगाते हैं ...




4

आप 4500एक श्रेणी से यादृच्छिक संख्या उत्पन्न कर रहे हैं 500 <= x <= 5000। फिर आप प्रत्येक संख्या को देखने के लिए जांचें कि क्या यह पहले उत्पन्न किया गया है। जन्मदिन समस्या हमें बताता है क्या संभावना उन संख्याओं को देखते हुए मैच के लिए दोनों के लिए है nएक सीमा से बाहर की कोशिश करता d

आप यह गणना करने के लिए फार्मूला भी उलट सकते हैं कि डुप्लिकेट बनाने की संभावना अधिक होने तक आपको कितनी संख्या उत्पन्न करनी है 50%। इस मामले में आपके पास पुनरावृत्तियों के >50%बाद एक डुप्लिकेट नंबर खोजने का एक मौका है 79


1

आपने 4501 मान (500-5000) के एक यादृच्छिक स्थान को परिभाषित किया है, और आप 4500 बार पुनरावृत्ति कर रहे हैं। आपको मूल रूप से आपके द्वारा लिखे गए परीक्षण में टक्कर प्राप्त करने की गारंटी है।

इसके बारे में दूसरे तरीके से सोचने के लिए:

  • जब परिणाम सरणी खाली होता है P (डुबकी) = 0
  • ऐरे पी (डूपे) में 1/ मान = 1/4500
  • अर्रे पी (डूप) में 2 मान = 2/4500
  • आदि।

इसलिए जब तक आप 45/4500 तक पहुँचते हैं, तब तक उस इंसर्ट में डुप्लिकेट होने का 1% मौका होता है, और यह संभावना प्रत्येक बाद के इंसर्ट के साथ बढ़ती रहती है।

एक परीक्षण बनाने के लिए जो वास्तव में यादृच्छिक फ़ंक्शन की क्षमताओं का परीक्षण करता है, संभावित यादृच्छिक मूल्यों के ब्रह्मांड को बढ़ाता है (जैसे: 500-500000) आप एक डुबकी प्राप्त कर सकते हैं या नहीं कर सकते हैं। लेकिन आपको औसत से कहीं अधिक पुनरावृत्तियों मिलेंगे।


3
जन्मदिन की समस्या के कारण आपका गणित गलत है। अन्य उत्तर देखें। 45 आवेषण के बाद, आपके पास पहले डालने को दोहराया जाने का 1% मौका है, लेकिन आपके पास 44 अन्य विशिष्ट आवेषण भी हैं जिन्हें आपने दोहराया होगा।

0

इस समस्या के साथ किसी और के लिए, मैंने uuid.uuid4 () का उपयोग किया और यह एक आकर्षण की तरह काम करता है।


3
तब सवाल बेहतर हो सकता है कि "मैं नॉन-रिपीटिंग नंबरों की एक श्रृंखला उत्पन्न करना चाहता हूं, पायथन का रैंडिंट () ऐसा नहीं लगता है - क्या करता है?" इसके बजाय "पायथन के यादृच्छिक संख्या जनरेटर खराब है" :-) मान लें कि uuid4 () सही मायने में यादृच्छिक है, यह अभी भी दोहरा सकता है - बस वास्तव में संभावना नहीं है। आप संख्याओं से वास्तविक गुण क्या चाहते हैं? न दोहराने वाला? यादृच्छिक? (एक उठाओ।) नहीं-दोहरा-अक्सर? (एक बड़ा पूर्णांक रेंज का प्रयोग करें, प्रभावी रूप से सभी uuid4 है, ऐसा लगता है।) वास्तव में क्या आप नंबरों का उपयोग करना चाहते हैं के लिए असली सवाल है।
एग्नोस्टेर

@agnoster मैं वास्तव में पायथन का अपमान करने का इरादा नहीं रखता था, लेकिन रैंडम: बिना किसी व्यवस्थित पैटर्न के, बिना किसी व्यवस्थित पैटर्न के, और दोहराए जाने वाले पैटर्न: वस्तुओं का एक समूह जो बार-बार दोहराता है। देखें, यादृच्छिक जनरेटर यादृच्छिक नहीं है यदि वह दोहराता है क्योंकि उसके पास एक पैटर्न है।
ओरोकुसाकी

9
"यादृच्छिक" की आपकी परिभाषा गलत है। गंभीरता से, वापस जाओ और जन्मदिन के विरोधाभास पर बिट्स को फिर से पढ़ें। एक सही मायने में यादृच्छिक संख्या जनरेटर अभी भी बहुत अधिक बार दोहराता है जितना आप अंतर्ज्ञान से उम्मीद करते हैं। जैसा कि @ConcernedOfTunbridgeW बताता है, पहले 100 नंबरों के भीतर सीमा 500-5000 में दोहराने की संभावना ~ 66% है, जो आपने देखा, उसके साथ असंगत नहीं है। यादृच्छिकता का अर्थ "दोहराए बिना" नहीं है, इसका मतलब सिर्फ यह है ... अच्छी तरह से, यादृच्छिक। वास्तव में, यदि आप गारंटी देते हैं कि जनरेटर की कमी को लागू करने के लिए कम यादृच्छिक होना चाहिए ।
agnoster

1
आप इन नंबरों के लिए क्या चाहते हैं, इस बारे में सवाल अभी भी खड़ा है। यदि आप विशेष रूप से गैर-दोहराव संख्या चाहते हैं, तो क्यों? uuid4 () है (यदि यह वास्तव में यादृच्छिक है) बहुत बड़ी रेंज के साथ रैंडिंट () से अलग नहीं है। यदि आप चाहते हैं कि अनुक्रम का अनुमान लगाना कठिन हो, तो दोहराव को समाप्त करना वास्तव में आपको नुकसान पहुंचाता है, क्योंकि एक बार जब मैं संख्या देखता हूं, तो कहता है, 33, मुझे पता है कि जो भी अगला आता है, उसमें 33 नहीं है। तो गैर-पुनरावृत्ति को लागू करना वास्तव में आपके अनुक्रम को अधिक अनुमानित बनाता है - क्या आप देखते हैं?
अज्ञेय

0

जन्मदिन का विरोधाभास है। इस बात को ध्यान में रखते हुए कि आप महसूस कर रहे हैं कि आप क्या कह रहे हैं कि "764, 3875, 4290, 4378, 764" या ऐसा कुछ होना बहुत ही यादृच्छिक नहीं है क्योंकि उस क्रम में एक संख्या दोहराती है। इसका सही तरीका यह है कि आप एक दूसरे से दृश्यों की तुलना करें। मैंने ऐसा करने के लिए एक अजगर स्क्रिप्ट लिखी।

from random import randint
y = 21533456
uniques = []
for i in range(y):  
    x1 = str(randint(500, 5000))
    x2 = str(randint(500, 5000))
    x3 = str(randint(500, 5000))
    x4 = str(randint(500, 5000))
    x = (x1 + ", " + x2 + ", " + x3 + ", " + x4)
if x in uniques:
    raise Exception('We duped the sequence %d at iteration number %d' % (x, i))
else:
    raise Exception('Couldn\'t find a repeating sequence in %d iterations' % (y))
uniques.append(x)

यह उत्तर वर्षों पहले दिया गया था (ऊपर चयनित चयन देखें)। इसे जन्मदिन का विरोधाभास नहीं कहा जाता है, क्योंकि यह विरोधाभास नहीं है, बल्कि सिर्फ जन्मदिन की समस्या है।
orokusaki
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.