今度はプログラムを使って「3枚のカードが袋に入っています」問題を検証してみます。
わかりやすくExcelVBAを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Function test() ' Aが出た回数 A = 0 ' Cの赤が出た回数 C_AKA = 0 ' 100,000回ループ For kaisu = 1 To 100000 ' Int((2 - 1 + 1) * Rnd + 1)はランダムに1か2を取得 card = Int((2 - 1 + 1) * Rnd + 1) ' 1の場合Aのカード、2の場合Cのカードと想定 If card = 1 Then ' Aが出た場合 ' 絶対に裏が青ではない A = A + 1 Else ' Cが出た場合 ' 赤が表に出れば裏は青 card = Int((2 - 1 + 1) * Rnd + 1) ' 1の場合表が赤と想定 If card = 1 Then ' 赤が表 C_AKA = C_AKA + 1 End If End If Next kaisu ' C_AKA + A = 赤が表で出た回数 ' C_AKA = 裏が青の回数 Debug.Print C_AKA / (C_AKA + A) End Function |
結果は1/3です。
ただこれはCが出た場合に青が表の可能性を考えています。
問題では「赤が出た」と言っているので正しいプログラムは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Function test() ' Aが出た回数 A = 0 ' Cの赤が出た回数 C_AKA = 0 ' 100,000回ループ For kaisu = 1 To 100000 ' Int((2 - 1 + 1) * Rnd + 1)はランダムに1か2を取得 card = Int((2 - 1 + 1) * Rnd + 1) ' 1の場合Aのカード、2の場合Cのカードと想定 If card = 1 Then ' Aが出た場合 ' 絶対に裏が青ではない A = A + 1 Else ' Cが出た場合 ' 赤が表に出れば裏は青 ' しかし赤が出たと言っているので青が出る可能性は考えない ' card = Int((2 - 1 + 1) * Rnd + 1) ' 1の場合表が赤と想定 ' If card = 1 Then ' 赤が表 C_AKA = C_AKA + 1 ' End If End If Next kaisu ' C_AKA + A = 赤が表で出た回数 ' C_AKA = 裏が青の回数 Debug.Print C_AKA / (C_AKA + A) End Function |
1/2になりましたね。
1/2派と1/3派の論点はつまり青が出る可能性を考えるか考えないかということです。
上記記事の実際の実験結果を見ると37/78の中に青が出た試行は一切影響を及ぼしていません。
つまり青が出る可能性は除外してしまっていいのです。
ちょっと待てよ…
やっぱり1/3が正しいのか?
青が出たときはノーカウント
何回かこのことに言及してきましたが、これこそが1/3が正しいという裏付けになっていませんか?
青を引いた場合袋に戻す、ということはつまりCのカードを引いたのにそれを無かったことにするということにもなります。
それすなわちAのカードに引かれるチャンスをみすみす与えていることになるのです。
Aのカードからしたら「やばい、Cが引かれた。ドキドキ、青が表。セーフ!ノーカウント!」ってな感じです。
Cが引かれたときの1/2でこれが起こるんですからAのほうが有利なのは明らかですよね。
要はAのほうがCよりも引かれる回数が多くなるということです。
相対的にCの赤が出る確率は下がります。
もうわけわからん。
スポンサーサイト
アフィリエイトはエーハチネット
ドメイン取るならお名前.com