1. 程式人生 > >LCG(linear congruential generator): 一種簡單的隨機數生成算法

LCG(linear congruential generator): 一種簡單的隨機數生成算法

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): 一種簡單的隨機數生成算法