1. 程式人生 > >隨機數生成的簡單筆記

隨機數生成的簡單筆記

各種程式語言一般都有隨機數生成器,拿python來講有專門的random模組用於生成隨機數,numpy中也有numpy.random,在使用隨機數生成器的時候,常涉及到隨機數種子的概念。以前對隨機數種子一直不是很理解,只大概知道要想每次重新執行程式碼時得到相同的隨機數,就要設定隨機數種子,直到看了這篇部落格隨機數是騙人的,.Net、Java、C為我作證後才豁然開朗。
原來由隨機數生成器生成的隨機數並不是完全隨機的,只是利用某些演算法生成的偽隨機,最常用的就是“線性同餘法”: 第n+1個數=(第n個數*29+37) % 1000,利用該演算法通常需要指定一個初始值,就是所謂的隨機數種子。由相同的隨機數種子經過相同次數運算得到的隨機數是完全一樣的。隨機數種子如未指定,通常預設會選擇系統當前時間值。
使用(偽)隨機數生成器的時候,要注意不要將隨機數物件初始化的程式碼放在迴圈語句裡面,因為有可能因為迴圈體執行比較快(在一個系統時間單位內執行多次)導致隨機數物件進行了相同的初始化從而產生相同的隨機數。
具體可參考連結中的部落格,寫這篇部落格主要是為了收藏上面提到的部落格並加深一下自己的理解。