Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • U kontaktu s
  • Generator stanja slučajnih brojeva. Generator slučajnih brojeva

Generator stanja slučajnih brojeva. Generator slučajnih brojeva


Imajte na umu da bi idealno krivulja gustoće distribucije slučajnih brojeva izgledala kao ona prikazana na Sl. 22.3. To jest, u idealnom slučaju, isti broj točaka pada u svaki interval: N ja = N/k , gdje N ukupan broj bodova, k broj intervala, ja= 1, ½, k .

Riža. 22.3. Učestalost ispadanja slučajnih brojeva,
generiran idealnim generatorom teoretski

Treba imati na umu da se generiranje proizvoljnog slučajnog broja sastoji od dvije faze:

  • generiranje normaliziranog slučajnog broja (to jest, ravnomjerno raspoređenog od 0 do 1);
  • transformacija normaliziranih slučajnih brojeva r ja u nasumične brojeve x ja, koji se raspoređuju prema (proizvoljnom) zakonu raspodjele koji zahtijeva korisnik ili u traženom intervalu.

Generatori slučajnih brojeva prema načinu dobivanja brojeva dijele se na:

  • fizički;
  • tablični;
  • algoritamski.

Fizički RNG-ovi

Primjeri fizičkih RNG-ova su: novčić ("orao" 1, "rep" 0); kocke; bubanj sa strelicom podijeljen na sektore s brojevima; hardverski generator buke (GS), koji se koristi kao bučni toplinski uređaj, na primjer, tranzistor (sl. 22.422.5).

Riža. 22.4. Shema hardverske metode za generiranje slučajnih brojeva
Riža. 22.5. Dijagram dobivanja slučajnih brojeva hardverskom metodom
Zadatak "Generacija slučajnih brojeva pomoću novčića"

Generirajte nasumični 3-znamenkasti broj ravnomjerno raspoređen između 0 i 1 pomoću novčića. Preciznost tri decimale.

Prvi način rješavanja problema
Bacite novčić 9 puta, a ako je ispao rep, zapišite "0", ako je glava, onda "1". Dakle, recimo da smo kao rezultat eksperimenta dobili nasumični niz 100110100.

Nacrtajte interval od 0 do 1. Čitajući brojeve redom slijeva na desno, podijelite interval na pola i svaki put odaberite jedan od dijelova sljedećeg intervala (ako je ispala 0, onda lijevo, ako je ispala 1, onda pravo). Dakle, možete doći do bilo koje točke u intervalu, proizvoljno točno.

Tako, 1 : interval je podijeljen na pola s i , odabrana je desna polovica, interval se sužava: . Sljedeći broj 0 : interval je podijeljen na pola s i , odabrana je lijeva polovica, interval se sužava: . Sljedeći broj 0 : interval je podijeljen na pola s i , odabrana je lijeva polovica, interval se sužava: . Sljedeći broj 1 : interval je podijeljen na pola s i , odabrana je desna polovica, interval se sužava: .

Prema uvjetu točnosti zadatka nalazi se rješenje: to je bilo koji broj iz intervala , na primjer 0,625.

U principu, ako pristupamo striktno, tada se dijeljenje intervala mora nastaviti sve dok se lijeva i desna granica pronađenog intervala ne PODudare jedna s drugom do treće decimale. Odnosno, u smislu točnosti, generirani broj se više neće moći razlikovati od bilo kojeg broja iz intervala u kojem se nalazi.

Drugi način rješavanja problema
Razbijmo dobiveni binarni niz 100110100 na trijade: 100, 110, 100. Nakon pretvaranja ovih binarnih brojeva u decimalne brojeve, dobivamo: 4, 6, 4. Zamjenom “0.” ispred, dobivamo: 0,464. Ovom metodom mogu se dobiti samo brojevi od 0,000 do 0,777 (budući da je maksimum koji se može “iscijediti” iz tri binarne znamenke 111 2 = 7 8), odnosno ti su brojevi zapravo prikazani u oktalnom brojevnom sustavu. Za prijevod oktalni brojevi u decimal prezentacija je izvršna:
0,464 8 = 4 8 1 + 6 8 2 + 4 8 3 = 0,6015625 10 = 0,602 10.
Dakle, željeni broj je: 0,602.

Tablični RNG

Tablični RNG kao izvor slučajnih brojeva koristi posebno sastavljene tablice koje sadrže provjerene nekorelirane, odnosno brojeve koji ni na koji način ne ovise jedni o drugima. U tablici. 22.1 prikazuje mali fragment takve tablice. Hodajući tablicom slijeva nadesno odozgo prema dolje, možete dobiti nasumične brojeve ravnomjerno raspoređene od 0 do 1 sa željenim brojem decimalnih mjesta (u našem primjeru koristimo tri decimalna mjesta za svaki broj). Budući da brojevi u tablici ne ovise jedni o drugima, tablicom se može prelaziti na različite načine, npr. odozgo prema dolje, ili zdesna na lijevo, ili se, recimo, mogu odabrati brojevi koji su na parnim pozicijama.

Tablica 22.1.
Slučajni brojevi. Ravnomjerno
raspoređeni od 0 do 1 slučajni brojevi
slučajni brojevi ravnomjerno raspoređeno
0 do 1 slučajni brojevi
9 2 9 2 0 4 2 6 0.929
9 5 7 3 4 9 0 3 0.204
5 9 1 6 6 5 7 6 0.269
… …

