日替わり NAT’s Champloo

音楽やライブ(HM/HRやボカロなど)、旅行など、ごちゃっとした日記

ポスター44種類コンプリート問題に挑戦してみた

特典をゲットするには最低でも同じCDを44枚購入しなければならないうえ、ポスターは選べないことから44種類の違ったポスターをすべてをそろえるのは至難の業とみられ…

http://headlines.yahoo.co.jp/hl?a=20080228-00000956-san-ent

CD1枚購入のたびに、ポスターが44種類のうち1種類ランダムに得られるとする。
Q1. 44種類コンプリートするには、平均何枚のCDを購入する必要があるか。
Q2. 44種類コンプリートした人はその時点で何種類のポスターを持っているか。

http://d.hatena.ne.jp/textfile/20080229/probability

話題になっているアイドルの方には興味はないけれど、確率の問題としては面白そうなので挑戦してみた。高校時代は、成績はともかくとして、数学の確率が好きだったので、昔使った知識を思い出しながら考えてみた。
Q1は期待値の問題ととらえて、まずはCDをn枚購入して44種類コンプリートする確率を求めることにした。
いきなり44種類コンプリートの確率は難しいので、ポスターが3種類ある場合で考えてみると、3枚でコンプリートする確率が 3!/3^3 というのはすぐに分かった。4枚や5枚でコンプリートする場合の樹形図を書いてみて、ポスターがk種類の場合にn枚でコンプリートする確率の計算式を書いてみるが、ポスターが4種類ある場合の樹形図を書いて確かめると、どうも間違っている。
色々試行錯誤してみるが、なかなか正しそうな計算式にたどりつけない。ヒントを求めて、www.textfile.orgのエントリのブックマークコメントを見てみると、こういう「おまけをk種類コンプリートするには平均n個買う必要があるか」というような問題は、「食玩問題」と名付けられて、以前から色んな人が挑戦した問題であるらしい。ブックマークコメントで紹介しているリンク先を見てみると、なかなか一筋縄ではいかない難しい問題であることが分かった。

難問だと知って、計算式を求める気力が一気に失せてしまったので(苦笑)、食玩問題でもやっている人がいたこともあり、コンピュータでシミュレーションして平均枚数を求めることにした。CDを購入するたびに1/44の確率でいずれかのポスターが得られるとして、44種類コンプリートできるまでの購入枚数をRubyプログラム上でシミュレーションし、これを一万回*1繰り返して、平均枚数を求めてみることにした。
Rubyプログラムは、こんな感じ。

def buy
  Integer(rand(44)) + 1
end

def complete?(posters)
  (1..44).each do |i|
    return false unless posters.include? i
  end
  true
end

def try
  posters = []
  until complete?(posters)
    poster = buy
    print "#{buy} "
    posters << poster
  end
  puts "=> #{posters.size}"
  posters.size
end

n = 10000
total = 0
n.times do
  total += try
end
puts "平均 #{total / n}"

出力はこんな感じ。

6 6 12 34 10 7 18 27 6 11 9 35 6 25 24 8 43 25 35 31 24 8 25 20 8 33 1 26 1 22 39 4 30 25 41 37 12 24 42 3 17 33 26 43 26 29 11 15 32 12 10 20 43 13 41 30 2 16 30 26 24 27 14 27 22 7 19 43 33 3 24 24 21 17 39 25 8 42 4 7 36 3 11 11 20 34 5 13 35 2 44 38 44 37 15 40 24 39 15 3 33 5 9 41 40 31 25 12 34 3 14 23 13 9 26 24 27 21 9 1 23 7 27 23 32 35 30 12 26 18 21 18 22 14 6 34 34 3 35 44 40 5 12 34 17 16 43 24 29 16 3 42 44 2 9 20 14 34 43 10 2 25 15 41 8 6 43 33 43 37 41 26 29 12 23 41 7 13 16 35 31 33 2 13 17 42 17 25 28 => 189枚
13 1 14 7 7 16 36 38 16 10 26 26 2 3 39 3 27 33 6 15 22 14 22 17 8 11 4 33 13 29 29 32 17 34 22 16 28 25 27 28 27 39 17 40 29 26 30 2 6 4 5 29 33 13 41 18 10 17 41 26 35 26 26 33 21 35 30 37 39 41 2 29 43 33 14 31 36 14 30 38 44 41 37 43 34 16 16 29 14 12 7 28 28 43 31 41 15 32 33 4 38 29 1 18 7 42 15 25 26 36 27 33 20 4 3 23 36 3 21 25 31 6 10 19 32 24 12 4 38 3 16 1 44 18 25 44 23 21 33 20 13 40 28 36 20 23 31 35 43 13 22 14 35 39 17 32 14 35 17 35 27 29 34 3 11 34 5 44 34 18 12 21 10 13 30 34 28 9 => 178枚
(途中省略)
42 18 9 25 22 11 20 11 28 9 12 20 12 21 23 14 11 41 30 19 31 12 35 23 2 44 32 3 25 26 1 8 41 10 17 3 21 39 14 13 19 39 13 39 30 21 18 43 3 32 29 38 28 6 22 28 29 11 14 38 30 18 27 37 30 18 6 10 33 13 31 3 27 18 43 7 23 15 2 12 19 6 13 33 35 34 8 17 7 25 12 15 13 14 39 41 25 11 3 11 25 27 36 7 42 6 27 5 35 23 20 20 10 22 18 5 44 41 17 9 38 43 30 14 3 27 39 25 3 18 14 1 16 35 6 44 24 3 10 1 36 18 31 36 3 9 42 41 24 16 28 9 28 38 34 42 3 26 17 15 25 31 8 19 6 5 33 27 9 23 3 33 4 9 33 22 24 16 11 42 7 35 2 29 17 1 33 32 23 27 4 26 19 22 44 33 17 10 15 33 8 20 13 19 24 36 4 43 30 8 9 33 40 => 213 枚
平均 192 枚

というわけで、Q1の解答は192枚です。
CD1枚千円として、購入金額は19万2千円...って、いくら何でも無茶だろ(笑)。だいたいCD192枚も買うのに、何軒のCDショップで買い占めをすれば良いのやら・・・。

Q2の解答は、単純に考えれば44種類。当たり前すぎて、かえって問題にする意図が分からない。もしかしたら何かひっかけがあるのかな?

*1:なぜ一万回かというと、百回、千回と回数を1桁ずつ大きくして、何度シミュレーションしても平均枚数が変わらなくなったのが、一万回だったから