それは、疑似乱数の有限配列に基づいてシードに近似値を取得することはできますか?
質問
私はシリーズを形成し、いくつかの数字を持っていると仮定 例えば:652,328,1,254 そして私は、種子を取得したいという私は、例えば、
を行う場合srand(my_seed);
私はorigonal順序に制限されたエラーで近似のいくつかの種類を取得します、 ときに、同じ順序で表示されるすべての数値ます。
解決
は、擬似ランダム生成のために使用されるアルゴリズムに依存します。アルゴリズムは、単純な線形合同法のであれば、シードバックを取得するだけの問題ですリニアモジュラー方程式解い(溶液は、非一意であることをメモして、そのようなジェネレータは、メモリレスであるとして、それは問題ではない)。
アルゴリズムはより複雑である場合は、、これができない場合があります。
C標準ライブラリで使用されるアルゴリズムは、標準によって制限されないことに注意してくださいので、異なるプラットフォームは異なる実装を有することができる。
他のヒント
あなたは一般的にバインドされ、エラーを持つことはできません。あなたのアルゴリズムは動作しますか、しませんか。この理由は、バインドされ、合理的なエラーがRAND_MAXことを明らかにはるかに小さいということです。ターン手段で低ビットは、上位ビットとしてランダムなようでないことをことを。しかし、良いPRNGは、すべてのビットが均等にランダムであることを確実になります。
RNGアルゴリズムのこのゆっくりではあるが、数学的に音の例を考えてみましょう
int rand() {
state = AES_encrypt(state);
return state % RAND_MAX;
}
void srand(int seed) {
state = AES_encrypt(seed);
}
は、出力シーケンスと、前のstate
間の任意の有意な相関を見つけることができれば、AESアルゴリズムが壊れて検討する必要があります。
この質問をチェック。
のようにジャスティンは言う、それは線形合同ジェネレータを(rand()
実装がしばしばである)あなたが生成された数字の配列を有したときに後戻りすることも可能です。私はこの問題は、元の種子...
crytographic PRNGの定義はこの正確な性質は、計算上実行不可能であるものである - これが可能であるためしかし、上述したように、はるかに弱い(およびはるかに速い)が存在するのPRNG。それはあなたのアルゴリズムに依存してます。