
Ayer estube viendo el capítulo de redes y en uno de los comentarios del experto lanza una pregunta. ¿Cuantas personas tienen que haber para que haya un 50% de probabilidad en la que dos personas cumplan los años el mismo día?
http://www.smartplanet.es/redesblog/?p=506
El experto comento que la gente suele decir mucho pero que con 23 personas es suficiente. Esto me extrañó mucho por lo que quise comprobarlo por mi cuenta mediante un algoritmo.
Para ello reiterando la misma operacion de 1 a 30 personas y para cada caso crear números al azar entre 365 y utilizando un HashSet para comprobar si se repite sería suficiente. En menos de 30 líneas se puede comprobar. Dejo aquí el código:
import java.util.HashSet;
public class Main {
public static void main(String arg[]){
for (int personas=1;personas<=30;personas++){
long nRepetidos=0;
for (int n=0;n<1000;n++){
HashSet ht=new HashSet();
boolean bRep=false;
for (int o=0;o<personas && !bRep;o++){
int a=(int)((Math.random())*365);
if (ht.contains(a)){
bRep=true;
}else{
ht.add(a);
}
}
if (bRep)
nRepetidos++;
}
System.out.println("Personas:" + personas + " " + (nRepetidos/10) + "%" );
}
}
}
Tras ejecutar este algoritmo el resultado que dió es...
Personas:1 0%
Personas:2 0%
Personas:3 0%
Personas:4 2%
Personas:5 3%
Personas:6 3%
Personas:7 4%
Personas:8 8%
Personas:9 7%
Personas:10 12%
Personas:11 13%
Personas:12 19%
Personas:13 20%
Personas:14 22%
Personas:15 25%
Personas:16 27%
Personas:17 33%
Personas:18 33%
Personas:19 39%
Personas:20 40%
Personas:21 44%
Personas:22 49%
Personas:23 50%
Personas:24 55%
Personas:25 55%
Personas:26 60%
Personas:27 61%
Personas:28 64%
Personas:29 67%
Personas:30 70%
Por lo que en conclusión, el experto estaba en lo cierto. Nunca te acostarás sin saber algo más.
http://www.smartplanet.es/redesblog/?p=506
El experto comento que la gente suele decir mucho pero que con 23 personas es suficiente. Esto me extrañó mucho por lo que quise comprobarlo por mi cuenta mediante un algoritmo.
Para ello reiterando la misma operacion de 1 a 30 personas y para cada caso crear números al azar entre 365 y utilizando un HashSet para comprobar si se repite sería suficiente. En menos de 30 líneas se puede comprobar. Dejo aquí el código:
import java.util.HashSet;
public class Main {
public static void main(String arg[]){
for (int personas=1;personas<=30;personas++){
long nRepetidos=0;
for (int n=0;n<1000;n++){
HashSet ht=new HashSet();
boolean bRep=false;
for (int o=0;o<personas && !bRep;o++){
int a=(int)((Math.random())*365);
if (ht.contains(a)){
bRep=true;
}else{
ht.add(a);
}
}
if (bRep)
nRepetidos++;
}
System.out.println("Personas:" + personas + " " + (nRepetidos/10) + "%" );
}
}
}
Tras ejecutar este algoritmo el resultado que dió es...
Personas:1 0%
Personas:2 0%
Personas:3 0%
Personas:4 2%
Personas:5 3%
Personas:6 3%
Personas:7 4%
Personas:8 8%
Personas:9 7%
Personas:10 12%
Personas:11 13%
Personas:12 19%
Personas:13 20%
Personas:14 22%
Personas:15 25%
Personas:16 27%
Personas:17 33%
Personas:18 33%
Personas:19 39%
Personas:20 40%
Personas:21 44%
Personas:22 49%
Personas:23 50%
Personas:24 55%
Personas:25 55%
Personas:26 60%
Personas:27 61%
Personas:28 64%
Personas:29 67%
Personas:30 70%
Por lo que en conclusión, el experto estaba en lo cierto. Nunca te acostarás sin saber algo más.