21
Algoritmi generisanja pseudoslučajnih brojeva Krsto Proroković

Algoritmi generisanja pseudoslučajnih brojeva

Embed Size (px)

DESCRIPTION

Algoritmi generisanja pseudoslučajnih brojeva

Citation preview

Page 1: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

Krsto Proroković

Page 2: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

Sadržaj:

1. ŠTA SU PSEUDOSLUČAJNI BROJEVI?....................................................................................................31.1. SLUČAJNI BROJEVI..........................................................................................................................................31.2. PSEUDOSLUČAJNI BROJEVI...........................................................................................................................3

2. ALGORITMI GENERISANJA PSEUDOSLUČAJNIH BROJEVA.......................................42.1. METODA SREDINE KVADRATA....................................................................................................................52.2. BLUM-BLUM-ŠUB...........................................................................................................................................72.3. LINEARNI KONGRUENTNI GENERATOR.....................................................................................................8

2.3.1. Lemerov algoritam generisanja pseudoslučajnih brojeva........................................................92.3.2. M generator................................................................................................................................................ 9

2.4. INVERZIVNI KONGRUENTNI GENERATOR..............................................................................................102.5. FIBONAČIJEV GENERATOR SA KAŠNJENJEM.........................................................................................11

3. JOŠ NEKI ALGORITMI GENERISANJA PSEUDOSLUČAJNIH BROJEVA...............12

4. PROCJENA KVALITETA.............................................................................................................13

5. INDEKS KLJUČNIH RIJEČI....................................................................................................... 14

6. Spisak literature i izvora........................................................................................................................................2

Krsto Proroković2

Page 3: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

1. Šta su pseudoslučajni brojevi?

1.1. Slučajni brojevi

Slučajni brojevi (eng. random numbers) su nizovi brojeva koji se ne pokoravaju nikakvom obrascu, tj. ne postoji obrazac po kojem se dobijaju. Slučajni brojevi se javljaju u prirodnim pojavama i situacijama koje je nemoguće predvidjeti. S obzirom da je samo pojavljivanje nizova slučajnih brojeva potpuno nepredvidivo, nemoguće je odrediti da li je neki niz slučajan ili ne. Dokazano je da svi nizovi brojeva pokazuju neke od karakteristika koje se očekuju od od nizova slučajnih brojeva.

1.2. Pseudoslučajni brojevi

Pseudoslučajni brojevi (eng. pseudo-random numbers, grč. pseudo – lažan, neistinit) su brojevi dobijeni po nekom obrascu (ili algoritmu), ali se smatraju slučajnima pošto mi taj obrazac u mislima ne možemo rekonstruirati.

Krsto Proroković3

Page 4: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

2. Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva (ili generatori pseudoslucajnih brojeva) su algoritmi pomoću kojih se dobijaju nizovi pseudoslučajnih brojeva. Ulazni podatak u svakom algoritmu generisanja pseudoslučajnih brojeva je sjeme (eng. seed), tj. slučajni broj koji predstavlja prvi član niza pseudoslučajnih brojeva. Svi algoritmi generisanja pseudoslučajnih brojeva zasnovani su na rekurzivnim aritmetičkim ili logičkim formulama. Za izračunavanje sljedećeg člana niza možemo upotrijebiti samo jedan ili više već izračunatih članova.Iako se radi o velikom broju mogućih pseudoslučajnih brojeva koji se mogu dobiti izvršavanjem ovih algoritama i dalje se radi o konačnom broju. Ukoliko je dobijeni pseudoslučajni broj jednak nekom od prethodno dobijenih pseudoslučajnih brojeva u nizu, dolazi do cikličnog ponavljanja nekog već generisanog podniza. Najveća dužina niza prije nego što on počne da se ponavlja naziva se period i on se mjeri u bitima. Drugim riječima, period je broj pseudoslučajnih brojeva u nizu koji se ciklički ponavlja.

Primjena ovih algoritama moze se podijeliti u dvije grupe:

