2017-08-31 419 views
1

我使用下面的代碼段,以生成所述隨機字符Python中的random.sample重複生成的序列的概率是多少?

char_set = string.ascii_letters + string.digits 
Randomno=''.join(random.sample(char_set*10,9)) 
+0

如果你運行足夠多的時間,100% –

+0

@NickA取決於你如何看待它,任何序列,如果它是一個特定的序列,那麼它永遠不會100%。 –

+0

@LSelter真的,它*接近* 100% –

回答

3

唯一值的總數應爲62^9(1.3537087e + 16)

符號^長度的數目。

「用於無替換隨機抽樣」,所以我以前的數學是不正確的,因爲字符不能在給定的樣本中重複。

在62^9運行後匹配任何序列的機會是100%,匹配特定序列的機會往往趨於,但從未達到100%隨着運行次數增加,因爲您永遠不會保證獲得任何特定的順序。

從留言中加入了我的想法:

隨機使用marsenne捻線機:http://en.wikipedia.org/wiki/Mersenne_Twister,根據其wiki頁面這是相當強大的。 http://docs.python.org/3.1/library/random.html根據文檔隨機不應該用於加密目的。這是有道理的,因爲MT是完全確定性的,給定初始參數並且看到可以再現相同的序列。

+0

數學上來說,是的。 但是我有興趣從python的角度來看它。 在這裏,我將符號數乘以10,所以我們得到620^9 = 13537086546263552000000000在一個數字重複之前。但是random.sample會不會生成所有這些可能的組合? – Shre1407

+1

隨機使用marsenne twister:https://en.wikipedia.org/wiki/Mersenne_Twister ,根據其wiki頁面是相當強大的。 https://docs.python.org/3.1/library/random.html根據文檔的 不應該用於加密目的 –

+0

@LSelter:我認爲這個評論實際上比OP更相關,而不是您給出的答案。 –