import random x=[str(random.randint(0, 5)) for i in range(10)] x_str=''.join(x) y=[str(random.randint(0, 5)) for i in range(100000000)] y_str=''.join(y) if x_str in y_str: print("共有多少:") print(y_str.count(x_str)) print('第一個出現位置') print(y_str.find(x_str)) else: print("沒有")
如上面代碼所示, 突然想起來編程語言中的隨機數產生是采用線性同余發生器產生的,那么既然是尾隨機數它必然有重復的時候,那么我們有沒有可能找到它重復的時候,或者發行一個周期呢,所以由此寫了上面的代碼。
注: 該代碼比較吃內存沒有16G 內存的電腦可能是跑不了上面的代碼的。
一共跑了兩次, 結果如下圖:
首先並沒有發現什么周期可言,估計這個笨方法是發現不了的,前提是它真的有周期;
其次, 我們發現及時是5以內的整數, 產生的序列出現重復的時候都是要1000萬個數生成以后才會出現重復的序列;
最后,我們知道偽隨機數是會出現重復的,但是我們能遇到的可能性不大,理論上存在,實踐中可以不考慮。
附加:
如果隨機數的產生設置為 100以內的整數, 跑了N多次也沒有發現重復的序列。 即修改上面代碼:
random.randint(0, 5) 為
random.randint(0, 100)
由此可以發現偽隨機數其實還是比較靠譜的。