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

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

目錄

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