皆さんこんにちは
非常にどうでもいいことなのですが、たまに飲みの席とかで数学的なウンチクを言ってみたくなることってありますよね(?)。
そんなウンチクの中で、ワタシの頭にこびりついているのが、高校時代に数学の教員が言っていた、「これくらいの規模のクラス(36人だったか)だと、誕生日が同じっていうペアが一つはある」って言っていて、実際に誕生日を言っていったら、瞬時に同じ誕生日のペアが見つかったって言うことがあって、なんでやろうみたいな感じになりました。
そんな懐かしいウンチクを検証していきましょう。
問題設定
「36人規模のクラスに一組は誕生日が同じ人がいる」という命題が正しいのか否か、というのが今回の問題設定です。
これは余事象の問題に落とし込むと簡単で、つまるところ、「36人規模のクラスの全員の誕生日が違う」ことの余事象を考えればよいということです。
式にするとこんな感じです。
P(一組は誕生日が同じ人がいる) = 1- P(全員の誕生日が違う)
これが1に近ければ命題は正しいということになります。
今回は細かいことを抜きにするため、1年は365日で計算します。
検証コード
数式の導出
次に検証していきましょう。
まず、クラス全員の誕生日が違う確率を出してみます。ここでは漸化式を使った導出が楽でしょう。
クラス人数がn人のときのクラス全員の誕生日が違う確率を$p(n)$とします。
まず、クラスが一人だけのときはどんなに頑張ってもペアはできないので、$p(1) = 1$となります。
次に、そのクラスに一人追加したとして、$p(2)$がどうなるかです。当然、二人目は一人目とは違う誕生日である必要があるので、一年365日の中から、一人目とは違う誕生日である確率、つまり、$364/365 = 0.997 = p(2)$となるわけです。
更に一人加えてクラスを3人にすると、$p(3) = \frac{363}{365} p(2)$のようになります。
これを繰り返すと、漸化式として
p(n) = \frac{365 - (n-1) }{365}p(n-1)
これは展開すると
p(n) = \frac{365}{365} \frac{364}{365} ... \frac{365-(n-1)}{365} = \frac{{}_{365} \mathrm{P} _{n} }{ 365^n}
となります。
割とあっさりしています。
なお、人数が365を超えると、必ず一人は誕生日がかぶるので、これ以上は考える必要はないです。
コードにする
我々の共通言語はコードですので、これをコードに落としましょう。
例によってPHP使いますが、コード自体はエラい簡単です。
<?php
$P_birthday = [];
// 全員の誕生日が違う確率を人数ごとに算出
$P_birthday[1] = 1;
for ($i = 2; $i !== 366; $i++) {
$P_birthday[$i] = (366 - $i) * $P_birthday[$i - 1] / 365;
}
// クラス人数ごとに一組は誕生日が同じペアが入る確率を出力
for ($j = 1; $j !== 366; $j++) {
$ret = 1 - $P_birthday[$j];
echo "$j\t$ret\n";
}
コードはとても単純です。
これを実行すると、
1 0
2 0.0027397260273972
3 0.0082041658847815
4 0.01635591246655
5 0.027135573699794
6 0.040462483649112
7 0.056235703095976
8 0.074335292351669
9 0.094623833889167
10 0.11694817771108
11 0.14114137832173
12 0.16702478883806
13 0.19441027523243
14 0.22310251200497
こんな感じの数値の羅列が得られます。
これを見ていくと、36人のときは、$0.8321$となっていて、およそ$83%$の確率で誕生日が同じペアが存在するということになります。
これをグラフ化するとこんな感じです。
40人のクラスだと$89%$で誕生日が同じペアが存在し、50人規模であれば$97%$で同じ誕生日のペアがいます。
100人を超えると、$99.99...%$みたいに、S3の可用性みたいな数値が出てきます。
まとめ
突発的に思い出したので、検証したものを書きました。
それほど学びの深い記事ではないのですが、この現象になにか名前があるのかしらと思ったら「誕生日のパラドクス」なんて大層な名前がついているのね。
というわけで、適当にドヤるのにおすすめですよと言っておいて、今回はこの辺にしておきます。