1. Kriptografija (šifrovanje ili kodiranje) – sigurnost poruke direktno zavisi od kvaliteta šifrovanja; šifrovanje se zasniva na kljucevima (eng. keys) koji se generišu pomocu ovih algoritama.

2. Računarske simulacije – opsisivanje realnog događaja uz pomoć brojeva.

Ovi algoritmi su najviše korišteni u izradi mašina za kockanje, kao i u izradi video igara i lava lampi.

Krsto Proroković4

Page 5: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

U nastavku seminarskog rada biće prikazani sljedeći algoritmi generisanja pseudoslučajnih brojeva:

Metoda sredine kvadrata Blum-Blum-Šub Linearni kongruentini generator Inverzivni kongruentni generator Fibonačijev generator sa kašnjenjem

2.1. Metoda sredine kvadrata

„Svako ko smatra da se korišćenjem aritmetičkih operacija mogu dobiti slučajni brojevi, svakako da je zgriješio.”

Džon fon Nojman

Metoda sredine kvadrata je algoritam generisanja pseudoslučanih brojeva, objavljen 1946.g. od strane Mađarsko-Američkog matematičara Džona fon Nojmana (John von Neumann). Algoritam glasi:

1. Uzeti neki prirodan broj od n cifara (sjeme).2. Kvadrirati ga.3. Od dobijenog broja izdvojiti sredjih n cifara; broj sačinjen od tih cifara predstavlja

pseudoslučajni broj.4. Ukoliko zelite da generišete još pseudoslučajnih brojeva ponovite korake 2 i 3,

tako što ćete za sjeme uzeti već dobijeni pseudoslučajni broj.

Primjer: 1. Sjeme: 675248

2. Kvadrat sjemena: 455959861504

3. Pseudoslučajni broj: 959861 4.

Period ovog algoritma za generisanje pseudoslučajnih brojeva ne može biti veći od , gdje je n broj cifara sjemena.Grafički prikaz algoritma bi izgledao ovako:

Krsto Proroković5

Page 6: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

Krsto Proroković6

Page 7: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

predstavlja sjeme, n broj cifara sjemena, a dobijeni pseudoslučajni broj ( , i n su prirodni brojevi)

Zadatak 1: Ako se za sjeme uzme 1111, koji će se pseudoslučajni brojevi dobiti ako se algoritam izvrši 3 puta?Zadatak 2: U nekom od poznatih programskih jezika, napisati program koji generiše pseudoslučajne brojeve primjenom metode srednjeg kvadrata.

2.2. Blum-Blum-Šub

Blum-Blum-Šub (eng. Blum-Blum-Shub) je algoritam generisanja pseudoslučajnih brojeva koji su 1986.g. objavili Manuel Blum (eng. Manuel Blum), Lenore Blum (eng. Lenore Blum) i Majkl Šub (eng. Michael Shub). Obrazac ovog algoritma po kom se dobijaju pseudoslučajni izgleda ovako:

gdje je M prizvod dva velika, uzajamno prosta broja p i q takva da oba pri dijeljenju sa 4 daju isti ostatak. Za sjeme ( ) uzima se broj koji je različit od 1 i koji nije uzajamno prost sa M (p i q ne smiju biti faktori ).Ovaj algoritam nije pogodan za upotrebu u računarskim simulacijama, već samo samo u kriptografiji, jer se izvršavanje algoritma odvija veoma sporo.

Primjer: Neka je p=7, q=19 i sjeme =100. Tada je M=p*q=7*19=133.

...

Dobijamo sljedeće pseudoslučajne brojeve: 25, 93, 4, 16 itd.

Zadatak 1: Ako je p=11, q=19 i sjeme =3, koji će se pseudoslučajni brojevi dobiti ako se algoritam izvrši 3 puta?Zadatak 2: U nekim od poznatih programskih jezika, napisati program koji generiše pseudoslučajne brojeve primjenom Blum-Blum-Šub-a.

Krsto Proroković7

