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