La paradoja del cumpleaños

Original Article:http://www.efgh.com/math/birthday.htm

Envíe sus comentarios por correo electrónico, correcciones y adiciones al webmaster a pje@efgh.com.

Un problema favorito en los cursos de estadística y probabilidad primaria es el problema del cumpleaños: ¿Cuál es la probabilidad de que al menos dos de las N personas elegidas al azar tengan el mismo cumpleaños? (Mismo mes y día, pero no necesariamente el mismo año).

Una segunda parte del problema: ¿Cuán grande debe ser N para que la probabilidad sea mayor al 50 por ciento? La respuesta es 23, que afecta a la mayoría de las personas como irracionalmente pequeña. Por esta razón, el problema a menudo se llama la paradoja del cumpleaños. Algunos Sharpies recomiendan apostar, incluso con dinero, que hay cumpleaños duplicados entre cualquier grupo de 23 o más personas. Presumiblemente, hay algunos tontos mal informados que aceptarán la apuesta.

The problem is usually simplified by assuming two things:

  1. Nadie nació el 29 de febrero.
  2. Los cumpleaños de las personas se distribuyen por igual durante los otros 365 días del año.

Una de las primeras cosas que se debe tener en cuenta sobre este problema es que es mucho más fácil resolver el problema complementario: ¿Cuál es la probabilidad de que N personas elegidas al azar tengan todos los cumpleaños diferentes? Podemos escribir esto como una función recursiva:

double different_birthdays(int n)
{
  return n == 1 ? 1.0 : different_birthdays(n-1) * (365.0-(n-1))/365.0;
}

Obviamente, para N = 1 la probabilidad es 1. Para N> 1, la probabilidad es el producto de dos probabilidades:

  1. Que las primeras personas N-1 tengan todos los cumpleaños diferentes.
  2. Que la N-ésima persona tenga un cumpleaños diferente de cualquiera de los primeros N-1.

Un programa para mostrar las probabilidades es algo como esto:

void main(void)
{
  int n;
  for (n = 1; n <= 365; n++)
    printf("%3d: %e\n", n, 1.0-different_birthdays(n));
}

El resultado es algo como esto:

  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
      ***

La probabilidad de que al menos dos de N personas tengan el mismo cumpleaños se eleva por encima de 0.5 cuando N = 23.

PERO ¿QUÉ PASA CON LEAP YEAR?

El problema original se puede resolver con una regla de cálculo, que es exactamente lo que hice cuando lo escuché por primera vez hace muchos años.

Si agregamos el 29 de febrero a la mezcla, se vuelve considerablemente más complicado. En este caso, hacemos algunas suposiciones adicionales:

 

  1. Igual número de personas nacen en días que no sean el 29 de febrero.
  2. La cantidad de personas nacidas el 29 de febrero es un cuarto del número de personas nacidas en cualquier otro día.

Por lo tanto, la probabilidad de que una persona seleccionada al azar haya nacido el 29 de febrero es de 0.25 / 365.25, y la probabilidad de que una persona elegida al azar haya nacido en otro día específico es 1 / 365.25.

La probabilidad de que N personas, posiblemente incluyendo uno nacido el 29 de febrero, tenga cumpleaños distintos es la suma de dos probabilidades:

 

  1. Que las N personas nacieron en N días diferentes al 29 de febrero.Que las N personas nacieron en N días diferentes, e incluyen a una persona que nació el 29 de febrero.

    Las probabilidades se agregan porque los dos casos son mutuamente excluyentes.

    Ahora cada probabilidad se puede expresar recursivamente:

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;
}

Un programa para mostrar las probabilidades es algo como esto:

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));
}

El resultado es algo como esto:

  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
      ***

Como se esperaba, las probabilidades son ligeramente menores, porque hay una menor probabilidad de coincidir cumpleaños cuando hay más cumpleaños posibles. Pero el número más pequeño con probabilidad mayor a 0.5 sigue siendo 23.

Por supuesto, un purista matemático puede argumentar que los años bisiestos no siempre vienen cada cuatro años, por lo que los cálculos necesitan modificaciones adicionales. Sin embargo, el último año cuatrienal que no fue un año bisiesto fue 1900, y el siguiente será 2100. El número de personas que viven ahora que nacieron en 1900 es tan pequeño que creo que nuestra aproximación es válida para todos los propósitos prácticos. Pero puede hacer las modificaciones necesarias si lo desea.

La paradoja del cumpleaños tiene implicaciones más allá del mundo de las apuestas de salón. Una técnica estándar en el almacenamiento de datos es asignar a cada elemento un número llamado código hash. El artículo se almacena en un contenedor correspondiente a su código hash. Esto acelera la recuperación porque solo debe buscarse un solo contenedor. La paradoja del cumpleaños muestra que la probabilidad de que dos o más elementos terminen en el mismo contenedor es alta, incluso si el número de elementos es considerablemente menor que el número de contenedores. Por lo tanto, se requiere un manejo eficiente de contenedores que contengan dos o más artículos en todos los casos.

 

Leave a Reply

Your email address will not be published. Required fields are marked *