A következőkben véletlen számok generálásával fogunk foglalkozni. Ezek az általunk készített számok valójában „ ál- (pszeudo-)véletlenszámok”, hiszen egy meghatározott szabály szerint képezzük őket egy adott véletlen kezdőértékből, a „ magból”. (Ezt általában a számítógép órája alapján képzik). Lehetne „igazi” véletlen számokat is generálni a radioaktív bomlást vagy a kvantumfizika egyéb jelenségeit használva, de ezek vagy nem volnának kellően hatékonyak, vagy megvalósításuk ütközik technikai nehézségekbe. A véletlen számokat általában 2-es számrendszerben adjuk meg, azaz véletlen 0,1 sorozatokkal. Mikor jó egy véletlenszám- generátor? Könnyebb azt definiálni, hogy mikor rossz: akkor mondjuk, hogy feltörhető, ha elegendő tag (mondjuk az első n ) ismeretében valaki hatékony számolással, azaz polinomiális idő alatt meg tudja mondani vagy legalábbis tippelni, hogy mi lesz a sorozat következő tagja. Ha valaki fel akarja törni a generátorunkat, akkor 1/2 esélye biztos van rá, hogy eltalálja a következő jegyet (a korábbi jegyektől teljesen függetlenül, pénzfeldobással tippelhet). Azt akarjuk, hogy ennél sokkal nagyobb esélye ne is legyen: azaz polinomiális idő alatt senki se tudja megtenni. Azt, hogy egy generátor megbízható-e ebben az értelemben, egyáltalában nem könnyű ellenőrizni. Az egyik első képzési módot Neumann János adta meg: legyen pl. a mag x 1 = 10101001 , képezzük ennek a négyzetét, és vegyük ki a középső 8 számjegyet, ez lesz
13
Embed
web.cs.elte.huweb.cs.elte.hu/.../markus/InfoValszam/Velszamgen.docx · Web viewAzt, hogy egy generátor megbízható-e ebben az értelemben, egyáltalában nem könnyű ellenőrizni.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
A következőkben véletlen számok generálásával fogunk foglalkozni. Ezek az általunk készített
számok valójában „ ál- (pszeudo-)véletlenszámok”, hiszen egy meghatározott szabály szerint
képezzük őket egy adott véletlen kezdőértékből, a „ magból”. (Ezt általában a számítógép órája
alapján képzik). Lehetne „igazi” véletlen számokat is generálni a radioaktív bomlást vagy a
kvantumfizika egyéb jelenségeit használva, de ezek vagy nem volnának kellően hatékonyak,
vagy megvalósításuk ütközik technikai nehézségekbe.
A véletlen számokat általában 2-es számrendszerben adjuk meg, azaz véletlen 0,1 sorozatokkal.
Mikor jó egy véletlenszám-generátor? Könnyebb azt definiálni, hogy mikor rossz: akkor
mondjuk, hogy feltörhető, ha elegendő tag (mondjuk az első n ) ismeretében valaki hatékony
számolással, azaz polinomiális idő alatt meg tudja mondani vagy legalábbis tippelni, hogy mi
lesz a sorozat következő tagja. Ha valaki fel akarja törni a generátorunkat, akkor 1/2 esélye
biztos van rá, hogy eltalálja a következő jegyet (a korábbi jegyektől teljesen függetlenül,
pénzfeldobással tippelhet). Azt akarjuk, hogy ennél sokkal nagyobb esélye ne is legyen: azaz
polinomiális idő alatt senki se tudja megtenni.
Azt, hogy egy generátor megbízható-e ebben az értelemben, egyáltalában nem könnyű
ellenőrizni. Az egyik első képzési módot Neumann János adta meg: legyen pl. a mag x1 =
10101001 , képezzük ennek a négyzetét, és vegyük ki a középső 8 számjegyet, ez lesz x2 , majd
hasonlóan folytassuk az eljárást x2 -vel és így tovább. Ez a módszer azonban nem volt jó, mivel
viszonylag könnyen fel lehetett törni (sok esetben nagyon hamar periodikussá vált a sorozat).
Egy másik módszer a , vagy általánosabban (ahol az x mag egy viszonylag kicsi pozitív
egész szám) számjegyeinek a felhasználása, ami ugyan soha nem lesz periodikus, de más
okokból ugyancsak nem megfelelő. A gyakorlatban legtöbbet használt generátor a
kongruenciális generátor a következőképpen működik: legyen x a mag, A, B, illetve N pozitív
egészek, és xi=(Axi-1+B) mod N . Ez az eljárás könnyen programozható, gyors, és általában jó
eredményt ad, de a fenti szigorú elméleti követelményeknek nem felel meg (vagyis feltörhető).
Annál meglepőbb, hogy van ilyen értelemben „jó” véletlenszám-generátor is. Ehhez be kell
vezetnünk az egyirányú függvény fogalmát: Legyen f: N -› N egy-egyértelmű függvény, f -et
egyirányúnak nevezzük, ha f hatékonyan kiszámítható, de f-1 nem. A Goldreich–Levin féle
generátor egy ilyen egyirányú függvényt használ, és erről be lehet bizonyítani, hogy ezt a
sorozatot nem lehet feltörni polinomiális idő alatt.
Inverz eloszlásfüggvény módszer
Tétel: Legyen X val. vált., F(x) eloszlásfüggvénnyel, amely monoton növekedő és folytonos.
Ekkor
i. F(X) egyenletes eloszlású [0,1] –en
ii. Ha U ~ U(0,1) akkor F-1(U) eloszlásfüggvénye F(x) .
Pl.: Ha X ~ exp(λ) => F(x)=1-exp(- λx), => F-1(x)= -ln(1-x)/λ