|
普通のサイコロを振ったら1〜6のどれかをランダムで与えることができますが、 それを使って1/7の確率を出すにはどうしたらいいか考えていました。 6面サイコロで7面サイコロと同じことをするということです。 まずは一番単純に、1/2の確率で表か裏になるコインで考えます。 1回投げるだけだと1/2の確率しか実現できないわけですが、 2回投げることにより、1/4の確率を実現できます。 (表, 表) → 1 (表, 裏) → 2 (裏, 表) → 3 (裏, 裏) → 4 それぞれは独立しているので、コインが2枚あったら同時に投げた方が効率的です。 こうすれば、表裏の2通りしかないコインで4面サイコロを実現できます。 3回投げれば8面、4回投げれば16面ですね。でも3面サイコロは実現できません。 そこで、こうすることにします。 (表, 表) → 1 (表, 裏) → 2 (裏, 表) → 3 (裏, 裏) → やりなおし 2回投げて両方とも裏だったら、やりなおすのです。 つまり、また2回投げます。これをずーっと繰り返します。 なんだか変に感じられやすいのですが、このとき例えば1になる確率は 1/4じゃなくて1/3になるのです。 じゃんけんのあいこの原理と同じですね。勝ち負けそれぞれ1/2の確率のはずなのに 実際には勝ち負けあいこの3通りだから勝つ確率は1/3じゃないか?? と思われますが、あいこになったらまた繰り返す、ということを続けるので 実際の確率は次のようになります。 1/3+2/3×1/3+(2/3)^2×1/3+…=1/2 決着がつくまであいこを繰り返すことにより、確率は上のような 無限級数の和として表現されます。これにより、勝つ確率は1/2となるのです。 上のコインも同じ理屈で、(裏, 裏)が出たらやり直すことにより、 (表, 表)が出る確率は1/3となるのです。 これをサイコロで適用しましょう。 サイコロは1〜6になるわけですが、2回振って6進数と考えれば 1〜36の数を表わすことができます。 1回目に出た目をa、2回目に出た目をbとしたとき 1+(a−1)+6(b−1)を計算したものを出た目とすりゃいいのですね。 例えば1回目に「4」、2回目に「3」が出たなら、 1+(4−1)+6(3−1)=16となるので、「16」が出たと考えればいいのです。 今回は7面サイコロを作りたいので、 このときの値が「1」〜「7」以外であればやりなおせばいいのです。 中々めんどくさいですね。 つまり「16」が出た場合はやりなおしてまた2回振るのです。 コインのときと比べて何度もやりなおすことになりますが、 あいこの原理と同じで、ちゃんと各目の出る確率は1/7になります。 これで、6面サイコロ2個を使って、7面サイコロを作ることができました。 同じような方法で、任意の面のサイコロを作ることが可能です。 例えば100面サイコロを作りたい場合は6面サイコロ2回では足らないので 3回投げるようにすればOKです。 6^3=216なので、1回目の目をa、2回目をb、3回目をcとして 1+(a−1)+6(b−1)+6^2 (c−1)を出た目と考えれば 「1」〜「216」を実現できますので、これは216面サイコロと同等になります。 216面もあったら、もう面とかないですね。ボールみたいです。 作りたいのは100面ですから、「101」以上が出たらやりなおし。 これを続けるようにすれば、100面サイコロが完成します。 各目の出る確率はちゃーんと1/100になります。 n面サイコロを作るには、c面サイコロをk=log[c](n)回(切り上げ)振り、
このときi回目に出た目をv[i]としたとき 1+Σ[i=1→k]c^(i-1)(v[i]−1) をn面サイコロの出た目とすればよい。 もしこの値がnより大きい場合は、これをやりなおす。 ですが気になるのは、やはり実用性でしょう。 6面サイコロで7面サイコロを作ることは可能ではありますが、 やりなおしがずーっと続いたら嫌になります。 そこで、だいたい何回ぐらい繰り返せばどれかの目になるのか期待値を求めます。 1×7/36+2×29/36×7/36+3×(29/36)^2×7/36+…… を計算すればいいことになりますね。 色々あってこれは36/7 回という何ともわかりやすい確率になります。 7/36の逆数ですね。平均約5.14回。多いんだが少ないんだかわかりませんね。 サイコロが2個あれば1度に2回ずつ振ればいいのでちょっとラクですが、 サイコロが1個しかない場合は倍振るので、10回ぐらい振ってやっと目が出ます。 やっぱりめんどくさいなぁ…… 同じようにして6面サイコロ×3による100面サイコロの目が決まる期待値は 216/100 回≒2.16回となって、そんなに掛からないことがわかります。 直感的にも当然ですよね。7面サイコロと違ってやりなおしの幅が狭いです。 n面サイコロをc面サイコロで実現する場合、
c面サイコロをk=log[c](n)回(切り上げ)振ることになり、 このとき目が決まるまでに繰り返す試行回数は平均 c^k/n 回となる。 めんどくさいけど、実現はできるということでしょうね。 使えるのかなぁ。 追記:後でましな方法思いつきました。
|
全体表示
[ リスト ]






サイコロから1/7を取りたい方へ
・サイコロを3回振る
・出目を偶数、奇数に分ける
・偶数=0、奇数=1とする
・3連続の偶数は無視して振り直す
以上で001〜111という7通りの2進数が取れます
001=1
010=2
011=3
100=4
101=5
110=6
111=7
2019/7/16(火) 午後 8:24 [ こんな古いページに今更コメントする馬鹿は俺です ]
コメントありがとうございます すいません本記事、後で一般化しています:
https://blogs.yahoo.co.jp/fermiumbay2/40840499.html
6面サイコロを、奇数・偶数の2面サイコロと見立てた場合ですね。
ご提示いただいたように、3回振るのが最も効率がよいです。
2進数と見れば計算も特に要らず、扱いやすいですね。
2019/7/18(木) 午前 5:35