problema cumpleaños, número promedio de personas

con respecto a:

I'am tratar de resolver esta tarea:

Supongamos que la gente entra en una habitación vacía hasta que un par de personas comparten un cumpleaños. En promedio, ¿cuántas personas tendrán que introducir antes de que haya un partido? experimentos llevados a cabo para estimar el valor de esta cantidad. Asumir los cumpleaños que ser enteros aleatorios uniformes entre 0 y 364.

El promedio es de 24.61659 . Ver esta página de Wikipedia para las matemáticas. Birthday_problem

Mi acercamiento:

  • Generar números aleatorios en el rango [0 - 364]
  • agregarlos a un conjunto hasta que se genera un duplicado (set.add vuelve falsa)
  • añadir el número (o el tamaño del conjunto) a una lista
  • repetir este X-veces
  • calcular el promedio de la lista

Código:

public static void main(String[] args) {        
    List<Integer> list = new ArrayList<>();
    for(int i = 0; i<10000; i++){
        int count = 0;
        Set<Integer> set = new HashSet<>();
        while(set.add(ThreadLocalRandom.current().nextInt(0, 365))){
            count++;
        }
        list.add(count);
    }
    double avg = list.stream().mapToInt(Integer::intValue).average().getAsDouble();
    System.out.println(avg);
}

Mi salida es siempre menor de 24 Ej 23.6285

  • He tratado de ejecutar los fines de bucle 1000, 10000, 1000000 veces
  • He intentado ThreadLocalRandom.current().nextInt(0, 365), nextInt(0, 364),nextInt(0, 366)
  • He tratado list.add(count);ylist.add(set.size());

Pero I'am conseguir siempre un promedio <24. Parcialmente algo así como 23.629237.

¿Ha observado algunos errores y por qué I'am no obtener el valor correcto, que es de aprox. ≈24.61659 ?

yshavit:

Tenga en cuenta que su respuesta es casi exactamente 1 menor que la esperada. Eso es una pista: se le dice que usted está probablemente bajo conteo por 1, que es un error muy común .

Tenga en cuenta su condición:

while(set.add(<newPersonsBirthday>)){
    count++;
}

Eso no va a contar con la última persona! No se añadirán a la cuenta, y lo que no está incluida en el conjunto de personas en la habitación. Usted ha contado todo el mundo en el set , excepto la persona que provocó el partido - pero son parte del conjunto.

Sólo tiene que añadir count + 1a su lista, para dar cuenta de esa persona.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=324770&siteId=1
Recomendado
Clasificación