Prednost ove metode je u tome što daje stvarno slučajne brojeve, budući da tablica sadrži provjerene nekorelirane brojeve. Nedostaci metode: potrebno je puno memorije za pohranu velikog broja znamenki; velike poteškoće u generiranju i provjeri takvih tablica, ponavljanja pri korištenju tablice više ne jamče slučajnost numeričkog niza, a time ni pouzdanost rezultata.

Postoji tablica koja sadrži 500 apsolutno nasumičnih provjerenih brojeva (preuzeto iz knjige I. G. Venetsky, V. I. Venetskaya "Osnovni matematički i statistički koncepti i formule u ekonomskoj analizi").

Algoritamski RNG

Brojevi generirani korištenjem ovih RNG-ova uvijek su pseudo-slučajni (ili kvazi-slučajni), to jest, svaki sljedeći generirani broj ovisi o prethodnom:

r ja + 1 = f(r ja) .

Nizovi sastavljeni od takvih brojeva tvore petlje, odnosno nužno postoji ciklus koji se ponavlja beskonačan broj puta. Ciklusi koji se ponavljaju nazivaju se periode.

Prednost RNG podataka je brzina; generatori praktički ne zahtijevaju memorijske resurse, kompaktni su. Nedostaci: brojevi se ne mogu u potpunosti nazvati slučajnim, jer postoji ovisnost između njih, kao i prisutnost razdoblja u nizu kvazi-slučajnih brojeva.

Razmotrite nekoliko algoritamskih metoda za dobivanje RNG-a:

  • metoda srednjih kvadrata;
  • metoda srednjih proizvoda;
  • metoda miješanja;
  • linearna kongruentna metoda.

Metoda srednjeg kvadrata

Postoji neki četveroznamenkasti broj R 0 . Taj se broj kvadrira i unosi R jedan . Dolazi iz R 1 sredini (četiri srednje znamenke) uzima se novi slučajni broj i upisuje se u njega R 0 . Zatim se postupak ponavlja (vidi sl. 22.6). Imajte na umu da je zapravo, kao slučajni broj, potrebno uzeti not ghij, a 0.ghij s nulom i decimalnom točkom dodanom s lijeve strane. Ova činjenica se odražava na Sl. 22.6, i na sljedećim sličnim slikama.

Riža. 22.6. Shema metode srednjih kvadrata

Nedostaci metode: 1) ako pri nekoj iteraciji broj R 0 postaje nula, tada generator degenerira, pa je bitan pravilan izbor početne vrijednosti R 0; 2) generator će ponoviti niz kroz M n koraka (u najboljem slučaju), gdje n dužina riječi R 0 , M osnova brojevnog sustava.

Za primjer na sl. 22.6 : ako broj R 0 će biti predstavljen u binarnom brojevnom sustavu, tada će se niz pseudoslučajnih brojeva ponoviti nakon 2 4 = 16 koraka. Imajte na umu da se ponavljanje niza može dogoditi ranije ako je početni broj pogrešno odabran.

Gore opisanu metodu predložio je John von Neumann i datira iz 1946. godine. Budući da se ova metoda pokazala nepouzdanom, brzo je napuštena.

Metoda srednjih umnožaka

Broj R 0 pomnoženo s R 1 , iz rezultata R 2 sredina je uklonjena R 2 * (ovo je još jedan nasumični broj) i pomnoženo s R jedan . Prema ovoj shemi izračunavaju se svi naredni slučajni brojevi (vidi sl. 22.7).

Riža. 22.7. Shema metode srednjih produkata

Metoda miješanja

Metoda miješanja koristi operacije za rotiranje sadržaja ćelije lijevo i desno. Ideja metode je sljedeća. Neka ćelija pohranjuje početni broj R 0 . Cikličkim pomicanjem sadržaja ćelije ulijevo za 1/4 duljine ćelije, dobivamo novi broj R 0*. Slično, cikličkim pomicanjem sadržaja ćelije R 0 udesno za 1/4 duljine ćelije, dobivamo drugi broj R 0**. Zbroj brojeva R 0 * i R 0** daje novi slučajni broj R jedan . Unaprijediti R 1 upisuje se R 0 , a cijeli niz operacija se ponavlja (vidi sl. 22.8).


Riža. 22.8. Shema metode miješanja

Imajte na umu da broj koji proizlazi iz zbrajanja R 0 * i R 0 **, možda neće u potpunosti stati u ćeliju R jedan . U tom slučaju, dodatne znamenke treba odbaciti iz primljenog broja. Objasnimo ovo za sl. 22.8, gdje su sve ćelije predstavljene s osam binarnih znamenki. Neka R 0 * = 10010001 2 = 145 10 , R 0 ** = 10100001 2 = 161 10 , onda R 0 * + R 0 ** = 100110010 2 = 306 10 . Kao što vidite, broj 306 zauzima 9 znamenki (u binarnom brojevnom sustavu), a ćelija R 1 (kao i R 0 ) može sadržavati najviše 8 bita. Stoga, prije unosa vrijednosti u R 1 potrebno je ukloniti jedan "dodatni", krajnji lijevi bit iz broja 306, što rezultira R 1 više neće ići 306, već 00110010 2 = 50 10 . Također imajte na umu da se u jezicima kao što je Pascal, "skraćivanje" dodatnih bitova kada se ćelija prekorači vrši automatski u skladu s danom vrstom varijable.

Linearna kongruentna metoda

Linearna kongruencijalna metoda jedan je od najjednostavnijih i trenutno najčešće korištenih postupaka koji simuliraju slučajne brojeve. Ova metoda koristi mod ( x, g) , koji vraća ostatak nakon dijeljenja prvog argumenta s drugim. Svaki sljedeći slučajni broj izračunava se na temelju prethodnog slučajnog broja pomoću sljedeće formule:

