今回この問題を考えたのは自分が数学に興味を持った理由の中の一つが小学校の担任が話していたクラスに同じ誕生日のペアが存在する確率であったことや手そして電卓で計算するのが困難だからです.今回は1年が365日でn(<366)人いるときにその中に同じ誕生日である二人組が存在する確率を求めます.
n人いるときにその中に同じ誕生日である二人組が存在する確率を求めます.
誕生日がどの日になる確率も1/365とし、余事象を使って考えると誕生日がバラバラになる確率は,
(二人目が一人目と違う確率)\(\times\)(三人目も違う確率)\(\times \cdots \times\)(\(n\)人も違う確率)で求められるので \[\frac{364}{365}\times\frac{363}{365}\times\frac{362}{365}\times \cdots\times\frac{365-(n-1)}{365}=\frac{_{364}P_{n-1}}{365^{n-1}}\]
となる.よって求める確率は \[1-\frac{_{365}P_n}{{365}^n}\]
n(\(\le365\))に対して同じ誕生日である二人組が存在する確率を求める関数を作ると
birth <- function(n){
ans <- 1
for(i in 1:n){
ans<-ans*(365-i+1)/365
}
return((1-ans)*100)
}
となります.ここで実際に\(n=2\)の場合を考えてみると
birth(2)
## [1] 0.2739726
となります.では50%を超えるのは何人集まったときか調べる.50%を超えたら点の色が50%を超えるようにグラフを作ると
x<-2:100
y<-NULL
color<-NULL
for(i in x){
y<-c(y,birth(i))
if(birth(i)<50){color <-c(color,"black")}
else{color <-c(color,"red")}
}
plot(x,y,col=color,xlab="n",ylab = "%")
このようになり23人以上いれば50%以上の確率で二人組が存在することがわかる.
先ほどまでと同じように余事象を用いて何人集まれば3人組が存在する確率が50%を超えるか検証する.3人組の場合かなり式が複雑になる
今回も余事象を考えるのだがまず二人組がどれ位いるか考える またnが偶数の場合と奇数の場合で若干違うまずnが偶数の場合で考える
\((1)\)二人組が一個存在する場合
このとき\(n\)人を誕生日別のグループに分類すると\((n-1)\)個のグループに分類される.二人組の選び方が\(_nC_2\)通りで\((n-1)\)グループの選び方が\(_{365}P_{(n-1)}\)通り. よってこのようになる確率は\(: \ \ {}_nC_2 \frac{_{365}P_{n-1}}{{365}^{n}}\)
\((2)\)二人組が二個存在する場合
このとき\(n\)人を誕生日別のグループに分類すると\((n-2)\)個のグループに分類される.二人組の選び方が\(_nC_2\)\(\ _{n-2}C_2\)通りで\((n-2)\)グループの選び方が\(_{365}P_{(n-2)}\)通り. よってこのようになる確率は\(: \ \ \frac{{}_nC_2 \ _{n-2}C_2}{2!} \frac{_{365}P_{n-2}}{{365}^{n}}\)
\[ \vdots \]
\((\)i\()\)二人組が\(i\)個存在する場合
このとき\(n\)人を誕生日別のグループに分類すると\((n-i)\)個のグループに分類される.二人組の選び方が\(_nC_2 \ _{n-2}C_2 \cdots _{n-2(i-1)}C_2\)通りで\((n-i)\)グループの選び方が\(_{365}P_{(n-i)}\)通り. よってこのようになる確率は\(: \ \ \frac{_nC_2 \ _{n-2}C_2 \cdots _{n-2(i-1)}C_2}{i!} \frac{_{365}P_{(n-i)}}{{365}^{n}}\)
\({}\)
この操作を二人組が\(n/2\)個存在する場合まで繰り返す
\[ \vdots \]
\((\)n/2\()\) 二人組が\(n/2\)個存在する場合
このとき\(n\)人を誕生日別のグループに分類すると\((n-n/2)\)個のグループに分類される.二人組の選び方が\(_nC_2 \ _{n-2}C_2 \cdots _{n-2(n/2-1)}C_2\)通りで\((n-n/2)\)グループの選び方が\(_{365}P_{(n-n/2)}\)通り. よってこのようになる確率は\(: \ \ \frac{_nC_2 \ _{n-2}C_2 \cdots _{2}C_2}{(n/2)!} \frac{_{365}P_{(n-n/2)}}{{365}^{n}}\)
この(1)から(n/2)までが\(n=\)偶数 の時の二人組がどれ位いるかで,\(n=\)奇数 の場合は(1)~から((n-1)/2)まで上の操作をすればよい
Rで書くと下のようになる
rest3<-function(n){
if(n %% 2== 0){
z<-numeric(n/2)+prod((366-n):365)/(365^n)
for(i in seq(1,n/2,by=1)){
z[seq(i,n/2,by=1)]<-z[i]*choose(n-2*i+2,2)/i/(365-(n-i))
}
}else{
z<-numeric(n/2)+prod((366-n):365)/(365^n)
for(i in seq(1,(n-1)/2,by=1)){
z[seq(i,(n-1)/2,by=1)]<-z[i]*choose(n-2*i+2,2)/i/(365-(n-i))
}
}
return(sum(z))
}
これに一番最初に求めたn人全員の誕生日がバラバラになる事象を加えると三人組の余事象になる.よってRはこのようになる.
rest3<-function(n){
if(n %% 2== 0){
z<-numeric(n/2)+prod((366-n):365)/(365^n)
for(i in seq(1,n/2,by=1)){
z[seq(i,n/2,by=1)]<-z[i]*choose(n-2*i+2,2)/i/(365-(n-i))
}
}else{
z<-numeric(n/2)+prod((366-n):365)/(365^n)
for(i in seq(1,(n-1)/2,by=1)){
z[seq(i,(n-1)/2,by=1)]<-z[i]*choose(n-2*i+2,2)/i/(365-(n-i))
}
}
return(sum(z))
}
birth<-function(n){
ans <- 1
for(i in 1:n){
ans<-ans*(365-i+1)/365
}
return((1-ans)*100)
}
birth3 <-function(n){
a<-birth(n)-rest3(n)*100
return(a)
}
関数\(birth3\)を使って50%を超えたら点の色が変わるようにグラフを作ると
x<-3:100
y<-NULL
color<-NULL
for(i in x){
y<-c(y,birth3(i))
if(birth3(i)<50){color <-c(color,"black")}
else{color <-c(color,"red")}
}
plot(x,y,col=color,ylim=c(0,100),xlab="n",ylab = "%")
上のグラフから三人組が存在する確率が50%を超えるのはn=88である.
二人組の場合と三人組の場合でこれほどまでに難易度が変わるとは思わなかったがRを使って手だけでは計算しきれない計算もできた.4人組や5人組もそのうちに挑戦したい.