Page 8: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

2.3. Linearni kongruentni generator

Linearni kongruentni generator je jedan od najstarijih i najpoznatijih algoritama generisanja pseudoslučajnih brojeva. U ovom algoritmu, pseudoslučajni brojevi u nizu se dobijaju po sljedećem obrascu:

gdje su m, a i c konstante takve da:m > 0

0 < a < m0 ≤ c < m

m (modulus) predstavlja gornju granicu pseudoslučajnih brojeva koji nastaju i za m se najčešće uzim broj oblika (M je prirodan broj). Za sjeme ( ) uzima se broj takav da

0 ≤ < m

U zavisnosti od c izdvajaju se 2 vrste linear congruential generator-a:

1. c = 0, multiplikativni kongruentni generator – najveći period koji može postići ovaj linearni kongruentni generator je četvrtina m i to je moguće samo ako se odabere konstanta a takva da pri dijeljenju sa 8 daje ostatak 3 ili pri dijeljenju sa 8 daje ostatak 5.

2. c > 0, mješoviti kongruentni generator – ako se odabere konstanta a takva da pri dijeljenju sa svim prostim djeliocima konstante m daje ostatak 1 i pri dijeljenju sa 4 daje ostatak 1 i konstanta m takva da se 4 sadži u m, postiže se puni period u vrijednosti od m.

Linearni kongruentni generator je veoma brzi algoritam generisanja pseudoslučajnih brojeva, što ga čini jako pogodnim za računarske simulacije. Ovaj algoritam koristi se za generisanje pseudoslučajnih brojeva u većini programskih jezika.

Zadatak 1: U nekom od poznatih programskih jezika, napisati program koji generiše pseudoslučajne brojeve primjenom: a) multiplikativnog kongruentnog generatora b) mješovitog kongruentnog generatora.

Krsto Proroković8

Page 9: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

2.3.1. Lemerov algoritam generisanja pseudoslučajnih brojeva

Lemerov algoritam za generisanje pseudoslučajnih brojeva, nazvan po njegovom tvorcu, američkom matematičaru Deriku Henri Lemeru (eng. Derrick Henry Lehmer) je poseban slučaj multiplikativnog kongruentnog generator-a. Obrazac za dobijanje pseudoslučajnih brojeva u nizu u ovom algoritmu je:

gdje je (Mersenov prost broj ) i . Vrijednosti ovih parametara, predložili su 1988.g. Stiven Park (eng. Stephen Park) i Kit Miller (eng. Keith Miller), zbog kojih se ovaj algoritam generisanja pseudoslučajnih brojeva još naziva i Park-Miller alogiritam generisanja pseudoslučajnih brojeva.

2.3.2. M generator

Ukoliko želimo da dobijemo pseudoslučajne brojeve bolje „slučajnosti“ možemo upotrijebiti dva linear congruential generator-a, pri čemu dobijamo M generator. Ideja je sljedeća: koristimo jedan linear congruential generator kako bi dobili niz pseudoslučajnih brojeva dužine n. Zatim korišćenjem drugog linear congruential generator-a generišemo pseudoslučajan broj k koji se nalazi između 1 i n. U izlazni niz stavljamo k-ti član prvog niza, zatim ponovo generišemo broj između 1 i n, itd.Algoritam glasi:

1. pomoću linear congruential generator-a 1 generisati niz , i = 1, 2, ..., n2. pomoću linear congruential generator-a 2 generisati pseudoslučajan broj k između

1 i n3. u nizu P pronaći k-ti član4. uzeti za izlazni pseudoslučajni broj5. generisati novu vrijednost za 6. ponavljati korake 2-5 dok se ne dobije niz željene dužine

Postupak se može prikazati sljedećom šemom:

Krsto Proroković9

Page 10: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

2.4. Inverzivni kongruentni generator

Inverzivni kongruentni generator (eng. inversive congruential generator) je vrsta nelinearnog kongruentnog generatora. Obrazac za dobijanje pseudoslučajnih brojeva u nizu glasi:

, za

, za

gdje je q prost broj, a a i c prirodni brojevi.Niz , mora imati poslije konačno mnogo koraka. Pošto sljedeći član u nizu zavisi samo od prethodnog, tada će . Maksimalni period koji može postić ovaj algoritam generisanja pseudoslučajnih brojeva je q.

Primjer: Neka je q=5, a=2, c=3 i =1.

Krsto Proroković10

Page 11: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

...

Dobijamo sljedeće pseudoslučajne brojeve: 0, 3, 2, 4, 1. Vidi se da je , što znači da će se ovih 5 članova ponavljati. Dakle, period je q=5.

Zadatak 1: U nekom od poznatih programskih jezika, napisati program koji generiše pseudoslučajne brojeve primjenom inverzivnog kongruentnog generatora.

2.5. Fibonačijev generator sa kašnjenjem

Ideja za Fibonačijev generator sa kašnjenjem (eng. lagged Fibonacci generator) zasniva se na obrazcu za rekurzivno određivanje Fibonačijevih brojeva:

, ,

Obrazac za dobijanje pseudoslučajnih brojeva u nizu je sledeći:

,

gdje predstavlja neku binarnu operaciju. m je najčsešće 2 podignut na neki stepen, obično ili .Fibonačijev generator sa kašnjenjem ima maksimalni period ako je za operacuju uzeto sabiranje ili oduzimanje, ili ako je za operaciju uzeto množenje. Dakle, period Fibonačijevog generatora sa kašnjenjem sa operacijom sabiranja ili oduzimanja biće 4 puta veći od perioda Fibonačijevog generatora sa kašnjenjem sa operacijom množenja.

Zadatak 1: U nekom od poznatih programskih jezika, napisati program koji generiše pseudoslučajne brojeve primjenom Fibonačijevog generatora sa kašnjenjem sa operacijom: a) sabiranja b) oduzimanja c) množenja.

Krsto Proroković11

Page 12: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

3. Još neki algoritmi generisanja pseudoslučajnih brojeva

Generator linearno pomjerajućeg registra (eng. Linear feedback shift register) – U ovom algoritmu generisanja pseudoslučajnih brojeva, za dobijanje pseudoslučajnih brojeva koriste se logičke operacije. Ovaj algoritam je široko primijenjen u kriptografiji.

Xorshift – Ovaj algoritam predstavlja podklasu genertora linearno pomjerajućeg registra. Osmislio ga je Džordž Marsaglia (eng. George Marsaglia). Ovaj algoritam generisanja pseudoslučajnih brojeva ima period od .

Mersenov uvijač (eng. Mersenne twister) – Razvijen je 1997.g. od strane japanskih matematičara Makata Matsumota i Takudži Mišimure. Zasnovan je na matričnoj linearnoj rekurziji nad konačnim poljem. Pomoću ovo algoritma generisanja pseudoslučajnih brojeva brzo se generišu visoko kvalitetni pseudoslučajni brojevi. Sam algoritam je napravljen da bi ispravio mane prethodno nastalih algoritama pseudoslučajnih brojeva. Njegov naziv potiče od činjenice da je za dužinu perioda uzet Mersenov prost broj. U zavisnosti od vrijednosti Mersenovog prostog broja razlikujemo dvije vrste Mersenovog uvijača – MT19937 i MT19937-64. Novija i češće korišćena varijanta, MT19937 ima veoma dug period u vrijednosti od .

ISAAC (od eng. indirection, shift, accumulate, add, count) – Dizajnirao ga je Robert Dženkins (eng. Robert Jenkins) za upotrebu u kriptografiji.

Fortuna – Kriptografski siguran algoritam generisanja pseudoslučajnih brojeva, smišljen od strane Brusa Šnajera (eng. Brus Schneier) i Nilsa Fergusona (eng. Niels Ferguson). Dobio je naziv po Fortuni, rimskoj boginji sreće.

Krsto Proroković12

