ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я НЕ ХОЧУ ОТВЕТА НА ЭТУ ПРОБЛЕМУ. МНЕ ПРОСТО НУЖЕН НЕКОТОРОЕ РУКОВОДСТВО.
Я хочу выполнить анализ Монте-Карло печально известного парадокса дней рождения (определение вероятности того, что по крайней мере 2 человека в данной группе имеют один и тот же день рождения), используя HashSet
.
Теперь, когда я запускаю это, collisionCount
НАМНОГО ниже, чем я ожидал. Во-первых, я ожидал, что collisionCount
для группы из 10 человек будет 11446 (или вероятность 0,11446). Затем к тому времени, когда я дошел до 100 человек, я ожидал, что CollisionCount будет 100 000 (с вероятностью 1,0). Но вместо этого для каждых 10 человек столкновение считается только на 1 (10 человек: 1 столкновение, 20 человек: 2 столкновения, 30 человек: 3 столкновения и т. д.).
Вот код, который я написал до сих пор:
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class BirthdayParadox
{
public static void main(String [] args)
{
Random rand = new Random();
int tests = 100000;
int collisionCount = 0;
for(int people = 10; people <= 100; people += 10)
{
Set<Integer> birthdays = new HashSet<>(365);
birthdays.add(rand.nextInt(365));
for(int runs = 0; runs < tests; runs++)
{
int randomBirthday = rand.nextInt(365);
if(birthdays.contains(randomBirthday))
{
collisionCount++;
break;
}
birthdays.add(randomBirthday);
}
float prob = (float)collisionCount / tests;
System.out.println("After " + tests + " tests there were " +
collisionCount + " occurrences of shared " +
" birthdays in a set of " + people + " people.");
System.out.println("Probability : " + prob);
}
}
}
Я предполагаю, что мой вопрос: я что-то не так делаю с любым из моих циклов for, чтобы заставить collisionCount
правильно считать?
Я новичок в изучении Java, я новичок в сообществе Stack Overflow и все еще изучаю веревки. Любая помощь/совет/подсказка приветствуется.