有限値の擬似乱数バイナリ シーケンス (例: 00101010010101
) が与えられた場合、シーケンスがどのように続くかを予測します。誰かがそれを行う最も簡単な方法を教えてもらえますか? または、コンピューターでソリティアをほとんどプレイできない人にとっては難しすぎる場合は、最初のステップをどこで取得するか教えてもらえますか... PS: この手法を使用して、次の電子ルーレット番号の色を予測できますか?1
と0
をそれぞれ赤と黒に割り当てます)?
6 に答える
暗号的に安全な疑似乱数ジェネレータは、特にあなたがやりたいことを不可能にすることを目的としています。特に、これらは「次のビットテスト」を満たします。出力のビットが与えられると、確率が。より大きいk
ビットを推測することはできません。k+1
1/2
次のビットテストを満たさない単純な疑似乱数ジェネレータが攻撃される可能性があり、実際、PRNGの選択により、実際のシステムでセキュリティの脆弱性が発見されています。特に、線形合同法はある程度(または完全に)予測可能であることが知られており、Unixランダムの一部のバージョンではこのアルゴリズムを使用する場合があります。ただし、この方法は数学を多用します。この道を進みたい場合は、「線形合同法による予測」の検索から始めてください。
PRNGの実装を知っている場合の別の攻撃は、分析しているシーケンスの生成に使用されるシードを特定しようとすることです。シードは、時刻、プロセスIDなどの推測可能な情報に基づいている場合があります。
最初に PS に答えるには: いいえ、ルーレットのスピンは独立したイベントであるため、結果の歴史的な順序には何も予測できません。
一般的な質問は難しくて面白いです。この Web サイトでは、初期値から驚くほど多くのシーケンスを推測できます。
http://www.research.att.com/~njas/sequences/
任意の整数シーケンス用であることに注意してください。
{0,0,1,1,0,0,1,1,...} のような単純なパターンで試してみたところ、正しいことがわかりました。
疑似ランダムシーケンスの場合、唯一の可能性は、それぞれの可能性がどれだけ前に発生したかを数え続けることです。1 が 0 よりも大きい場合、次の 1 が 0 になる可能性が高くなります。どれだけ可能性が高いかは、それぞれの相対的な発生に依存します。
統計学者があなたに言っていることにもかかわらず、イベントは独立しているため、これは真のランダム性では機能しないことに注意してください:-)
ルーレットでダブル オン ロス方式を使用しているときに、最初にテーブルに 13 の赤が出たときに (痛々しいほど) わかります。いずれにせよ、ハウスは赤でも黒でもない 0 (テーブルによってはダブル 0) からアドバンテージを得ます。
これはまともな質問ですが、「ソリティアをほとんどプレイできない」場合は、今すぐには手が届かないかもしれないと思います.
基本的な言語を選択することを検討する必要があります。ほとんどの人は PHP と言うでしょうが、初心者にそれを勧めるのは慎重です (ただし、作業を開始するのは非常に簡単です。XAMPP を参照してください)。Javaはおそらく「簡単に実行して操作できる」言語ですが、どの言語から始めるかについては、ここにもっと良いスレッドがあると確信しています(経験豊富なプログラマーがそれを愛しているので、おそらくPythonまたは何かが勝つでしょう).
ところで、あなたの英語は大丈夫です (私はあなたが英語を母国語としない人だとは知りませんでした)。
さて、あなたの質問は、真のパターン マッチングを見ている場合です。このアイデアをコードに変換したいと思います。
"CURRENTPOINT" is end of first letter.
LOOP: Pick letter(s) from Start to "CURRENTPOINT"
Break the rest of your binary string into blocks of the same size.
See if these blocks all equal your picked letters.
If not, move "CURRENTPOINT" along and repeat the LOOP until you run out of letters.
If so, you have your "repeating section."
乱数発生器が一時的に偏っていて、この偏りがかなり短期間でベースライン (バランスのとれた 0 と 1) を再確立すると推測している場合は、それぞれの 0 と 1 のカウントを比較して、その他は、ベースラインからの偏差に基づいている可能性が高くなります。ただし、モンテカルロの誤謬に注意してください。
周期性について誰も教えてくれなかったことに気付きました。
疑似乱数列は常に数学演算で機能します。(量子コンピュータまで^^)
素数を生成する通常の方法は、2 つの素数を除算することです (正しい単語かどうかはわかりませんが、何でも構いません)。
例えば
1/3=1.333333.....
9/7=1,2857142857142857142857142857143
それらはかなり少数であり、何に気づきますか? 周期性。
1/3=1.3 3 3 3 3 3.....
9/7=1,2857 142857 142857 142857 142857 143
その場合、素数が大きいほどシーケンスが大きくなります。3 と 142857 は大きくなります。
したがって、疑似乱数列を長い間調べていると、周期性が見つかり、次の数を「推測」できる場合があります。しかし、それにはしばらく時間がかかる可能性があります。
PS: 私の英語で申し訳ありません、私は少し錆びています ^^
あなたが考える必要があるのは、ランダム性の特性です。それらを研究してください。たとえば、「ランダム性は束になって実行されます」。ランダム シーケンスを予測可能なシーケンスと比較します。通常、予測可能なシーケンスには束が見つかりません。束を利用するには、束を待ちます。そして少し運が良ければ勝てます。