Naključna števila

Naključna števila

Avtor: Matej Rožič

Učni cilji: Spoznati nekaj algoritmov za pridobivanje naključnih števil. Spoznati algoritem pridobivanja naključnih števil po linearni kongruentni metodi.

Naključna števila

Pri ustvarjanju programov velikokrat uporabljamo naključna števila oziroma funkcijo, ki se v javi imenuje Math.random(), v Pythonu random.random() in nam kot rezultat vrne naključno število. Seveda pa si računalnik ne mora izmislit naključnega števila, saj je vendarle stroj, tako naključna števila nekako izračuna. Nekaj algoritmov za izračun naključnih števil bomo omenili v nadaljevanju. Ker je prehod iz naravnih števil (z vključno številom 0) v decimalna števila enostaven, samo delimo z največjim številom, bomo v nadaljnjem besedilu govorili predvsem o naravnih številih, ki lahko zasedejo tudi manj pomnilnika. Običajno je rezultat funkcije za generiranje naključnih števi rezultat število v intervalu [0,1).

Predstavili bomo algoritme:

Kvadrat prejšnega števila

Algoritem K

Linearna kongruentna metoda

Matej Rožič

Naslov pojavnega okna

Vsebina pojavnega okna... Ta pojavno okno ima oba stila. če potrebuješ, da se kaj pokažemogoč urediš pri izrekih !!!

Zapri

Prikaži Skrij

Kako je to lepo, da se tudi to pokaže.

Kvadrat prejšnega števila

Leta 1946 je von Neuman predlagal algoritem, ki je temeljil na aritmetični operaciji. Predlagal je, da bi dobil naslednje »naključno« število kot vmesna števila v kvadratu predhodnega naključnega števila. Primer: Če je naključno 10 mestno število 5772156649, potem za izračun naslednika kvadriramo število 5772156649 in dobimo število 33317792380594909201. Nato vzamemo iz sredine (33317792380594909201) novo naključno 10 mestno število, ki je v tem primeru 7923805949. Seveda števila po takem algoritmu niso »naključna«, ker je vsako število določeno s predhodnikom. Algoritem ima tudi težavo, da se nekatera števila samopredvajajo kot na primer, ko enkrat dobimo število 0 potem so vsa naslednja naključna števila 0.

Algoritem K

Algoritem za delovanje potrebuje prvo 10 mestno število X. Iz njega po korakih izračunamo naslednika.

Koraki so:

K1. [Izberemo število ponovitev] Število X delimo z 109, da dobimo najbolj obteženo števko rečemo ji število Y.

