8

この質問に適切なフォーラムについて少し確信が持てません。理論上のコンプの間です。科学/数学とプログラミング。

Mersenne-Twister を使用して疑似乱数を生成します。今、与えられたシードから始めて、シーケンスの n 番目の番号にジャンプしたいと思います。

私はこれを見ました:http://www-personal.umich.edu/~wagnerr/MersenneTwister.html、そして1つのスキームは次のようになります:

特定のシードsからの完全なランダム シーケンスの最初のN 個の数字だけが必要だとします。シーケンスをp個のサブ シーケンスに分割し、N 個の数値すべてを調べて、各サブシーケンスの開始時に乱数ジェネレーターの状態ベクトルを保存します。n番目の数 に到達するために、 nk番目のサブシーケンスに含まれることを確認し、このサブシーケンスの状態ベクトルを読み込み、m 個の連続する乱数を生成します。ここで、k 番目のサブシーケンスの m 番目の数は完全な数列の n 番目の数と同じ ( n = m + (k-1) * N/p )。

しかし、状態ベクトルの長さは 624 x 4 バイトです! メルセンヌ・ツイスターで生成されたシーケンス内の任意の要素にジャンプすることは実際に可能かどうか疑問に思います。

4

4 に答える 4

8

はい、可能です!それはジャンプアヘッドと呼ばれます。

MT の作成者のホームページで、Mersenne Twister でこれを行うためのすべての詳細を見つけることができます。コードと、アルゴリズムを説明する科学出版物が利用可能です。

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/JUMP/index.html

于 2011-02-07T21:39:30.687 に答える
2

メルセンヌ ツイスターは、F 2 (0 と 1 の 2 つの要素を含むフィールド) 上の (かなり大きな) 行列として表すことができます。次の状態への遷移は、この行列による乗算です。

ストリーム内の任意の位置にジャンプするには、二乗を繰り返してこの行列の対応するべき乗を計算し、それを初期状態で乗算します。

于 2010-11-16T22:19:58.593 に答える
-5

あなたが求めていることは、暗号学的に安全な乱数ジェネレーターの定義に反すると思うので、残念ながらそれは不可能だと思います.

于 2010-11-15T13:46:45.233 に答える