Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2008-11-20 08:40:51.
Revizia anterioară   Revizia următoare  

Problema saptamanii - Probabilitati (solutie)

Cosmin
Cosmin Negruseri
20 noiembrie 2008

Problema curenta a fost rezolvat de Ovidiu Ghiorghioiu, Delia David, Andrei Olariu si de Radu Grigore.

Nu exista nici o modalitate prin care sa obtinem rezultate uniform aleatoare folosind un numar finit de aruncari pentru ca se poate intampla ca la orice aruncare a monedei sa obtinem cap la infinit si atunci nu avem cum sa obtinem rezultate diferite. Acum sa vedem solutiile lui Andrei:

1. Se arunca moneda de cate 2 ori. Daca pica pajura si apoi cap -> pajura, daca avem cap si apoi pajura -> cap, daca avem 2 rezultate egale, repetam ambele aruncari.

2. Generam doua numere din multimea {0, 1} folosind metoda de la pct 1. Obtinem 00 -> mar, 01 -> para, 10 -> portocala, 11 -> repetam cele 2 generari.

Prima problema e rezolvata de http://en.wikipedia.org/wiki/Fair_coin

Cele doua probleme sunt interesante in contextul generatoarelor de numere aleatoare. De exemplu in C++ unii folosim pentru a genera numere aleatoare de la 0 la n - 1 folosind instructiunile rand() % n. Acum dupa ce ati vazut problema 2 este clar ca unele rezultate sunt mai probabile ca altele.

In java sau Python generatoarele aleatoare sunt mai bune.

Varianta java:

public int nextInt(int n) {
     if (n<=0)
                throw new IllegalArgumentException("n must be positive");

     if ((n & -n) == n)  // i.e., n is a power of 2
         return (int)((n * (long)next(31)) >> 31);

     int bits, val;
     do {
         bits = next(31);
         val = bits % n;
     } while(bits - val + (n-1) < 0);
     return val;
 }

puteti citi aici() explicatia codului.

Ovidiu mai sugera

Categorii: potw