見出し画像

プログラミング的に答えてみる〜「数学ガールの秘密ノート/確率の冒険」研究問題2-3


数学ガール

結城浩先生の「数学ガールの秘密ノート 確率の冒険」を読んで、巻末の「研究問題」についてあれこれ考えています。

結城浩先生の研究問題がとても優れた問題であることは、もう何度も書いていますので繰り返しませんが(といいつつまた書いていますが)、今回の私の回答は、(おそらく)真正面から回答と、プログラミング的に考えた、ちょっと横からの回答です。(なるほど、これが正解か!などと思わないでくださいね! あくまでも一つの解答案です。と、これも何度も書いてますが)

研究問題2-3

研究問題2-3は、こんな問題でした。

100人のメンバーがいます。1枚の「当たり」を含む100枚のくじから1人1枚ずつ順番に引いていきます。引いたくじは戻しません。早い順番で引くのと遅い順番で引くのとでは「当たり」になる確率は異なるでしょうか。

同書より

直感的にはなかなか悩ましい問題ですが、「引いたくじは戻しません」という条件がついていても、やはり、くじを引く順番によって当たりを引く確率は変わりません。まず、わりと真正面からの回答です。

回答1:わりと真正面から

まず、1人目が当たりくじをひく確率を考えます。これは単純で、100本のくじの中に1本だけ当たりがあるのですから(当然ですが当たりのくじとハズレのくじは見分けがつかない=つまり100本のうちどのくじを引く確率も等しいと考えられますから)、当たりくじをひく確率は$${\frac1{100}}$$です。

さて、問題は2人目です。1人目がくじを1本引いて、そのくじは戻さないという設定ですので、くじは99本になっていて、そのうち1本が当たりです。したがって、当たりくじをひく確率は$${\frac1{99}}$$です。
やった、確率が上がった!と喜ぶのは早合点で、2人目がくじを引けるのは「1人目がハズレくじを引いた時」という条件がついていることに注意すべきです。だって、1人目が当たりくじを引いてしまったら、あとは全部ハズレくじですから、もうくじ引きをする意味がありませんから。1人目がハズレくじを引く確率は、100本中99本がハズレくじですから、確率は$${\frac{99}{100}}$$です。
したがって、2人目が当たりくじをひく正しい確率は、「1人目がハズレくじをひく」と「2人目が当たりくじをひく」の同時確率で、$${\frac{99}{100}\times\frac{1}{99}=\frac{1}{100}}$$です。結局、1人目と同じでした。

同様に考えていくと、3人目、4人目、・・・100人目も、同じように当たりくじをひく確率は$${\frac1{100}}$$です。このような説明は、たぶんいろいろな方がWeb記事を書いていると思われます。

回答2:プログラミング的に、ちょっと横から

では、プログラミング的に考えるとどうなるのでしょう。以下に書くことは、この問題をJavascriptでアニメーションにしようとして考えたことです。

100本中1本が当たりのくじを作る

プログラムを組む時に、最初に考えたのは、くじを作ることです。100本中1本が当たりのくじは、たとえば「0,0,0,0,0,0,0,0,0,…..」のように、「0」が100個の配列を用意し、そのうち1つだけを「1」にして、「0,0,0,0,0,1,0,0,0,…..」みたいにすれば実現できます。

くじを1本引く

このような配列から1つを選ぶには、(Javascriptは0オリジンですから)0〜99の中から一つの数を(乱数を使って)選びます。たとえば「10」を選んだとすると、10番目の配列要素を参照して、それが「1」なら当たり、「0」ならハズレとすればよい。でも、10番目の配列要素をどうする? 10番目の要素を削除して、そうすると配列の要素数が1つ減りますから、今度は0〜98の中から一つの数を選んでいく。。。。う、面倒。
何が面倒って、くじを引くたびに、配列の要素を一つ削除するのが面倒。3人目は0〜97、4人目は0〜96って、乱数の範囲を変えていくのが面倒。

並べ替えと同じでは?

そこで気がついたのです。これ、並べ替えと同じだと。
1人目が「10」番目のくじを引く。2人目が「15」番目のくじを引く。この「10」とか「15」とかの数は、乱数で選ぶのです。だったら、全部のくじを、ランダムに並べ替えて、先頭から順にくじを引いて、当たりかハズレかを見ていっても同じでは? つまり、「0,0,0,1,0,0,0,…」というくじを、ランダムに並べ替えて、「0,1,0,0,0,…」とする。そして、1人目は一番左のくじを引いたことにする。0です。ハズレ!2人目は左から2つ目のくじを引いたことにする。1です。当たり! これなら、配列要素を減らす必要がなくて簡単。必要なのは「ランダムな順に並べ替える」作業だけです。

99本のハズレくじを並べ替える必要はない!

といっても、100本のうち99本はハズレです。この99本を区別する必要なんてありません。大事なのは、そう、当たりくじである「1」が何番目にあるかということだけです。ならば、並べ替える必要すらありません。「何番目に当たりくじを置くか(つまり配列の何番目を1にするか)」、その位置を乱数で決めてやればいい。あとは配列の先頭から、当たりかハズレかを調べていけばいい。これで、研究問題2-3と同じくじ引きは実現できてしまいます。

問題を思い切って書き換えよう

すると、この問題は次のように書き換えることができます。

1枚の「当たり」を含む100枚のくじを用意します。100枚を左から右へ一列に並べた時、一番左、左から2番目、3番目、、、のうち、「当たり」くじが置かれる確率が高いのはどこでしょう。

自分で書いていて、なんとつまらない問題だろうと思いました。これなら、「どこだって同じでしょ」と一瞬で答えられてしまいそうです。だってこれ、サイコロ投げと同じですから。1〜100までの目があるサイコロ。どんなサイコロやねん!と思いますが。

書き換えるとどうして味気ないか

どうしてこんなに味気ない問題になってしまったのかというと、「くじを引く」という、「能動的な行為」が設定から消えているからでは、と思いました。くじを引いたことがある方なら経験があると思いますが、「当たれ〜」と念じながら引いたり、「直感で選んだほうが当たりやすいんだ」「なるべく奥の方から引く方がいいんだ」などと謎の理論を持ち出したりして、なんとか「当たり」を引こうとする人、いますよね。
「最初に当たりが出てしまったら終わりなんだから、最初に引く方がいいに決まっている」とか、「余り物に福があるって言うからな」とか、いろいろな理由を持ち出して、わいわいと楽しむ人も、たくさんいそうです。
書き換えてしまった問題が味気ないのは、こうした、いわば「人間らしい」部分がなくなってしまったからだと思われます。

次回はアニメーション版です

さて、ここまで書いてきたことでわかると思いますが、すでにアニメーション版はできています。それは次回に。
あ、それから、今回はRでのシミュレーションはしません。なぜって、1〜100までの目があるサイコロ投げと同じですから。そういえば、そんなゲームありましたね。はい、ビンゴです。めでたくタイトル画像の意味を回収したところで、次回をお楽しみに。

いらすとやさん、ありがとう

今回のタイトル画像はいらすとやさんです。いつもの画像サイトでビンゴの画像を探しましたが、どれも有料でしたので。