r ja+ 1 = mod( k · r ja + b, M) .

Niz slučajnih brojeva dobiven ovom formulom naziva se linearni kongruentni niz. Mnogi autori nazivaju linearni kongruentni niz b = 0 multiplikativna kongruentna metoda, i kada b ≠ 0 — mješovita kongruentna metoda.

Za visokokvalitetni generator potrebno je odabrati odgovarajuće koeficijente. Potrebno je da broj M bio prilično velik jer razdoblje ne može imati više M elementi. S druge strane, dijeljenje koje se koristi u ovoj metodi prilično je spora operacija, pa bi za binarno računalo logičan izbor bio M = 2 N, jer se u ovom slučaju pronalaženje ostatka dijeljenja svodi unutar računala na binarnu logičku operaciju "I". Također je uobičajeno odabrati najveći prosti broj M, manje od 2 N: u specijalnoj literaturi je dokazano da su u ovom slučaju najmanje značajne znamenke rezultirajućeg slučajnog broja r ja+ 1 ponašaju se jednako nasumično kao i stariji, što pozitivno utječe na cijeli niz slučajnih brojeva u cjelini. Primjer je jedan od Mersenneovi brojevi, jednako 2 31 1 , i stoga, M= 2 31 1 .

Jedan od zahtjeva za linearne kongruentne nizove je najduži mogući period. Duljina razdoblja ovisi o vrijednostima M , k i b. Teorem koji predstavljamo u nastavku omogućuje nam da odredimo je li moguće postići period maksimalne duljine za određene vrijednosti M , k i b .

Teorema. Linearni kongruentni niz definiran brojevima M , k , b i r 0 , ima period duljine M ako i samo ako:

  • brojevima b i M istoprime;
  • k 1 x str za svaki jednostavan str, koji je djelitelj M ;
  • k 1 je višekratnik broja 4 ako M višekratnik 4.

Na kraju, zaključimo s nekoliko primjera korištenja linearne kongruentne metode za generiranje slučajnih brojeva.

Utvrđeno je da će se niz pseudoslučajnih brojeva generiranih na temelju podataka iz primjera 1 ponavljati svakih M/4 broja. Broj q postavlja se proizvoljno prije početka izračuna, međutim, treba imati na umu da niz ostavlja dojam slučajnog općenito k(i stoga q). Rezultat se može malo poboljšati ako b neparan i k= 1 + 4 q u ovom slučaju serija će se ponavljati svakih M brojevima. Nakon duge potrage k istraživači su se odlučili za vrijednosti 69069 i 71365.

Generator slučajnih brojeva koristeći podatke iz primjera 2 proizvest će slučajne neponavljajuće brojeve s periodom od 7 milijuna.

Multiplikativnu metodu za generiranje pseudoslučajnih brojeva predložio je D. H. Lehmer 1949. godine.

Provjera kvalitete generatora

O kvaliteti RNG-a ovisi kvaliteta cijelog sustava i točnost rezultata. Stoga, nasumični niz koji generira RNG mora zadovoljiti niz kriterija.

Provjere koje se provode su dvije vrste:

  • provjerava ravnomjernu raspodjelu;
  • testiranje statističke neovisnosti.

Provjerava jednoliku distribuciju

1) RNG bi trebao dati blizu sljedećih vrijednosti statističkih parametara karakterističnih za jedinstveni slučajni zakon:

2) Frekvencijski test

Test frekvencije omogućuje vam da saznate koliko je brojeva palo u interval (m r – σ r ; m r + σ r) , tj. (0,5 0,2887; 0,5 + 0,2887) ili eventualno (0,2113; 0,7887) . Budući da je 0,7887 0,2113 = 0,5774 , zaključujemo da bi u dobrom RNG-u oko 57,7% svih izvučenih nasumičnih brojeva trebalo pasti u ovaj interval (vidi sliku 22.9).

Riža. 22.9. Frekvencijski dijagram idealnog RNG-a
u slučaju provjere radi ispitivanja frekvencije

Također treba uzeti u obzir da broj brojeva u intervalu (0; 0,5) treba biti približno jednak broju brojeva u intervalu (0,5; 1).

3) Hi-kvadrat test

Hi-kvadrat test (χ 2 -test) jedan je od najpoznatijih statističkih testova; to je glavna metoda koja se koristi u kombinaciji s drugim kriterijima. Hi-kvadrat test predložio je 1900. godine Karl Pearson. Njegov izvanredan rad smatra se temeljem moderne matematičke statistike.

Za naš slučaj, hi-kvadrat test će nam omogućiti da saznamo koliko smo mi stvorili stvaran RNG je blizak referentnom RNG-u, tj. zadovoljava li zahtjev ujednačene distribucije ili ne.

frekvencijski dijagram referenca RNG je prikazan na sl. 22.10. Budući da je zakon distribucije referentnog RNG-a uniforman, (teorijska) vjerojatnost str ja udaranje brojeva u ja-ti interval (zbroj ovih intervala k) jednako je str ja = 1/k . I tako, u svakom k intervali će pasti glatko, nesmetano na str ja · N brojevi ( N ukupan broj generiranih brojeva).

Riža. 22.10. Frekvencijski dijagram referentnog RNG-a

