Prova di Bernoulli — è un esperimento con due possibili esiti:
Successo (l'evento si verifica) con probabilità ,
Insuccesso (l'evento non si verifica) con probabilità 1 - p.
Una prova si definisce "bernoulliana" se è indipendente e la probabilità di successo rimane costante durante tutte le prove.
Schema delle prove di Bernoulli — è una serie di prove indipendenti, ognuna delle quali è una prova di Bernoulli. Indichiamo il numero di prove con . In ogni prova, la probabilità di successo e di insuccesso 1 - p restano invariate.
Un esempio può essere il lancio ripetuto di una moneta. Se siamo interessati a quante volte uscirà testa su lanci, questo è proprio lo schema delle prove di Bernoulli.
Il numero di successi in una serie di prove di Bernoulli segue una distribuzione binomiale. Sia — la variabile casuale che indica il numero di successi in prove. Allora:
dove
— è la probabilità di successo in ogni prova,
— è il numero di successi su prove.
Dimostrazione. Consideriamo una specifica sequenza di prove, in cui:
prove hanno successo (probabilità di successo )
n - k prove falliscono (probabilità di insuccesso q = 1 - p)
Poiché le prove sono indipendenti, la probabilità di questa specifica sequenza è uguale al prodotto delle probabilità delle singole prove:
Per ottenere esattamente successi, è necessario scegliere in quali precise posizioni essi si verificheranno. Il numero di tali modi è uguale al numero di combinazioni C_n^k.
Di conseguenza, la probabilità che si verifichino esattamente successi è uguale a
Per calcolare il valore del coefficiente binomiale nei numeri reali, utilizziamo il seguente accorgimento:
È noto che ln~n! = ln~(1 \cdot 2 \cdot ... \cdot n) = ln~1 + ln~2 + ... + ln~n
I valori di vengono memorizzati nelle celle dell'array . Successivamente calcoliamo
dopodiché
Esempio
Nel primo test vengono effettuate n = 8 prove. La probabilità del verificarsi dell'evento in ogni prova è pari a p = 0.3. Vogliamo trovare la probabilità che l'evento si verifichi esattamente k = 2 volte. La probabilità cercata è pari a:
Implementazione dell'algoritmo
Dichiariamo un array di lavoro , dove lf[i] = ln~i! = ln~1 + ln~2 + ... + ln~i.
#define MAX 1001
double lf[MAX];Leggiamo i dati in ingresso.
scanf("%d %d", &n, &k);
scanf("%lf", &p);
q = 1 - p;Riempiamo l'array .
lf[1] = 0;
for (i = 2; i <= n; i++)
lf[i] = lf[i - 1] + log(i);Calcoliamo il valore del coefficiente binomiale res = C_n^k.
res = lf[n] - lf[k] - lf[n - k];
res = exp(res);Calcoliamo la risposta res = C_n^k \cdot p^k \cdot (1 - p)^{n - k}.
for (i = 0; i < k; i++)
res = res * p;
for (i = 0; i < n - k; i++)
res = res * q;Stampiamo la risposta.
printf("%lf\n", res);