LCG(linear congruential generator): 一種簡單的隨機數生成演算法
阿新 • • 發佈:2018-11-11
目錄
LCG演算法
LCG(linear congruential generator)線性同餘演算法,是一個古老的產生隨機數的演算法。由以下引數組成:
引數 | m | a | c | X |
---|---|---|---|---|
性質 | 模數 | 乘數 | 加數 | 隨機數 |
作用 | 取模 | 移位 | 偏移 | 作為結果 |
LCG演算法是如下的一個遞推公式,每下一個隨機數是當前隨機數向左移動 log2 a 位,加上一個 c,最後對 m 取餘,使隨機數限制在 0 ~ m-1 內
從該式可以看出,該演算法由於構成簡單,具有以下優點:
- 計算速度快
- 易於實現
- 易於寫入硬體
以下是針對不同引數 lcg 產生隨機數的效果圖
可以看出,針對不同的引數,lcg產生的效果差別很大
以下是針對不同環境下的引數選擇
python 實現
def lcg(modulus, a, c, seed):
while True:
seed = (a * seed + c) % modulus
yield seed