Pravi RNG će proizvesti raspodijeljene brojeve (i ne nužno ravnomjerno!) k intervalima, a svaki će interval uključivati n ja brojevi (ukupno n 1 + n 2 + + n k = N ). Kako možemo odrediti koliko je testirani RNG dobar i blizak referentnom? Sasvim je logično uzeti u obzir kvadrate razlika između primljenog broja brojeva n ja i "referenca" str ja · N . Zbrojimo ih i kao rezultat dobivamo:

χ 2 eksp. =( n 1 str jedan · N) 2 + (n 2 str 2 · N) 2 + + ( n k – str k · N) 2 .

Iz ove formule slijedi da što je manja razlika u svakom od članova (a time i što je manja vrijednost χ 2 exp.), to je jači zakon distribucije slučajnih brojeva generiranih od strane stvarnog RNG-a koji teži biti uniforman.

U prethodnom izrazu, svakom od izraza je dodijeljena ista težina (jednaka 1), što zapravo ne mora biti točno; stoga je za hi-kvadrat statistiku potrebno normalizirati svaki ja th član, dijeleći ga sa str ja · N :

Na kraju, napišimo dobiveni izraz kompaktnije i pojednostavimo ga:

Dobili smo vrijednost hi-kvadrat testa za eksperimentalni podaci.

U tablici. 22.2 dati su teoretski hi-kvadrat vrijednosti (χ 2 teor.), gdje ν = N 1 je broj stupnjeva slobode, str je korisnički određena razina pouzdanosti koja određuje koliko RNG treba zadovoljiti zahtjeve jedinstvene distribucije, ili str — je vjerojatnost da eksperimentalna vrijednost χ 2 exp. bit će manji od tabelarnog (teorijskog) χ 2 teor. ili njemu jednaka.

Tablica 22.2.
Neki postotni bodovi χ 2 -distribucije
p = 1% p = 5% p = 25% p = 50% p = 75% p = 95% p = 99%
ν = 1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635
ν = 2 0.02010 0.1026 0.5754 1.386 2.773 5.991 9.210
ν = 3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34
ν = 4 0.2971 0.7107 1.923 3.357 5.385 9.488 13.28
ν = 5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09
ν = 6 0.8721 1.635 3.455 5.348 7.841 12.59 16.81
ν = 7 1.239 2.167 4.255 6.346 9.037 14.07 18.48
ν = 8 1.646 2.733 5.071 7.344 10.22 15.51 20.09
ν = 9 2.088 3.325 5.899 8.343 11.39 16.92 21.67
ν = 10 2.558 3.940 6.737 9.342 12.55 18.31 23.21
ν = 11 3.053 4.575 7.584 10.34 13.70 19.68 24.72
ν = 12 3.571 5.226 8.438 11.34 14.85 21.03 26.22
ν = 15 5.229 7.261 11.04 14.34 18.25 25.00 30.58
ν = 20 8.260 10.85 15.45 19.34 23.83 31.41 37.57
ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89
ν = 50 29.71 34.76 42.94 49.33 56.33 67.50 76.15
ν > 30 ν + sqrt(2 ν ) · x str+ 2/3 x 2 str 2/3+ O(1/sqrt( ν ))
x str = 2.33 1.64 0,674 0.00 0.674 1.64 2.33

Smatrati prihvatljivim str od 10% do 90%.

Ako je χ 2 exp. mnogo više od χ 2 teor. (to je str je velik), zatim generator ne zadovoljava zahtjev jednolike raspodjele, budući da promatrane vrijednosti n ja otići predaleko od teorijskog str ja · N i ne može se smatrati slučajnim. Drugim riječima, uspostavljen je tako veliki interval pouzdanosti da ograničenja u brojevima postaju vrlo labava, zahtjevi u pogledu brojeva su slabi. U ovom slučaju će se primijetiti vrlo velika apsolutna pogreška.

Čak je i D. Knuth u svojoj knjizi "Umijeće programiranja" primijetio da imajući χ 2 exp. malo također, općenito, nije dobro, iako se na prvi pogled čini izvanrednim s gledišta uniformnosti. Zaista, uzmite niz brojeva 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, oni su idealni u smislu uniformnosti, a χ 2 exp. bit će praktički nula, ali je malo vjerojatno da ćete ih prepoznati kao slučajne.

Ako je χ 2 exp. mnogo manje od χ 2 teor. (to je str mali), zatim generator ne zadovoljava zahtjev slučajne uniformne distribucije, budući da promatrane vrijednosti n ja preblizu teoretskom str ja · N i ne može se smatrati slučajnim.

Ali ako je χ 2 exp. leži u određenom rasponu, između dvije vrijednosti χ 2 teor. , koji odgovaraju npr. str= 25% i str= 50%, tada možemo pretpostaviti da su vrijednosti slučajnih brojeva koje generira senzor potpuno slučajne.

Osim toga mora se imati na umu da sve vrijednosti str ja · N mora biti dovoljno velik, na primjer, veći od 5 (nađeno empirijski). Tek tada (s dovoljno velikim statističkim uzorkom) uvjeti pokusa mogu se smatrati zadovoljavajućima.

Dakle, postupak provjere je sljedeći.

Testovi statističke neovisnosti

1) Provjera učestalosti pojavljivanja znamenke u nizu

Razmotrite primjer. Slučajni broj 0,2463389991 sastoji se od znamenki 2463389991, a broj 0,5467766618 sastoji se od znamenki 5467766618. Kombinirajući nizove znamenki, dobivamo: 24633899915467766618.

Jasno je da teorijska vjerojatnost str ja ispasti ja znamenka (od 0 do 9) je 0,1.

2) Provjera izgleda nizova identičnih brojeva

