誕生日が3人以上一緒である確率
Written 2/22/04
2/7は加護・矢島・萩原の誕生日であることが少し話題になったが、 ハロプロ45人の中で3人同じ誕生日がいるってのは珍しいことなのだろうか。
ここではn人の中で誕生日が3人以上一緒である確率を求めてみる。 うるう年はないものとする。
n人の誕生日を任意に選べるとすると、場合の数は、
    365n
 
まったく誕生日がかぶらない場合の数は、
最初の人は任意に選べるから、365、 次の人は、364、 最後の人は、(365 - n + 1)、 ということで場合の数は、
    365…(365-n+1)
 
2人だけ同じ誕生日である場合の数は、
その2人は一人と考えて誕生日の場合の数が、
    365…(365-n+2)
 
なんだけど、この2人を選ぶ場合の数が、
    nC2
 
だから、場合の数はあわせて、
    365…(365-n+2)nC2
 
同じ誕生日2人が2組だけいてあとはバラバラの場合の数は、
やっぱり2人は一人と考えて誕生日の場合の数が、
    365…(365-n+3)
 
なんだけど、この2人を2組選ぶ場合の数が、
    nC2 n-2C2/2!
 
最後の2!は、最初のペアになるか、次のペアになるかがダブってるから。
だから、場合の数はあわせて、
    365…(365-n+3)nC2 n-2C2/2!
 
結局、n人の中でk組だけ誕生日が同じペアがいて、 あとは誕生日が重なっていない確率pkは、
    pk = 365…(365-n+k+1)nC2n-2k+2C2/365n/k!
 
求めるn人の中で3人以上の誕生日が同じである確率pは、
    p = 1 - p0 - … - pm
 
ここでmは、
    m = [n/2]
 
[x]はガウスの記号で、xを超えない最大の整数。
これでいちおう計算式が出てプログラムを組んで結果が出せるわけだが、 計算の効率とプログラムしやすさを考慮して、漸化式を作っておこう。
pkを次のように分解する。
    pk = ambkck
    am = 365…(365-n+m+1)/365n-m
    bk = (365-n+m)…(365-n+k+1)/365m-k
    ck = nC2n-2k+2C2/365k/k!
 
すると、初期値と漸化式が次のように書ける。
    a0 = 1, ak+1 = (365-k)/365ak
    bm = 1, bk-1 = (365-n+k)/365bk
    c0 = 1, ck+1 = n-2kC2/365/(k+1)ck
 
ここから、
    p = 1 - am(b0c0 + … + bmcm)
 
としてpを求める。
人の中で誕生日が3人以上同じである確率は
上のボタンを押してみると結果が出る。
45人の場合、約9.4%か。
検証のためにも擬似乱数を使ったプログラムも作ってみよう。 ランダムにn人の誕生日を選んで3人以上同じかというのを1000回やる。
回繰り返し
人の中で誕生日が3人以上同じである確率は
1000回だとあまりいい精度は出ないが、10%くらいの数字は出る。 本当はもっと回数を多くしたいのだが、なにぶん時間がかかる。 JavaScriptだとこれ以上のスピードアップは望めないのが現状。