Page 13: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

4. Procjena kvaliteta

Njemačka Federalna Služba za Informacionu Bezbjednost je uspostavila 4 standarda kvaliteta algoritama za generisanje pseudoslučajnih brojeva:

K1 – Niz pseudoslučajnih brojeva sa malom vjerovatnoćom sadržnja identičnih uzastopnih članova

K2 – Niz pseudoslučajnih brojeva koji se ne može razlikovati niza „pravih slučajnih” brojeva. Ovakav niz se određuje preko određenih testova – monibit test, poker test, runs test, longruns test i autocorrelation test.

K3 – Niz u kojem je bi trebalo biti nemoguće izračunati ili pogoditi bilo koji prethodni ili sljedeći član niza na osnovu datog podniza.

K4 – Niz u kojem bi trebalo biti nemoguće izračunati ili pogoditi bilo koji prethodni ili sljedeći član niza ili prethodno stanje, na osnovu datog stanja.

Za upotrebu u kriptografiji, jedino algoritmi generisanja pseudoslučajnih brojeva koji zadovoljavaju K3 ili K4 standard su prihvatljivi.

Krsto Proroković13

Page 14: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

5. Indeks ključnih riječi

A

algoritmi generisanja pseudoslučajnih brojeva.......................................................................................4

B

Blum-Blum-Šub............................................................7

F

Fibonačijev generator sa kašnjenjem..............11Fortuna..........................................................................12

G

generator linearno pomjerajućeg registra....12

I

Inverzivni kongruentni generator.....................10ISAAC..............................................................................12

L

Lemerov algoritam za generisanje pseudoslučajnih brojeva.....................................9

M

M generator....................................................................9Mersenov uvijač........................................................12metoda sredine kvadrata.........................................5mješoviti kongruentni generator.........................8multiplikativni kongruentni generator..............8

P

period...............................................................................4pseudoslučajni brojevi..............................................3

S

sjeme.................................................................................4slučajni brojevi.............................................................3

X

Xorshift..........................................................................12

Krsto Proroković14

Page 15: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

6. Spisak literature i izvora

[1] Donald E. Knuth (1997) The Art of Computer Programming Volume 2: Seminumerical Algorithms (3rd Edition) Addison-Wesley Professional, Chapter 3 – Random Numbers

[2] http://en.wikipedia.org/wiki/Pseudorandom_number_generator

[3] http://en.wikipedia.org/wiki/Middle-square_method

[4] http://en.wikipedia.org/wiki/Blum_Blum_Shub

[5] http://en.wikipedia.org/wiki/Linear_congruential_generator

[6] http://en.wikipedia.org/wiki/Park–Miller_random_number_generator

[7] http://en.wikipedia.org/wiki/Inversive_congruential_generator

[8] http://en.wikipedia.org/wiki/Lagged_Fibonacci_generator

[9] http://en.wikipedia.org/wiki/Linear_feedback_shift_register

[10] http://en.wikipedia.org/wiki/Xorshift

[11] http://en.wikipedia.org/wiki/Mersenne_twister

[12] http://en.wikipedia.org/wiki/ISAAC_(cipher)

[13] http://en.wikipedia.org/wiki/Fortuna_(PRNG)

[14] http://sr.wikipedia.org/sr-el/Случајни_бројеви

[15] http://os2.zemris.fer.hr/random/2001_marekovic/index.html

[16] http://os2.zemris.fer.hr/random/2001_juric/index.html

[17] http://www.scribd.com/doc/63056328/32/Generator-pseudoslučajnih-brojeva

Krsto Proroković15

Page 16: Algoritmi generisanja pseudoslučajnih brojeva

Algoritmi generisanja pseudoslučajnih brojeva

[18] http://wiki.etf.rs/mediawiki/images/IR4PRS_generisanje_pseudoslucajnih_brojeva.pdf

[19] http://fizika.mylivepage.ru/wiki/306_General/394_Generator_slučajnih_brojeva

Krsto Proroković16