Označimo sa n L broj niza istih uzastopnih znamenki duljine L. Sve treba provjeriti L od 1 do m, gdje m je broj koji odredi korisnik: najveći broj identičnih znamenki koje se pojavljuju u nizu.

U primjeru "24633899915467766618" pronađene su 2 serije duljine 2 (33 i 77), tj. n 2 = 2 i 2 serije duljine 3 (999 i 666), tj. n 3 = 2 .

Vjerojatnost niza duljine od L jednako je: str L= 9 10 L (teorijski). Odnosno, vjerojatnost pojavljivanja niza duljine jednog znaka jednaka je: str 1 = 0,9 (teoretski). Vjerojatnost pojavljivanja niza od dva znaka je: str 2 = 0,09 (teoretski). Vjerojatnost pojavljivanja niza od tri znaka je: str 3 = 0,009 (teoretski).

Na primjer, vjerojatnost pojavljivanja niza duljine jednog znaka jednaka je str L= 0,9, budući da može biti samo jedan znak od 10, a samo 9 znakova (nula se ne računa). A vjerojatnost da će se dva ista znaka "XX" sresti u nizu je 0,1 0,1 9, odnosno vjerojatnost 0,1 da će se znak "X" pojaviti na prvom mjestu pomnožena je s vjerojatnošću 0,1 da isti znak pojavit će se na drugom mjestu "X" i pomnoženo s brojem takvih kombinacija 9.

Učestalost pojavljivanja serija izračunava se prema formuli "hi-kvadrat" koju smo prethodno analizirali koristeći vrijednosti str L .

Napomena: Generator se može provjeriti više puta, ali provjere nisu potpune i ne jamče da generator proizvodi nasumične brojeve. Na primjer, generator koji proizvodi niz 12345678912345 smatrat će se idealnim tijekom provjera, što, očito, nije sasvim točno.

Zaključno, napominjemo da je treće poglavlje knjige "Umijeće programiranja" Donalda E. Knuta (2. svezak) u potpunosti posvećeno proučavanju slučajnih brojeva. Istražuje različite metode za generiranje slučajnih brojeva, statističke kriterije za slučajnost i transformaciju jednoliko raspodijeljenih slučajnih brojeva u druge vrste slučajnih varijabli. Prezentaciji ove građe posvećeno je više od dvjesto stranica.

Razne lutrije, izvlačenja itd. često se održavaju u mnogim grupama ili javnostima na društvenim mrežama, Instagramu itd., a koriste ih vlasnici računa kako bi privukli novu publiku u zajednicu.

Rezultat takvih izvlačenja često ovisi o sreći korisnika, budući da se dobitnik nagrade određuje nasumično.

Za takvo određivanje organizatori izvlačenja gotovo uvijek koriste mrežni generator slučajnih brojeva ili unaprijed instalirani generator koji se distribuira besplatno.

Izbor

Vrlo često može biti teško odabrati takav generator, jer je njihova funkcionalnost prilično različita - za neke je značajno ograničena, za druge prilično široka.

Implementira se prilično velik broj takvih usluga, ali poteškoća je u tome što se razlikuju po opsegu.

Mnogi su, na primjer, vezani svojom funkcionalnošću za određenu društvenu mrežu (na primjer, mnoge aplikacije generatora na VKontakte rade samo s vezama ove društvene mreže).

Najjednostavniji generatori jednostavno generiraju slučajni broj unutar zadanog raspona.

To je zgodno jer rezultat ne povezuje s određenom objavom, što znači da se mogu koristiti za izvlačenja izvan društvene mreže i u raznim drugim situacijama.

Druge im zapravo i nema koristi.

<Рис. 1 Генератор>

Savjet! Prilikom odabira najprikladnijeg generatora važno je uzeti u obzir svrhu za koju će se koristiti.

Tehnički podaci

Za najbrži proces odabira optimalne online usluge generiranja slučajnih brojeva, u tablici u nastavku prikazane su glavne tehničke karakteristike i funkcionalnost takvih aplikacija.

Tablica 1. Značajke funkcioniranja online aplikacija za generiranje slučajnog broja
Ime Društvena mreža Više rezultata Odaberite s popisa brojeva Mrežni widget za web stranicu Odaberite iz niza Isključite ponavljanja
randstuff Da Da Ne Da Ne
Cast Lots Službena stranica ili VKontakte Ne Ne Da Da Da
Slučajni broj Službena stranica Ne Ne Ne Da Da
randommus Službena stranica Da Ne Ne Da Ne
slučajni brojevi Službena stranica Da Ne Ne Ne Ne

Sve primjene navedene u tablici detaljnije su opisane u nastavku.

<Рис. 2 Случайные числа>

randstuff

<Рис. 3 RandStuff>

Ovu aplikaciju možete koristiti online putem veze na službenu web stranicu http://randstuff.ru/number/.

Ovo je jednostavan generator slučajnih brojeva, karakterizira brz i stabilan rad.

Uspješno se provodi iu obliku zasebne neovisne aplikacije na službenoj web stranici i kao aplikacija u društvenoj mreži VKontakte.

Posebnost ove usluge je u tome što može odabrati slučajni broj iz navedenog raspona i s određenog popisa brojeva koji se mogu navesti na web mjestu.

Prednosti:

  • Stabilan i brz rad;
  • Nedostatak izravne veze s društvenom mrežom;
  • Možete odabrati jedan ili više brojeva;
  • Možete birati samo između zadanih brojeva.

