Source: http://www.efgh.com/math/birthday.htm
Филип Ј. Ерделски/Philip J. Erdelsky
4 јули 2001 година
Омилен проблем на елементарните курсеви за веројатност и статистика е Роденденскиот проблем: Која е веројатноста најмалку две од N случајно избрани луѓе да имаат ист роденден? (Ист месец и ден, но не мора истата година.)
Втор дел од проблемот: Колку треба да биде N за да веројатноста е поголема од 50 проценти? Одговорот е 23, што ги чини повеќето луѓе како неразумно мали. Поради оваа причина, проблемот често се нарекува роденденски парадокс. Некои остри луѓе препорачуваат да се обложуваат, дури и со пари, дека има дупликат родендени меѓу која било група од 23 или повеќе луѓе. Веројатно, има некои лошо информирани пијавки кои ќе го прифатат облогот.
Проблемот обично се поедноставува со претпоставка за две работи:
- Никој не е роден на 29 февруари.
- Родендените на луѓето се подеднакво распределени во останатите 365 дена од годината.
Една од првите работи што треба да се забележи за овој проблем е дека е многу полесно да се реши комплементарниот проблем: Која е веројатноста N случајно избрани луѓе да имаат различни родендени? Можеме да го напишеме ова како рекурзивна функција:
double different_birthdays(int n) { return n == 1 ? 1.0 : different_birthdays(n-1) * (365.0-(n-1))/365.0; }
Очигледно, за N = 1 веројатноста е 1. За N>1, веројатноста е производ на две веројатности:
- Дека првите N-1 луѓе имаат различни родендени.
- Дека N-тото лице има роденден различен од кој било од првите N-1.
Програма за прикажување на веројатностите оди вака:
void main(void) { int n; for (n = 1; n <= 365; n++) printf("%3d: %e\n", n, 1.0-different_birthdays(n)); }
Резултатот е нешто вака:
1: 0.000000e+00 2: 2.739726e-03 3: 8.204166e-03 4: 1.635591e-02 5: 2.713557e-02 *** 20: 4.114384e-01 21: 4.436883e-01 22: 4.756953e-01 23: 5.072972e-01 24: 5.383443e-01 25: 5.686997e-01 ***
Веројатноста дека најмалку две од N луѓе имаат ист роденден се зголемува над 0,5 кога N=23.
НО ШТО СО ПРЕЗЕДНАТА ГОДИНА?
Оригиналниот проблем може да се реши со правило за слајд, што е токму она што го направив кога првпат го слушнав пред многу, многу години.
Ако го додадеме 29 февруари на мешавината, станува значително покомплицирано. Во овој случај, правиме некои дополнителни претпоставки:
- Еднаков број луѓе се родени во денови различни од 29 февруари.
- Бројот на луѓе родени на 29 февруари е една четвртина од бројот на луѓе родени во кој било друг ден.
Оттука, веројатноста дека случајно избрано лице е родено на 29 февруари е 0,25/365,25, а веројатноста дека случајно избрано лице е родено во друг наведен ден е 1/365,25.
Веројатноста дека N лица, можеби вклучувајќи го и оној роден на 29 февруари, имаат различни родендени е збир од две веројатности:
- Дека N лицата се родени во N различни денови освен на 29 февруари.
- Дека N лицата се родени во N различни денови, а вклучуваат и едно лице родено на 29 февруари.
Веројатните се додаваат бидејќи двата случаи меѓусебно се исклучуваат.
Сега секоја веројатност може да се изрази рекурзивно:
double different_birthdays_excluding_Feb_29(int n) { return n == 1 ? 365.0/365.25 : different_birthdays_excluding_Feb_29(n-1) * (365.0-(n-1)) / 365.25; } double different_birthdays_including_Feb_29(int n) { return n == 1 ? 0.25 / 365.25 : different_birthdays_including_Feb_29(n-1) * (365.0-(n-2)) / 365.25 + different_birthdays_excluding_Feb_29(n-1) * 0.25 / 365.25; }
Програма за прикажување на веројатностите оди отприлика вака:
void main(void) { int n; for (n = 1; n <= 366; n++) printf("%3d: %e\n", n, 1.0-different_birthdays_excluding_Feb_29(n) - different_birthdays_including_Feb_29(n)); }
Резултатот е нешто вака:
1: -8.348357e-18 2: 2.736445e-03 3: 8.194354e-03 4: 1.633640e-02 5: 2.710333e-02 *** 20: 4.110536e-01 21: 4.432853e-01 22: 4.752764e-01 23: 5.068650e-01 24: 5.379013e-01 25: 5.682487e-01 ***
Очекувано, веројатностите се нешто помали, бидејќи има помала веројатност да се поклопат родендените кога има повеќе можни родендени. Но, најмалиот број со веројатност поголема од 0,5 е сепак 23.
Се разбира, математичкиот прочистувач може да тврди дека престапните години не секогаш доаѓаат на секои четири години, така што пресметките бараат дополнителни измени. Меѓутоа, последната четиригодишна година која не беше престапна беше 1900 година, а следната ќе биде 2100. Бројот на луѓе кои сега живеат, а кои се родени во 1900 година е толку мал што мислам дека нашето приближување важи за сите практични цели. Но, добредојдени сте да ги направите потребните измени доколку сакате.
Роденденскиот парадокс има импликации надвор од светот на обложувањето во салони. Стандардна техника во складирањето податоци е да се додели на секоја ставка број наречен хаш-код. Ставката потоа се складира во корпа што одговара на нејзиниот хаш-код. Ова го забрзува пронаоѓањето бидејќи мора да се пребарува само една корпа. Роденденскиот парадокс покажува дека веројатноста два или повеќе предмети да завршат во иста корпа е голема дури и ако бројот на предмети е значително помал од бројот на канти. Оттука, во сите случаи е потребно ефикасно ракување со канти кои содржат два или повеќе предмети.