Sigur vorbim aici de un număr ales pur întâmplător sau nu?

Salutare!

Am o întrebare care poate părea banală, dar uitați că nu-mi dă pace.

Avem un range, de la 10.000.000 la 999.999.999

Din 2.000 de numere alese random, aproximativ 10% din ele au 8 cifre. Și cu cât alegem mai multe numere random, cu atât e mai exact acel 10%.

Este aici un număr ales realmente random sau nu ?

Imaginați-vă că vorbim de o aplicație în care vi se cere să generați un număr random sigur.

Interesant topic.

Cel mai probabil numărul nu e ales cu adevărat întâmplător și se poate genera o întreagă discuție despre true randomness. RANDOM.ORG susține că oferă asta.

După logica mea (și probabil îmi și amintesc de pe undeva, dar nu am vreo sursă care să susțină asta), e de așteptat ca distribuția numerelor alese întâmplător să fie uniformă și să poți face o statistică după foarte multe extrageri. Nu văd nimic greșit în asta, mai degrabă invers ar fi o problemă.

E totuși o problemă cu cel 10%, ar trebui să tindă către 9.(09)%[1].


  1. 90.000.000 numere de 8 cifre, 900.000.000 numere de 9 cifre; 90.000.000 din totalul de 990.000.000 înseamnă 9.(09)% ↩︎

1 Like

Vezi mai multe despre “The law of large numbers”.

Ideea e: daca faci acelasi experiment (sa zicem ca dai cu banul), de foarte multe ori, vei tinde sa ai un rezultat apropiat de 50/50. Dar asta nu inseamna ca daca ultimele 6 ture au fost cap, urmatoarea e mai probabil sa fie pajura.

Asta se aplica si la orice chestie de gambling unde nu e skill-based - e.g. ruleta -, sau daca joci la loto :joy: poti pune linistit 1,2,3,4,5,6, ai aceeasi sansa infima (singurul downside e ca probabil, sunt mai multe bilete cu 1,2,3,4,5,6 si probabil, in caz de castig, s-ar imparti premiul intre multi)

1 Like

Exista acum posibilitatea generarii numerelor aleatoare (adica nu pseudo) si pe PC. De exemplu, TPM include si un generator de numere pseudo-aleatoare sau aleatoare (specificatia permite ambele). Unele au TRNG.
Cred ca modulul TPM pe care il am eu e cu ‘True Random Number Generator’, fiind cu Infineon SLB 9665.

S-ar putea (aici n-am investigat, desi am o cheie de-aia, mai precis, asta: YubiKey 5 NFC – Yubico) ca si dispozitive precum yubikey sa genereze numere aleatoare ‘true’. Stiu ca se poate obtine “a hardware based random number generator”, dar nu cunosc detaliile, poate totusi e PNRG cu ceva seed random (chiar la sfarsit un exemplu: YubiKey 5.2 Enhancements to OpenPGP 3.4 Support – Yubico).

1 Like

Totul depinde de entropie cu numerele random. Foarte interesant articol care explica cum L (un detectiv fictiv) l-a gasit pe Kira (un ucigas care poate ucide doar avand o față si un nume, in orice mod posibil la orice ora si timp ales de el) explicand cum a redus numarul de posibilitati atat de mult ca a ajuns la rezultatul corect.

4 Likes

Un alt aspect important cand generezi numere random e intervalul de numere valide.

Sa generezi biti random e mai usor.

1 Like

Da, @dinu, ai dreptate. Procentul codurilor de 8 cifre extrase este de 9,ceva. Am încercat să simplific puțin lucrurile și de asta am rotunjit numărul la 10%. Am greșit.

Acum, tu spui că e normal să poți face o statistică din niște numere extrase random, dar eu nu cred că e normal.

Dacă putem face o statistică, atunci poate că numerele au fost extrase “random”, dar nu vorbim de o extragere safe, ci de una cumva vulnerabilă.

Să spunem că avem 10 bile numerotate de la 1 la 10.

Scoți o bilă la întâmplare, pică bila 3, o pui înapoi.
Scoți o bilă la întâmplare, pică bila 9, o pui înapoi.
Scoți o bilă la întâmplare, pică bila 4, o pui înapoi.
Scoți o bilă la întâmplare, pică bila 7, o pui înapoi.
Scoți o bilă la întâmplare, pică bila 5, o pui înapoi.

Scoți o bilă la întâmplare, pică bila 10, o pui înapoi.

Spectatorii o să spună că au fost aranjate bilele. Altfel, care ar fi explicația că de fiecare dată scoatem o bilă diferită ?

Oare exemplul ăsta, cu cele 10 bile, nu are legătură cu motivul pentru care procentul codurile extrase de 8 cifre se apropie de 9,09 ?

Eu zic că da. Asta înseamnă că extragerea se face cu o logică.

Și abia acum, citind articolul de pe random.com, mi-am adus aminte de pseudo-random numbers.

E destul de interesant. Pentru că concluzia mea este că extragerea codurilor se face random, dacă vrem s-o numim așa, dar nu este safe.

Dar se poate să ai nevoie de strategia de care ai dat exemplu. Poți folosi un linear congruential generator cu parametri ce au anumite proprietăți, asta pentru a genera n numere random într-un interval, iar după ce ai generat n numere, să fii sigur că se găsesc toate numerele de la 1 la n în șir o singură dată. Mă gândesc că așa ceva ar fi de folos pentru a genera un shuffle într-un interval mare, care ar fi prea costisitor să fie generat dinainte cu un array.

IMO depinde foarte mult de use-case, de multe ori chiar vrei un PRNG pentru reproducibility, să îi poți da un seed. Un exemplu cu care m-am întâlnit e un ray tracer. Am vrut să am un algoritm de generare de numere random care să aibă fix același output pentru același seed ca să pot face debugging și improving, să mă asigur că o nouă modificare care aduce performanță păstrează rezultatele identice. Sau de exemplu dacă vrei să generezi o lume procedural.

Cred că întrebarea mai bună ar fi: “De ce nu este sigură extragerea unui număr random?”. Eventual în ce context?

Pentru că la implementările la care mă gândesc eu din viața de zi cu zi mi se pare mai sigur sa fie așa cum e, conform legii numerelor mari.