minusi:

  • Nemogućnost održavanja izvlačenja na VKontakteu (za to je potrebna zasebna aplikacija);
  • Aplikacije za VKontakte ne rade u svim preglednicima;
  • Rezultat se ponekad čini predvidljivim jer se koristi samo jedan algoritam izračuna.

Recenzije korisnika o ovoj aplikaciji su sljedeće: „Mi određujemo pobjednike u VKontakte grupama putem ove usluge. Hvala”, “Najbolji ste”, “Koristim samo ovu uslugu”.

Cast Lots

<Рис. 4 Cast Lots>

Ova aplikacija je jednostavan generator funkcija, implementiran na službenoj web stranici, u obliku aplikacije VKontakte.

Tu je i widget generator koji možete ugraditi na svoje web mjesto.

Glavna razlika u odnosu na prethodno opisanu aplikaciju je da vam omogućuje da onemogućite ponavljanje rezultata.

Odnosno, kada provodite nekoliko generacija zaredom u jednoj sesiji, broj se neće ponavljati.

  • Prisutnost widgeta za umetanje na web stranicu ili blog;
  • Mogućnost onemogućavanja ponavljanja rezultata;
  • Prisutnost funkcije "još više slučajnosti", nakon čije se aktivacije mijenja algoritam odabira.

Negativan:

  • Nemogućnost određivanja nekoliko rezultata odjednom;
  • Nemogućnost odabira s određenog popisa brojeva;
  • Da biste javno odabrali pobjednika, morate koristiti zasebni VKontakte widget.

Recenzije korisnika su sljedeće: "Radi stabilno, prilično je praktičan za korištenje", "Zgodna funkcionalnost", "Koristim samo ovu uslugu".

Slučajni broj

<Рис. 5 Случайное число>

Ova usluga se nalazi na http://random number.rf/.

Jednostavan generator sa minimum funkcija i dodatnih značajki.

Može nasumično generirati brojeve unutar zadanog raspona (maksimalno od 1 do 99999).

Stranica nema nikakav grafički dizajn, pa se stranica lako učitava.

Rezultat se može kopirati ili preuzeti pritiskom na gumb.

Negativan:

  • Nema widgeta za VKontakte;
  • Ne postoji mogućnost održavanja izvlačenja;
  • Ne postoji način za umetanje rezultata u blog ili web stranicu.

Evo što korisnici kažu o ovoj usluzi: “Dobar generator, ali nedovoljno funkcija”, “Vrlo malo mogućnosti”, “Prikladno za brzo generiranje broja bez nepotrebnih postavki.”

Randomus

<Рис. 6 Рандомус>

Ovaj generator slučajnih brojeva možete koristiti na http://randomus.ru/.

Još jedan jednostavan, ali funkcionalni generator slučajnih brojeva.

Usluga ima dovoljno funkcionalnosti za određivanje slučajnih brojeva, međutim, nije prikladna za održavanje izvlačenja i drugih složenijih procesa.

Negativan:

  • Nemogućnost održavanja izvlačenja na temelju post reposta itd.
  • Ne postoji aplikacija za VKontakte ili widget za web mjesto;
  • Nije moguće onemogućiti ponavljanje rezultata.

Brojevi nas prate posvuda - broj kuće i stana, telefon, automobil, putovnica, plastična kartica, datumi, lozinke za e-poštu. Neke kombinacije brojeva biramo sami, ali većinu dobijemo slučajno. Bez da smo toga svjesni, svaki dan koristimo nasumično generirane brojeve. Ako izmislimo pin kodove, tada jedinstvene kodove kreditnih ili platnih kartica generiraju pouzdani sustavi koji isključuju pristup lozinkama. Generatori slučajnih brojeva pružaju zaštitu u područjima koja zahtijevaju brzinu obrade, sigurnost i neovisnu obradu podataka.

Proces generiranja pseudoslučajnih brojeva podliježe određenim zakonitostima i već se dugo koristi, na primjer, prilikom izvođenja lutrija. U nedavnoj prošlosti izvlačenje se izvodilo pomoću lutrijskih bubnjeva ili ždrijeba. Sada se u mnogim zemljama dobitni brojevi državnih lutrija određuju upravo skupom generiranih nasumičnih brojeva.

Prednosti metode

Dakle, generator slučajnih brojeva neovisni je moderni mehanizam za slučajno određivanje kombinacija brojeva. Jedinstvenost i savršenstvo ove metode leži u nemogućnosti vanjskog uplitanja u proces. Generator je skup programa izgrađen, na primjer, na šumnim diodama. Uređaj generira tok nasumične buke, čije se trenutne vrijednosti pretvaraju u brojeve i čine kombinacije.

Generiranje brojeva daje trenutne rezultate - potrebno je nekoliko sekundi da se dovrši kombinacija. Ako govorimo o lutriji, sudionici mogu odmah saznati odgovara li broj listića dobitnom. To omogućuje izvlačenje onoliko često koliko sudionici žele. Ali glavna prednost metode je nepredvidljivost i nemogućnost izračuna algoritma odabira broja.

Kako se generiraju pseudoslučajni brojevi

Zapravo, slučajni brojevi nisu slučajni - niz počinje od zadanog broja i generira ga algoritam. Generator pseudoslučajnih brojeva (PRNG ili PRNG - generator pseudoslučajnih brojeva) je algoritam koji generira niz na prvi pogled nepovezanih brojeva, obično podložnih ravnomjernoj raspodjeli. U informatici se pseudoslučajni brojevi koriste u mnogim primjenama: u kriptografiji, simulaciji, Monte Carlu itd. Kvaliteta rezultata ovisi o svojstvima PRNG-a.

