Paradoks dnia urodzin

Paradoks dnia urodzin związany jest z odpowiedzią na pytanie ile osób jest potrzebnych do tego, żeby prawdopodobieństwo, iż przynajmniej dwie z nich mają urodziny tego samego dnia było większe od 0,5. Odpowiedź jest zaskakująca, wystarczy 23 osoby. Chcemy napisać metodę która wykona n prób i zwróci nam średnią liczbę osób, dla których spełniony jest nasz warunek (dwie z nich mają urodziny tego samego dnia). Dla uproszczenia daty urodzin będziemy zapisywać w 365 elementowym wektorze wartości logicznych.
// wykorzystujemy klasę Scanner z pakietu java.util
import java.util.*;

/**
 * Paradoks dnia urodzin
 * @author kodatnik.blogspot.com 
 */ 
public class ParadoksDniaUrodzin { 

 // metoda zwraca średnią liczbę osób dla n prób (parametr wywołania)
 // potrzebnych do tego aby dwie z nich miały tego samego dnia urodziny
 public static double paradoks(int liczbaProb) {
  
  // zmienne okreslające ilość dni w roku oraz licznik osób
  int n = 365;
  int licznik = 0;
  
  // wykonujemy tyle prób ile chce użytkownik
  for (int i =0; i< liczbaProb; i++) {
   // tworzymy wektor z poszczególnymi dniami roku (domyślnie false)
   boolean[] dzienUrodzin = new boolean[n];
     
   // w pętli działającej dotąd, aż nie znajdziemy dwóch osób z taką samą datą urodzin
   while (true) {
    // zwiększamy licznik osób o jeden
    licznik++;
    // losujemy liczbę z zakresu od 0 do 364 (indeksy tablicy)
    int los = (int) (n * Math.random());
    
    // jeśli jest już osoba o takim samym dniu urodzin kończymy pętlę
    if (dzienUrodzin[los]) break;
    // jeśli nie wpisujemy true w odpowiedni dzień
    dzienUrodzin[los] = true;
   }
  }
  // zwracamy średnią liczbę osób (wszystkie / liczba prób)
  return ((double) licznik) / liczbaProb;
 }

 public static void main(String[] args) { 

  Scanner sc = new Scanner(System.in);
  System.out.print ("Podaj liczbę prób: " );
  
  // pobieramy od użytkownika liczbę prób
  int liczba = sc.nextInt();
  
  // wyświetlamy na ekranie średnią liczbę osób dla wszystkich prób
  System.out.println("Średnia liczba osób: " + paradoks(liczba));
  
  
 }
}
Uruchomiona aplikacja:
Podaj liczbę prób: 100
Średnia liczba osób: 23.01


0 Komentarzy - Paradoks dnia urodzin

Prześlij komentarz

Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)

Popularne posty