LAB
研究室
その他プログラムTIPS
確率の問題
あなたは、あるクイズ番組に出場しています。
あなたはそのクイズ番組で優勝し、いよいよ最後の賞品をもらえるゲームにチャレンジすることになりました。
そのゲームとは、中身が見えない3つの箱(A,B,C)の中から、賞品が入っている1つの箱を当てるというもの。
あなたは、Aの箱を選びました。
すると司会者は、次のような行動を取ったのです。
「Aの箱を選びましたね?
では私だけ、残りのBとCの箱の中を確認させて頂きます。
(中身を確認)
…ふむふむ、なるほど。
では、賞品の入っていないCの箱をこの場から取り除きます。
さて、最後のチャンスです。
今なら、Bの箱に変えてもいいですよ?どうします?」
さて、あなたは最初の選択を信じ、Aの箱のままでいたほうが良いのでしょうか?
それとも、Aの選択をひるがえし、Bの箱を選んだ方が良いのでしょうか?
もちろん司会者は、Cの箱に賞品が入ってるのに取り除く…なんてズルはしてませんよ!
*
「最後に残った2つの箱の内、どちらかに賞品が入ってるんだから、どちらを選ぼうとも確率は1/2でしょ?」
と思いがちですが、実は違うんです。
ポイントは、司会者が箱の中身を確認した上で、ハズレの箱を取り除いているという所にあります。
正解は、10行後!
正解は…最初の選択をひるがえし、司会者が残してくれた箱を選んだ方が賢明です。
最初に自分が選んだ箱が当たる確率は1/3で、司会者が残してくれた箱が当たる確率は、2/3になります。
ちょっと納得できませんか?では話を極端にしてみるとどうでしょう?
あなたの目の前に、100個の箱があります。
あなたはその内の1つを選びました。
司会者は、残りの99個の中身を確認し、1つを残してハズレである98個を除外してくれました。
さて、あなたは最初の選択を変えずにいるべきでしょうか?
それとも、司会者が99個の中から残してくれた1個を選ぶべきでしょうか?
これは、
「あなたが最初に選んだ1個が当たる確率と、司会者が確認した99個の中に当たりがある確率、どちらが高いでしょう?」
と聞いているのと同じです。
これなら、後者が正解であることが分かりやすいのではないでしょうか?
まだ納得できませんか?
ではもしあなたがプログラムを組めるのなら、プログラマー独特の検証方法があります!
そうです、実際に上記のクイズをシミュレートするプログラムを組めばいいのです!!
私も試しにプログラムを組んで試してみたところ、
10000回のシミュレーション中、最初の選択を変えずに当たった回数が、3354回。
逆に、変えた方が当たっていた回数が 6646回と、ほぼ 1/3 と 2/3 の関係になっていました。
このプログラムを組んでいる最中、実際にシミュレーションを行うまでもなく、
「あ、これは…選択を変えた方が 2/3 の確率で当たるわ」
というのが理解できるようになるかと思います。
不具合の内容を人に説明している内に、バグの原因が分かる事があるのと同じように、上記のクイズのアルゴリズムを考えながらコーディングしている内に、理屈が腑に落ちるのだと思います。
プログラムを組める方は、是非チャレンジしてみて下さい。
CATEGORY
- 製品事例 (7)
- デモプログラム (18)
- プログラムTIPS (41)
- C言語 (5)
- C++ (6)
- C++cording (4)
- Ruby (8)
- VisualStudioの使い方 (3)
- 最適化Tips (5)
- ゲーム開発テクニック (2)
- その他 (7)