Izvor generiranja može biti fizička buka od kozmičkih zraka do buke otpornika, ali takvi se uređaji gotovo nikada ne koriste u aplikacijama za mrežnu sigurnost. Kriptografske aplikacije koriste posebne algoritme koji generiraju nizove koji ne mogu biti statistički slučajni. Međutim, dobro odabrani algoritam proizvodi niz brojeva koji prolaze većinu testova slučajnosti. Period ponavljanja u takvim nizovima veći je od radnog intervala iz kojeg su brojevi uzeti.

Mnogi moderni procesori sadrže PRNG, kao što je RdRand. Kao alternativa, kreiraju se skupovi nasumičnih brojeva i objavljuju u bloku za jednokratnu upotrebu (rječniku). Izvor brojeva u ovom je slučaju ograničen i ne pruža potpunu sigurnost mreže.

Povijest PRNG-a

Prototipom generatora slučajnih brojeva može se smatrati društvena igra Senet, uobičajena u starom Egiptu 3500. godine pr. Prema uvjetima sudjelovala su dva igrača, potezi su se određivali bacanjem četiri pljosnate crno-bijele palice – bile su kao PRNG tog vremena. Štapići su se bacali istovremeno, a bodovi su se brojali: ako je jedan pao bijelom stranom, 1 bod i dodatni potez, dva bijela - dva boda i tako dalje. Maksimalan rezultat od pet bodova dobio je igrač koji je bacio četiri palice crnom stranom.

Danas se ERNIE generator već godinama koristi u izvlačenju lutrije u Ujedinjenom Kraljevstvu. Postoje dvije glavne metode za generiranje dobitnih brojeva: linearni kongruentni i aditivni kongruentni. Ove i druge metode temelje se na načelu slučajnosti izbora i osigurava ih softver koji neograničeno proizvodi brojeve čiji se slijed ne može pogoditi.

PRNG radi kontinuirano, na primjer, u automatima za igre na sreću. Prema američkom zakonu, ovo je obvezan uvjet kojeg se moraju pridržavati svi dobavljači softvera.

Što je slučajnost u računalu? Kako se radi generiranje nasumičnog broja? U ovom smo članku pokušali dati jednostavne odgovore na ova pitanja.

U softveru i tehnologiji općenito postoji potreba za ponovljivom slučajnošću: brojevi i slike koji se čine slučajnima zapravo su generirani određenim algoritmom. To se zove pseudo-slučajnost, a mi ćemo pogledati jednostavne načine za generiranje pseudo-slučajnih brojeva. Na kraju članka formuliramo jednostavan teorem za generiranje ovih naizgled slučajnih brojeva.

Određivanje što je točno slučajnost može biti prilično izazovno. Postoje testovi (Kolmogorovljeva složenost, na primjer) koji vam mogu dati točnu mjeru koliko je određeni niz slučajan. Ali nećemo se mučiti, već jednostavno pokušati stvoriti niz brojeva koji će djelovati nepovezano jedan s drugim.

Često nije potreban samo jedan broj, već nekoliko nasumičnih brojeva koji se kontinuirano generiraju. Dakle, s obzirom na početnu vrijednost, moramo generirati druge slučajne brojeve. Ova početna vrijednost se zove sjeme, a kasnije ćemo vidjeti kako do njega. Za sada se usredotočimo na generiranje drugih slučajnih vrijednosti.

Generiranje nasumičnih brojeva iz sjemena

Jedan pristup bi mogao biti primijeniti neku ludu matematičku formulu na početnu vrijednost, zatim ju izvrnuti toliko da izlazni broj izgleda nepredvidiv, a zatim to uzeti kao početnu vrijednost za sljedeću iteraciju. Pitanje je samo kako bi ta funkcija distorzije trebala izgledati.

Eksperimentirajmo s ovom idejom i vidimo gdje će nas odvesti.

Funkcija distorzije će uzeti jednu vrijednost i vratiti drugu. Nazovimo ga R.

R(ulaz) -> izlaz

Ako je vrijednost našeg sjemena 1, tada će R stvoriti niz od 1, 2, 3, 4, ... Ne izgleda nimalo nasumično, ali doći ćemo do toga. Sada neka R doda konstantu umjesto 1.

R(x) = x + c

Ako je c jednako, na primjer, 7, tada dobivamo niz od 1, 8, 15, 22, ... Još uvijek nije točno. Očito, ono što nam nedostaje je da se brojevi ne samo povećavaju, već da budu raspršeni u nekom rasponu. Želimo da se naš niz vrati na početak - krug brojeva!

brojčani krug

Pogledajmo brojčanik sata: naš niz počinje od 1 i ide okolo do 12. Ali budući da radimo s računalom, stavimo 0 umjesto 12.

Sada, počevši od 1, ponovno ćemo dodati 7. Napredak! Vidimo da se nakon 12 naš niz počinje ponavljati, bez obzira od kojeg broja krećemo.

Ovdje dobivamo vrlo važno svojstvo: ako se naš ciklus sastoji od n elemenata, tada je najveći broj elemenata koje možemo dobiti prije nego što se počnu ponavljati n.

Sada ponovno napišimo R funkciju kako bi odgovarala našoj logici. Duljinu petlje možete ograničiti pomoću operatora modula ili operatora modula.

R(x) = (x + c) % m

R (x) = (x + c)% m

