疑似乱数生成の乗法的合同法

導入する

通常のコードで使用される乱数が疑似乱数であることは誰もが知っていますが、コンピューターが真の乱数を生成できるかどうか疑問に思ったことはありませんか?実際、物理的な方法を使用するなど、それは可能です:
ここに画像の説明を挿入します
しかし、
ここに画像の説明を挿入します

疑似乱数

したがって、私たちのほとんどは疑似乱数を好みます。次に、疑似乱数がどのように生成されるかを理解しましょう。

まず、関数f(x)f(x)を設計します。f x (再帰式とも呼ばれます)、次にx 1x_1を与えますバツ1、出力x 2 x_2バツ2、すなわちx 2 = f(x 1)x_2 = f(x_1)バツ2=f x1、次に順番に進みます、x 3 = f(x 2)x_3 = f(x_2)バツ3=f x2、…、xn = f(xn − 1)x_n = f(x_ {n-1})バツn個=f xN - 1このようにして、n − 1n-1が得られます。n1つの乱数(与えられたx 1 x_1バツ1ここでは数えません)。この時点で、疑似乱数の生成は完了です。

ただし、上記のプロセスにはいくつかの問題があることがわかります。

  1. 初期値x1x_1が2回与えられている限りバツ1が同じである場合、生成される乱数シーケンスは同じです。
  2. 生成される乱数シーケンスには周期的な現象があります。[0、31] [0,31]が生成される場合は、考えてみてください[ 0 3 1 ]乱数、生成された乱数シーケンスに2つの同一の数が現れると、xi = xi + T x_i = x_ {i + T}バツ=バツI + T、次にTT関数f(x)f(x)が適用されるため、 Tは周期です。f x によって得られる後続の結果はまったく同じです。

上記の2つの質問は、説明するのに十分です。このメソッドによって生成される乱数は、疑似乱数です。

上記の2番目の質問を使用して、いくつかの概念を追加します。

期間:上記のTTなどの周期的な現象を持つ疑似乱数の数Tなぜなら乱数列のxix_iはバツ x i + T x_{i+T} バツI + Tのすべての乱数はループし続け、合計n個あります。

最大容量:ループが発生する前に生成された乱数の最大数。前の例の最大容量はi + T i + Tです。+T

これまでのところ、コンピューターで乱数を生成する原理は理解していると思いますが、この再帰関数f(x)f(x)はまだ指定していません。f x

乗法的合同

このメソッドの再帰式は次のとおりです
。xi+ 1 =(A xi)mod(M)x_ {i + 1} =(Ax_i)mod(M)バツI + 1=A xm o d M
したがって、問題は初期値x 1x_1にあります。バツ1AAAMMMの設定について

おすすめ

転載: blog.csdn.net/qq_43391414/article/details/114902402