乱数と戦争
@mobius8
第1講
では、講義を始めます。
皆さんは「乱数」という言葉を知っていますか? 乱数とは、何らかの方法でランダムに生成される数字のことです。
例えば今私が、頭の中に浮かんだ数字を挙げることにしましょう。そうですね、では――83としましょうか。この83という数字は、皆さんからすれば何の脈絡もなく、つまりランダムに挙げられた数字であり、とりあえず乱数と言って差し支えないでしょう。
ところで乱数は、主にコンピュータによって扱われますね。しかしコンピュータというのは、実は本当の意味で乱数を扱うことはできないのです。
私は「頭の中に浮かんだ数字を挙げる」と言いました。皆さんは当然私の頭の中を覗き見ることができないので、83という数字はランダムに選ばれた数字に見えるでしょうが、実はこれは、この講義の履修登録を行った学生の数です。
コンピュータは、実は確定的な方法でしか計算をすることができません。もう少し分かりやすく言うならば、乱数として挙げる数字の決め方を――先ほどの例でいえば「履修登録の人数を乱数としなさい」という命令に当たりますが、これを人間がコンピュータに教えてやる必要があるのです。
ですので、実際にコンピュータで扱う乱数は真の乱数ではなく「疑似乱数」と呼ばれるものです。疑似乱数は、それを生成する流れ、つまりアルゴリズムを追っていくと、コンピュータが扱える確定的なものになっています。しかし、我々人間がコンピュータを使う分には十分にランダム性が高い、つまりアルゴリズムを再現して次に生成される数を人間が予想するのは困難であるので、実用的には乱数として扱えているわけです。
さて、ここで疑似乱数を生成するアルゴリズムのひとつ、「線形合同法」というのを紹介しましょう。これは非常に古典的なアルゴリズムで、より高度なアルゴリズムの登場にともない現代での実用例はほとんどなくなりました。……ああ、文系の皆さんが少し嫌な顔をされていますが、使うのは小学生レベルの算数ですので安心してくださいね。
まず数字AとB、それからMを決めます。そうですね、では最前列の仲の良さそうな三人組、ひとりずつ何か数字を言ってみてください。……9、7、0と、ああ、0は少し困るので他の数字をお願いします。できれば二桁くらいだと嬉しいのですが……17。いいですね。では、A=9、B=7、M=17とします。
それから、乱数の種x_0を決めましょう。これはシード値とも言って、乱数の初期状態を決めるものです。では……そこの学生。5ですか。いいでしょう。シード値はx_0=5です。
これで準備が整いました。では乱数を生成してみましょう。といっても方法は非常に簡単で、
x_n=A×x_{n-1}+B mod M
という式を使うだけです。ああ、文系の学生のために一応説明しておくと、このmod Mというのは「Mで割ったあまり」という意味です。
まず、n=1の場合です。先ほど決めたA、B、M、x_0を代入すると、
x_1=9×5+7 mod 17
となりますね。ですので、x_1=1です。
次にn=2の場合。今求めたx_1を使うと、
x_2=9×1+7 mod 17
なのでx_2=16。どんどんいきましょう。
x_3=9×16+7 mod 17
ええと、少し計算が大変かもしれませんが、x_3=15ですね。
計算はここまでにしておきましょうか。ところでこの方法では、17で割ったあまりを次の乱数としているので、生成されるのは0以上17未満の数であるというのは理解できますか? 逆に、0以上N未満の乱数が欲しいときはM=Nとすればよいわけです。
とまあ、このように、真にランダムな乱数はコンピュータでは作れないので、人間の目にはランダムに見える疑似乱数を作る方法を編み出したわけですね。
さて、ではコメントペーパーに関する連絡をします。講義の感想と合わせて、今計算した線形合同法でx_6を求めて書いておいてください。これで出席確認とします。講義時間はあと五分ほどですが、書けた人から提出して退席して頂いて構いません。なお、この時間に講義内容に関する質問も受け付けます。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます