■誕生日のトリック

 「もうすぐ犯行記念日」(講談社,日本推理作家協会編)の序文である.
『記念日をめぐる不思議なクイズがある.何の記念日でも構わないけど,個人に関わる一番ポピュラーな記念日ということなら,誕生日だろう.
 
 もし,ここに30人の構成員からなる集団があって,この中に誕生日の一致するペアが一組以上いるかどうか? このギャンブルをやるとしたら,あなたはどちらに賭けるだろう.誕生日なんてめったに一致するものじゃないよなあ.まして構成員はたった30人である.一も二もなくペアは一組もいないほうに賭けるのではあるまいか?
 
 だが,お立ち会い.これがそうでもない.特定の人を選び,その人と誰かの誕生日が一致する確率は確かに小さい.そう,1/365である.30人の集団の中で一致する確率はすこぶる小さいけど,このことと「30人の中の誰かと誰かが一致する」こととはまるで違う.
 
 確率計算はややこしくて,文筆家に向かないから省略するけど,疑う人は数学に堪能な人に尋ねて下さい.構成員が23人と越えるあたりで一致する確率が50%を越える.30人もいようものなら70%位の確率になる.まして,40人,50人ならばさらに高い.構成員3〜40人の職場を想定したとき,誕生日の一致する確率はまずいるものと考えたほうが妥当である.』
===================================
 
 このクイズは数多くの本で取り扱われた有名なものであるが,確かに,少なくとも2人同じ誕生日の人がいる確率の大きさには驚かされる.これを読んだ植木嬢(職場の同僚)が早速小生に疑問を投げかけてきた.ひとつには,この数字が女の直感に反するというものであり,もうひとつには,実際の計算方法を見るまではどうしても合点がいかないというものであった.
 
 この序文には,おしつけがましく結果だけを書いてあるが,実際問題として,確率計算になれていないと,式の誘導は難しいだろう.とりあえず,信じるものは救われる.ホレ信じなさい.というわけであるが,天下り式で我慢できないかたは,以下の説明を参照しながら誘導を試みられたい.
===================================
 
 このクイズのトリックは,2人が同じ誕生日である確率は,1/365と小さいけれども,30人もいれば,30人の中から2人を選び出す組合せ数(30,2)は,30×29/2=435通りもあることである.これであれば,同じ誕生日に生まれたペア数の平均値は435/365となるから,一組以上のペアができると期待できるのである.一般に,1年はd日とし,構成員をn人とするとペア数の期待値はn(n−1)/2dになっていることに注意されたい.
 
 式を誘導するため,次のような定式化をおこなってみよう.
1番目の人と2番目の人が異なる誕生日である確率は1−1/dである.
また,3番目の人が1番と2番の人と誕生日が異なる確率は,2番目の人は1番目の人と異なる日に生まれたとして,1−2/dである.
したがって,n人全員が異なる誕生日である確率pnは,
  pn=(1−1/d)×(1−2/d)×・・・×(1−(n−1)/d)
となる.求めたい確率pは少なくとも2人同じ誕生日の人がいる確率であるから,
  p=1−pn
 
 電卓を使ったとしても,この計算はわずらわしいので,BASICプログラムを示しておく.
 
1000 '
1010 ' *** solve birthday problem ***
1020 '
1030 DEFDBL A-H,L-Z
1040 D=365
1050 '
1060 INPUT "n=";N
1070 DIM PN(N)
1080 '
1090 GOSUB *PAIR
1100 '
1110 '
1120 PRINT "p=";P
1130 PRINT "q=";Q
1140 '
1150 END
1160 '
1170 *PAIR:
1180 PN=1
1190 FOR I=1 TO N-1
1200  PN=PN*(1-I/D)
1210 NEXT I
1220 P=1-PN
1230 '
1240 C=N*(N-1)/2
1250 Q=1-EXP(-C/D)
1260 RETURN
 
 d=365について,n=23では求める確率は0.5073,n=30では0.71,n=40では0.89にもなる.したがって,n=30〜40だったら少なくとも2人は同じ誕生日であるほうに賭けるほうが賢明であることがわかる.
 
 また,nがdに比べて小さければ,テイラー展開より
  1−k/d〜exp(−k/d)
  Π(1−k/d)〜exp(−Σk/d)
Σk=n(n−1)/2であるから,
  p〜1−exp(−n(n−1)/2d)
となる.
 
 ここで,先ほど説明したペア数の期待値n(n−1)/2dが再登場しているが,ペア数の分布は複雑であっても,その平均は単純であり,この近似計算はペア数の分布を平均n(n−1)/2dのポアソン分布で近似したものと考えることができる.電卓計算にはポアソン近似のほうが向いていて,たとえば,n=23,d=365であれば,p〜0.5000が得られ,真の値0.5073のよい近似となっていることが理解される.
 
 
n    20  23  30  40  50
正確な値 0.4114 0.5073 0.7063 0.8912 0.9704
近似値  0.4058 0.5000 0.6963 0.8820 0.9651
 
 
===================================
 
 医療関係者の中には数学の専門家も感心するほど数学に堪能な方もおられるが,そのような方は多くはないし,医療と研究に追われて,このような問題を吟味する暇もなく,よくわからないまま過ごすことのほうが普通であろう.残念ながら女の直感は外れてしまったが,ともあれ,瑣末な問題にも興味を示した植木嬢の好奇心は見習いたいものである.
 
 これでQ&Aが済み,やっと肩の荷がおりたといいたいところであるが,小生の悪い癖で,問題を拡張したり,新しい計算方法をひねりだすまでは,時のたつのも忘れ,考え始めるとやめられなくなってしまう.まったく損な性分であるし,病気一歩手前の凝り性といわれても仕方ないとさえと思うが,次に,少なくとも1組の同じ誕生日の3人がいる確率を考えてみよう.