U ovom trenutku možete primijetiti da neki brojevi nisu prikladni za c. Ako je c = 4, a krenuli smo s 1, naš niz bi bio 1, 5, 9, 1, 5, 9, 1, 5, 9, … što nam naravno ne odgovara, jer ovaj niz apsolutno nije slučajan . Postaje jasno da brojevi koje biramo za duljinu ciklusa i duljinu skoka moraju biti povezani na poseban način.

Ako isprobate nekoliko različitih vrijednosti, možete vidjeti jedno svojstvo: m i c moraju biti međusobno prosti.

Do sada smo skakali zbrajanjem, ali što ako koristimo množenje? Umnožimo se x na konstantu a.

R(x) = (ax + c) % m

R (x) = (ax + c) % m

Svojstva kojima se mora pokoravati da bi formirao potpuni ciklus malo su specifičnija. Za stvaranje važeće petlje:

  1. (a - 1) mora biti djeljiv sa svim prostim faktorima m
  2. (a - 1) mora biti djeljiv s 4 ako je m djeljiv s 4

Ova svojstva, zajedno s pravilom da m i c moraju biti međusobno prosti, čine Hull-Dobellov teorem. Nećemo ulaziti u dokaze toga, ali ako ste uzeli hrpu različitih vrijednosti za različite konstante, mogli biste doći do istog zaključka.

Izbor sjemena

Vrijeme je da razgovaramo o najzanimljivijem dijelu: izboru početnog sjemena. Mogli bismo to učiniti konstantom. Ovo može biti korisno kada trebate nasumične brojeve, ali želite da budu isti svaki put kada pokrenete program. Na primjer, stvaranje iste karte za svaku igru.

Drugi način je da dobijete seed iz novog izvora svaki put kada se program pokrene, baš kao u sistemskom satu. Ovo je korisno kada vam je potreban ukupni nasumični broj, kao u programu za bacanje kockica.

Konačni rezultat

Kada više puta primijenimo funkciju na njen rezultat, dobivamo relaciju ponavljanja. Napišimo našu formulu pomoću rekurzije.

Mrežni generator brojeva praktičan je alat koji vam omogućuje da dobijete potreban broj brojeva zadane bitne dubine i najšireg raspona. Postoje mnoge upotrebe za naš generator slučajnih brojeva! Na primjer, možete održati natjecanje na VKontakteu i tamo igrati plišanog medvjedića u grupi biciklista za odgovor :)) Također ćemo biti vrlo polaskani ako ga odlučite koristiti za određivanje dobitnog broja na lutriji ili odlučite koji broj za klađenje u kasinu . Iskreno se nadamo da će netko pronaći svoj sretni broj online kod nas!

Raspon nasumičnih brojeva:

Količina:

Eliminirati ponavljanje?

generirati brojeve

Pomozite nam da razvijemo: Recite svojim prijateljima o generatoru!

Slučajno | nasumični broj online u 1 klik

Brojevi nas okružuju od rođenja i igraju važnu ulogu u životu. Za mnoge je sam rad povezan s brojevima, netko se oslanja na sreću, puneći srećke brojevima, a netko im daje potpuno mistično značenje. Na ovaj ili onaj način, ponekad ne možemo bez korištenja programa kao što je generator slučajnih brojeva.

Na primjer, trebate organizirati izvlačenje nagrada među pretplatnicima vaše grupe. Naš mrežni generator nasumičnih brojeva pomoći će vam da brzo i pošteno odaberete dobitnike. Samo trebate, primjerice, postaviti željeni broj nasumičnih brojeva (prema broju dobitnika) i maksimalni raspon (prema broju sudionika, ako su im dodijeljeni brojevi). Prijevara je u ovom slučaju potpuno isključena.

Ovaj program također može poslužiti kao generator slučajnih brojeva za loto. Na primjer, kupili ste listić i želite se potpuno osloniti na slučajnost i sreću u odabiru brojeva. Tada će vam naš randomizator brojeva pomoći da popunite svoj lutrijski listić.

Kako generirati slučajni broj: upute

program za odabir slučajnih brojeva radi vrlo jednostavno. Ne morate ga čak ni preuzimati na svoje računalo - sve se radi u prozoru preglednika u kojem je ova stranica otvorena. Generiranje nasumičnih brojeva događa se u skladu s navedenim brojem brojeva i njihovim rasponom - od 0 do 999999999. Da biste generirali broj online, morate:

  1. Odaberite raspon u kojem želite dobiti rezultat. Možda želite odrezati brojeve do 10 ili, recimo, 10000;
  2. Uklonite ponavljanja - odabirom ove stavke, prisilit ćete randomizator brojeva ponuditi samo jedinstvene kombinacije unutar određenog raspona;
  3. Odaberite broj brojeva - od 1 do 99999;
  4. Pritisnite gumb Generiraj brojeve.

Bez obzira na to koliko brojeva želite dobiti kao rezultat, generator prostih brojeva će dati cijeli rezultat odjednom, a možete ga vidjeti na ovoj stranici listanjem kroz polje s brojevima pomoću miša ili touchpada.

Sada možete koristiti gotove brojeve onako kako vam je potrebno. Iz polja s brojem možete kopirati rezultat za objavu u grupi ili slanje poštom. I kako nitko ne bi sumnjao u rezultat, napravite snimku zaslona ove stranice na kojoj će biti jasno vidljivi parametri randomizatora brojeva i rezultati programa. Brojke u polju je nemoguće mijenjati pa je mogućnost manipulacije isključena. Nadamo se da su vam naša web stranica i generator slučajnih brojeva pomogli.

Najpopularniji povezani članci