Cum să verificați un generator de numere aleatorii

Cum să verificați un generator de numere aleatorii

Există un program care, în procesul de utilizare, folosește generatorul de numere aleatorii încorporate pentru a verifica dacă este într-adevăr aleator.
Prin institut îmi amintesc că există unele metode.


> cum să verificați dacă este într-adevăr aleator

"Nu există accidente în această lume .." (с) МВ

Nu este accidental. E pseudo-aleator. Dar puteți verifica rezultatul după finalizare a numerelor pentru a îndeplini cerințele, de exemplu, uniformitatea distribuției etc.

Puteți verifica acest lucru:
Rulați Random (1000) de 1000 de ori și numărați numerele în 10 intervale (1..100, 101..200, 901..1000) și dacă scorul în intervalele de deset este egal, atunci generatorul este într-adevăr aleator.

Dacă aveți nevoie de viz.predstavlenie de distribuție, va organiza un număr întreg de 2-dimensional-matrice în care elementul număr - un număr „aleatoriu“, în intervalul nu depășește limitele matrice, iar valoarea lui e-matrice, care va crește de la 1-zu doar când generatorul produce un număr de contur care corespunde numărului acestui element

în ciclul "de la gard până la masa de prânz", obțineți numărul "aleatoriu", căutați elementul corespunzător matricei și creșteți elementul găsit

după încheierea ciclului, vizualizați într-un mod convenabil matricea sub forma unui grafic de coloană, unde de-a lungul axei X sunt numere "aleatorii", iar pe axa Y - numărul de "fracțiuni" a fiecăruia dintre aceste numere

Și dacă e pseudo-aleatoriu?
Și puteți verifica exact, cel puțin cu o statistică primitivă,
dar din câte îmi amintesc, există metode specifice cu criterii etc.

Aș spune că distribuția seriilor de numere rezultate ar trebui să fie egală. uniformă și uniformă. distribuirea diferențelor între două numere succesive obținute (unele garanții a independenței seriei, deși, în măsura în care înțeleg, toate aceste serii sunt Markovian și, într-o oarecare măsură, fiecare număr depinde de cel precedent). Uniformitatea distribuției este verificată de chi-pătrat.

Căutați o descriere a testelor DIEHARD. Acesta este standardul pentru astăzi pentru a verifica "aleatorie" a generatoarelor.

Și cu ce distribuție ar trebui să fie uniformă? Este Randal în mod egal. Un program poate genera orice distribuție pentru sine. Uniformitatea nu poate fi un criteriu de șansă.

Metodele de generare a secvențelor "aleatorii" cu o distribuție dată sunt de obicei "generatoare cu o distribuție uniformă.
Dacă uniformitatea nu este testată, atunci este mai dificil să testați derivatul și este incorect.

Criteriile sunt complete. Luați al doilea volum al lui Knuth, uite. Acolo ele sunt descrise. Dar pentru a verifica generatorul este necesar nu pe toate criteriile, ci pe cele necesare. Și pentru asta trebuie să știți ce are nevoie acest generator pentru program. Este un lucru să amesteci un pachet de cărți, celălalt să găsești valoarea unui integral multiplu prin metoda Monte Carlo. În cel de-al doilea caz, apropo, verificarea este mai ușoară :)
Există un cod generator?

Nu cunosc starea exactă a utilizării problemei de numere aleatoare, dar într-un client-bănci (nu va spune exact cum) a folosit un generator de numere aleatoare, în combinație cu mișcarea mouse-ului peste generatorul de ecran setează intervalul la care sunt citite coordonatele de ecran și este mai probabil ca șirul de numere aleatoare.

Memorie: 0,75 MB
Timp: 0,065 sec