===================================
 
 トリオの場合は,正確な確率を求めることは難しいので,近似計算のほうを最初に掲げておく.ペアの場合の議論と同様,
3人の組合せ数(n,3)はn(n−1)(n−2)/6,
3人が同じ誕生日であることは確率1/d2で起きるから,その期待値は
  n(n−1)(n−2)/6d2
となる.したがって,平均n(n−1)(n−2)/6d2のポアソン分布で近似すると,
  p〜1−exp(−n(n−1)(n−2)/6d2)
 
 この近似によれば,同じ誕生日のトリオがいる確率を1/2以上にするためには84人が必要であるが,正確には最低でも88人は必要である.以下,正確な値を得る方法を示すが易しくはない.発想の転換が必要とされる.
 
 n人の中に同じ誕生日のトリオがいない確率pnは,同じ誕生日のペアがk組(k=0,・・・,n/2)いるが,トリオがいない確率pn,kの和となる.
  pn=Σpn,k
 多項分布により,
  pn,k=Σn!/i1!・・・id!(1/d)^n
であるが,分数の分母のiは2の個数がk,1の個数がn−2k,残りが0であるから,
  pn,k=(d,k)(d−k,n−2k)n!/2^k(1/d)^n
 このことから,漸化式
  pn,k=(n−2k+2)(n−2k+1)/2k(d−n+k)pn,k-1
を得ることができる.求める確率pは1−pnである.
 
 BASICプログラムとその計算結果を示そう.
 
1000 '
1010 ' *** solve birthday problem ***
1020 '
1030 DEFDBL A-H,L-Z
1040 D=365
1050 '
1060 INPUT "n=";N
1070 DIM PN(N)
1080 '
1090 GOSUB *PAIR
1100 GOSUB *TRIO
1110 '
1120 PRINT "p=";P
1130 PRINT "q=";Q
1140 PRINT "r=";R
1150 END
1160 '
1170 *PAIR:
1180 PN=1
1190 FOR I=1 TO N-1
1200  PN=PN*(1-I/D)
1210 NEXT I
1220 P=1-PN
1230 '
1240 C=N*(N-1)/2
1250 Q=1-EXP(-C/D)
1260 RETURN
1270 '
1280 *TRIO:
1290 IF PN=0 THEN GOSUB *TRIO.0:GOTO 1350
1300 PN(0)=PN
1310 FOR J=1 TO INT(N/2)
1320  PN(J)=PN(J-1)*(N-2*J+2)*(N-2*J+1)/2/J/(D-N+J)
1330  IF PN(J)<0 THEN PN(J)=0
1340 NEXT J
1350 '
1360 PN=0
1370 FOR J=0 TO INT(N/2)
1380  PN=PN+PN(J)
1390 NEXT J
1400 P=1-PN
1410 '
1420 C=N*(N-1)*(N-2)/6
1430 Q=1-EXP(-C/D/D)
1440 '
1450 W0=(1-1/D)^N
1460 W1=N/D*(1-1/D)^(N-1)
1470 W2=N*(N-1)/2/D/D*(1-1/D)^(N-2)
1480 WW=D*(1-W0-W1-W2)
1490 R=1-EXP(-WW)
1500 RETURN
1510 '
1520 *TRIO.0:
1530 FFF=D:GOSUB *FACTORIAL:L1=GGG
1540 FFF=N:GOSUB *FACTORIAL:L2=GGG
1550 L7=N*LOG(D)
1560 '
1570 M=INT(N/2)
1580 MAX=0:IF MAX<(N-D) THEN MAX=N-D
1590 '
1600 FOR J=0 TO INT(N/2)
1610  GOSUB *TRIO.SUB
1620  IF PN(J)<>0 AND J>=MAX THEN M=J:GOTO 1640
1630 NEXT J
1640 '
1650 FOR J=M+1 TO INT(N/2)
1660  PN(J)=PN(J-1)*(N-2*J+2)*(N-2*J+1)/2/J/(D-N+J)
1670  IF PN(J)<0 THEN PN(J)=0
1680 NEXT J
1690 RETURN
1700 '
1710 *TRIO.SUB:
1720 IF N-2*J<0 THEN 1800
1730 IF D-N+J<0 THEN 1800
1740 FFF=J  :GOSUB *FACTORIAL:L3=GGG
1750 FFF=N-2*J:GOSUB *FACTORIAL:L4=GGG
1760 FFF=D-N+J:GOSUB *FACTORIAL:L5=GGG
1770 L6=J*LOG(2)
1780 LP=L1+L2-L3-L4-L5-L6-L7
1790 PN(J)=EXP(LP)
1800 RETURN
1810 '
1820 ' ** 階乗計算 **
1830 '
1840 *FACTORIAL:
1850 IF FFF=0 THEN GGG=0:RETURN
1860 GGG=0
1870 FOR I=1 TO FFF
1880 GGG=GGG+LOG(I)
1890 NEXT I
1900 RETURN
 
 
n    60  80  88  100 120
正確な値 0.2072 0.4182 0.5111 0.6459 0.8280
近似値1 0.2265 0.4603 0.5612 0.7029 0.8785
近似値2 0.2043 0.4095 0.4996 0.6305 0.8099
 
 
 前述の近似値(1)
  p〜1−exp(−n(n−1)(n−2)/6d2)
の誤差は小さくなく,精度に問題がある.近似値(2)はポアソン近似の改良版であるが,近似値(1)より真の値に接近していることがわかる.その求め方は説明しなかったが,演習問題として残しておくことにする.