K2. [Izberemo naključen korak] Nastavimo število Z kot X/108 mod 10 (druga najbolj obtežena števka pri številu X). Sedaj gremo v korak K(3+Z) {ki je kot naključni korak v programu.

K3. [Zagotovimo, da je X ≥ 5•109] Če je X< 5•109 potem nastavimo X na X+5•109.

K4. [Sredinski kvadrat] Nadomestimo X z X2/105 mod 1010, to je sredina v kvadratu števila X.

K5. [Večkratnik] Nastavimo X kot vrednost 1001001001•X mod 1010.

K6. [Nepravi komplement] Če je X < 108 nastavimo X kot X+9814055677 drugače pa nastavimo X kot 1010-X.

K7. [Zamenjava vrstnega reda prvih pet števk z zadnjimi] Zamenjamo število X s številom 105•(X mod 105) + (X/105), kar je isto kot srednjih 10 števk izraza (1010+1)•X

K8. Enako kot K5.

K9. Povečamo vsako neničelno števko za 1.

K10. [99999 modulacija] Če je X < 105 potem nastavimo vrednost X na X2 +99999, v nasprotnem primeru pa nastavimo na X – 99999.

K11. [Normalizacija] Če je X<109 potem nastavimo vrednost X na 10X in ponavljamo, dokler številno ni večje kot 109.

K12. [Moderirana kvadratna sredina] Nadomestimo X z vrednostjo [X(X-1)/105] mod 1010 (to je srednjih 10 števk števila X(X-1).

K13. [Ponovitev] Če je Y>0, zmanjšamo Y za 1 in se vrnemo na korak K2. Če je Y=0 potem je število X novo naključno število.

Algoritem K - težave

Tak algoritem ima tudi težave, saj obstajajo števila, ki se samo generirajo. Tak primer števila je 6065038420.

Poglejmo korake pri izračunavanju novega "naključnega" števila po algoritmu K:

KorakX (izr. po koraku)
K16065038420
K36065038420
K46910360760
K58031120760
K81968879240
K77924019688
K59631707688
K98520606577
K108520506578
K118520506578
K12323372207Y=6
K69676627793
K72779396766
K84942162766
K93831051655
K103830951656
K113830951656
K121905867781Y=5
K123319967479Y=4
K66680032521
K73252166800
K82218966800
K91107855700
K101107755701
K111107755701
K121226919902Y=3
K548821902
K69862877579
K77757998628
K82384626628
K91273515517
K101273415518
K111273415518
K125870802097Y=2
K115870802097
K123172562687Y=1
K41540029446
K57015475446
K62984524554
K72455429845
K52730274845
K91620163134
K101620063735
K111620063735
K126065038420Y=0

Linearna kongruentna metoda

Največkrat se uporablja metoda, v kateri naslednje naključno število izračunamo s pomočjo deljenja po modulu mnogokratnika predhodnega naključnega števila , ki ga povečamo za neko število .

pri čemer je . Za to morajo biti izpolnjeni pogoji:

Vendar pa ima tak generator značilnost.

Poglejmo primer:

in potem dobimo zaporedje naključnih števil:

Opazimo, da ima zaporedje naključnih števil periodo, v našem primeru dolžine 4.

Mogoče je to zgolj slučaj. Poglejmo si še več primerov.

Naključna števila - primeri period

  1. in , , Dobimo zaporedje

  2. = 10 in , , Dobimo zaporedje

  3. in , , Dobimo zaporedje

  4. in , , Dobimo zaporedje

Opazimo, da imajo lahko zaporedja števil različno periodo od 1 v primeru 3 pa vse do 10 v primeru 4.

Če želimo uporabni generator naključnih števil potem potrebujemo takega z relativno dolgo periodo. V ta namen moramo uporabit »magična« števila , , in . O njihovih vrednostih v nadaljevanju.

Poenostavitev zapisov

Za poenostavitev enačb definirajmo:

Za nadaljnjo obravnavo lahko izključimo (), ki ni ravno generator naključnih števil, še slabše pa je . Torej lahko za praktični predlog predpostavimo, da je in .

Sedaj lahko posplošimo enačbo:

Kar predstavlja (n+k)-ti člen neposredno iz n–tega. Sledi, da je vsako podzaporedje sestavljeno iz k-tih elementov zaporedja zopet linearno kongruentno zaporedje z večkratnikom in prirastkom . Pomembna povezava z enačbo je, da je splošno zaporedje podano z , , in in se lahko preprosto izrazi če je in .

Glede na predhodno enačbo bomo imeli , zato splošna zaporedja izpolnjujejo

kjer je

Izbira modula m

Naš cilj je najti dober parameter , ki bo imel čim daljšo periodo, v ta namen mora biti število čim večje (sam ima lahko v periodi kvečjemu števil). Druga omejitev pa je hitrost delovanja. Radi bi, da je deljenje po modulu čim hitrejše (samo po sebi je deljenje nekoliko daljša operacija). Izkaže se, da je deljenje hitrejše, če je število velikosti besede v računalniku. Če z označimo velikost e–bitne besede v računalniku, potem je število omejeno z vrednostjo pri binarnih računalnikih ali z pri desetiških računalnikih. Da bi bila perioda čim večja je smiselno izbrati največje število, ki je manjše od vrednosti besede v računalniku.

Izbira množilnika

Potem je potrebno dobro izbrati še večkratnik , da je učinkovitost najboljša. Da je ta pogoj izpolnjen, je najboljše, da sta števili in tuji in seveda . Pri tem je potrebno pazit, da obstaja povezava med dolžino periode in »dobrimi naključnimi« števili.

Primer : Če potem je naslednik enostavno izračunati kot

ki ima dolžino periode , vendar števila niso naključna (za 1 večje od predhodnika). Torej ni možno doseči dolžine periode . Kljub temu pa nekatere števila za dovoljujejo veliko izbir večkratnika . Dobre izbire nam povedo naslednji izreki:

izrek A

izrek B

izrek C

izrek D

Izrek A

Linearni kongruentni generator, ki je definiran s števili , , in ima periodo dolžine m le če velja:

  • je tuje praštevilo številu ();
  • je večkratnik števila , za vsako praštevilo , ki deli število (kar pomeni, da je za vsako praštevilo , ki deli število );
  • je večkratnik števila 4, če je večkratnik števila 4

Kot zanimivost dodajmo leme P, Q in R, ki nam pomagajo razumeti zahteve iz izreka A oziroma nam pomagajo, da ga dokažemo.

Lema P

Lema Q

Lema R

Ker so računalniki večinoma binarni (osnova je število 2) ali desetiški (osnova je število 10), si poglejmo še nekaj izrekov, ki govorijo o možnih izbirah in dolžinah period pri naši metodi.

izrek B

izrek C

izrek D

Zapri

LEMA P

Naj bo praštevilo in pozitivno celo število, kjer velja . Če je :

potem je

Zapri

LEMA Q

Naj bo razcep na prafaktorje števila

Dolžina periode linearne kongruentne metode določene s parametri , , in je najmanjši skupni večkratnik dolžin linearnih kongruentnih sekvenc (, , ), .

Zapri

LEMA R

Predpostavimo da je , kjer je praštevilo. Če je najmanjše pozitivno celo število za katerega velja , potem je samo če

  • ko je ,
  • ko je .

Zapri

Izrek B

Maksimalna možna dolžina, ko je je , kjer je definirana kot , , če ali , če je . Maksimalna dolžina periode je dosežena če:

  • je tuje praštevilo števila ;
  • je primitivni element števila .

Sedaj lahko dobimo periodo , kar je skoraj dolžine , če je praštevilo ali potenca praštevila in je zadovoljivo v vseh praktičnih primerih. Kako pa naj najdemo primitivni element ? To nam pove izrek C.

izrek A

izrek C

izrek D

Zapri

Izrek C

Število je primitivni element števila le če:

  • , je liho ali , ; ali , ali , ,
  • je liho, , (mod ) in (mod ) za praštevilo , ki deli
  • je liho, , zadošča pogoju iz druge alineje in .

izrek A

izrek B

izrek D

Zapri

Izrek D

Če je , , in ni večkratnik števil 2 in 5 potem je perioda linearne kongruentne metode ob pogoju, da je enako eni izmed naslednjih 32 možnosti:

izrek A

izrek B

izrek C

Zapri

Primeri in vaje

1. Najdeš tako zaporedje po linearni kongluentni metodi, kjer se prvi člen ne ponovi več?

Odgovor

2. Kolikšna je dolžina period po linearni kongruentni metodi če imamo začetno število , , in ?

Odgovor

3. Najdi vse množilnike (večkratnike) , ki zadoščajo pogojem iz IZREKA A, ko je (razcep na prafaktorje: ).

Odgovor

4. Najdi vse množilnike (mnogokratnike) , ki zadoščajo pogojem iz IZREKA A ko je (razcep na prafaktorje: ).

Odgovor

Odgovor na prvo nalogo

Primer:

in , ,

ali

in , ,

Zapri

Odgovor na drugo nalogo

Dolžina periode je . in sta si tuji števili (), kar po izreku A pomeni, da je dolžina periode enaka modulu, kar je v našem primeru 10000000000.

Zapri

Odgovor na tretjo nalogo

Potrebujemo , kjer je eno izmed števil 3, 11, 43, 281, 86171. Če želimo, da je vrednost po vsakem modulu enaka je to enako, kot če zahtevamo, da je vrednost po modulu produkta posameznih števil enaka kar pomeni, da je . Od tod sledi, da je edina možnost za množilnik vrednost .

Zapri

Odgovor na četrto nalogo

Ker je , kjer je eno izmed števil 3, 7, 11, 13, 37, sledi, da je rešitev za večkratnik za . je omejen z 0 in 8 zato ker prvo dobro število za , vendar mu nato še sledijo druga. Paziti pa moramo, da je .

Zapri

Kviz

Tukaj bo možno postaviti vprašanja

Naključna števila - 1

Lep dan.

Zunaj sneži.

0%
0%