前回、ガシャポンのセットを全部そろえるのに何回かかるか、というのを算出するのに、仮に70%と置きました。たとえば4種類のセットの場合、9回ガチャガチャすれば70%の確率で4種類がそろう。5種類のセットの場合、11回やっても70%にならない。いまのところわたしの計算能力ではこれが限度ですが、しばらく考えます。
さて、統計学で有意ということばがあって、薬が効くか効かないかなど、従来使われている薬と比べて有効だった治験結果を偶然でないことを確率論的にあらわします。そのとき0.05を使うのが普通なので、その考え方とガシャポンのフルコンプリートと考え合わせると、上記の70%が95%ということではないのか、と思いつきました。そこでプログラムは同じで95%を超えるまでやってみました。
結果、2種類だと6回で95%を超えます。3種類だと11回、4種類だと16回取れば、ほぼ全種類そろう。無論それ以上、100回やってもそろわない人はいるだろうけど、その確率は5%以下である。
うむ、だからなに? と言われそうですが、なんとなく筋道が見えてきたような気がしないでもない。つまり、質問は次のようになります。
質問:6種類のガシャポンをフルコンプリートするのに普通何回かかるか? (ここで普通というのは95%以上の確率でそろうことをさす。)
つづく
追記:20080422
お待たせしました。解決!
6種類のガシャポンを95%の確率でフルコンプリートするには、27回かかります。ガシャポンが5種類だと21回。意外に天文学的数字にはならないということがわかりました。
まず、プログラムを走らせた結果。
ruby fullcomplete.rb 10, 5.0: 0.5225472 11, 5.0: 0.606363648 12, 5.0: 0.678002688 13, 5.0: 0.738115682304 14, 5.0: 0.787907248128 15, 5.0: 0.8287692521472 16, 5.0: 0.8620793266176 17, 5.0: 0.889100957279847 18, 5.0: 0.910942919825818 19, 5.0: 0.928551490824438 20, 5.0: 0.942719430662554 21, 5.0: 0.954102465341675 22, 5.0: 0.963238115964239 23, 5.0: 0.970564175467496 24, 5.0: 0.976435548584285 25, 5.0: 0.981138963230652 25, 6.0: 0.937697859829515 26, 6.0: 0.94798274321112 27, 6.0: 0.956586381800654 28, 6.0: 0.96377803213894 29, 6.0: 0.96978571670773 30, 6.0: 0.97480188640086
プログラムは前回書いたYahoo知恵袋のベストアンサーのアルゴリズムを使いました。
#! /usr/bin/env ruby # fullcomplete.rb # this program calculates the times you need to collect full complete set of gashapon def gasha(n, m, num_var) # n is the number of times of trials you put money and turn the machine # m is the number you want to collect # num_var is the number of full items if n < m return 0 elsif n == 1 && m == 1 return 1 elsif m == 1 return (1 / num_var) ** ( n - 1) else return (m / num_var) * gasha(n -1, m, num_var) + ((num_var.to_i + 1 - m) / num_var) * gasha(n - 1, m - 1, num_var) end end num_var = 5.0 for i in (10..25) do print "#{i}, #{num_var}: " p gasha(i, num_var.to_i, num_var) end puts num_var=6.0 for i in (25..30) do print "#{i}, #{num_var}: " p gasha(i, num_var.to_i, num_var) end