Creier-computerÎntrebarea este rezonabilă, pentru că un calculator, aşa cum ştim, este o maşină care face ceea ce i se spune. Dar dacă face ce i se spune, e predictibil, nu? Cum ne va surprinde, dacă ne va surprinde, creând un număr completamente aleator? Iată cum...

 

 

 

Generarea numerelor aleatoare, cu ajutorul... naturii

Natura, cel puţin pentru nivelul actual de cunoştinţe, poate produce evenimente pe care nu le putem prezice cu exactitate, ci doar statistic. De pildă, dezintegrarea radioactivă survine aleator. S-ar putea, deci, folosi un contor de particule Geiger pentru a capta radiaţii emise în urma dezintegrării unui element radioactiv şi utiliza valorile contorului pentru a genera numere aleatoare.

O altă sursă de informaţii greu predictibile ar fi variaţiile mişcării mouse-ului sau intervalul de timp dintre apăsarea a două taste. Surse foarte bune pot fi şi zgomotele din atmosferă1.


Utilizarea unui algoritm pentru folosirea unor numere pseudo-aleatoare

O altă metodă de a genera numere întâmplătoare este folosirea unui algoritm. Desigur, condiţia pentru generarea unui şir de numere care să nu poate fi ghicit este ca algoritmul şi valoarea iniţială a unei variabile care păstrează valoarea numărului general aleator să nu fie cunoscute de persoane interesate.

"Un generator de numere pseudo-aleatoare, cum se numesc acestea, trebuie să satisfacă anumite cerinţe:
:: să fie simplu şi rapid.
:: să producă şiruri de numere de lungime arbitrară care să nu conţină repetiţii. Deoarece un calculator nu poate genera decât numere mai mici decât un număr dat, nu se poate construi un generator cu perioadă infinită. Generatorul trebuie să aibă totuşi o perioadă cât mai mare.
:: să producă numere independente unul de altul (sau cu o corelare cât mai vagă).
:: să genereze numere cu o repartiţie uniformă"2.

Iată un exemplu de cod pentru generarea unui număr aleator, din cartea "The C Programming Language" de Kernighan and Ritchie:

int rand() { random_seed = random_seed * 1103515245 + 12345;
return (unsigned int)(random_seed / 65536) % 32768; }

Surse:

:: 1 şi 2 - www.galaxyng.com/adrian_atanasiu/cursuri/cript/cr2_3.pdf
:: computer.howstuffworks.com/question697.htm