Psevdo-naključno število
Iz MaFiRaWiki
| | Ta članek ali del članka je v delu. Veseli bomo, če ga boste dopolnili in popravili. |
Tako imenovana naključna števila so pomemben del pri mnogih aplikacijah.
Vsi generatorji naključnih števil ustvarjajo zaporedja oziroma nize števil z uporabo usteljenih pravil, ki ustvarijo vsako število v nizu iz njegovega predhodnika. To pomeni, da števila v resnici niso naključna, so napovedljiva, poznamo pravilo po katerem so bila narejena.
Edini način, da bi dobili resnično naključna števila, je da bi uporabili neki fizikalni proces, ki je sam po sebi naključen (kot na primer metanje kocke ali kovanca). Neglede, računalnik lahko ustvari niz števil, ki bi na pogled izgledala kot naključna števila, ljudjem ki ne bi poznali pravila generiranja števil. Števila, ki so bila računalniško generirana in zadovoljujejo statistične teste imenujemo psevdonaključna števila.
Vsebina |
Primeri
Oglejmo si kako se uporablja v javo vgrajeni generator psevdonaključnih števil. V ta namen v javi uporabljamo razred Random. Na volo je tudi metoda random v razredu AMth, a je načeloma razred Random uporabnejši.
Naključno število na intervalu z dano zgornjo mejo
Razlaga algoritma:
- kot argument sprejmemo zgornjo mejo intervala, na keterem bomo generirali naključna števila
- v if stavku lovimo izjemo IllegalArgumentException; če je zgornja meja negativno število ali pa je enaka nič
- nato naredimo nov "generator", ki je tipa Random
- vrnemo psevdonaključno število, celoštevilsko vrednost, ki je poenoteno porazdeljena na intervalu med 0 in , v našem primeru, zgornja meja -1
public int izberiStevilo(int zgMeja){ if (zgMeja <=0) { } // ce bomo uporabili konstrukotor brez parametra, bo vrednost semena enaka trenutnemu casu // tako bodo imeli "random" objekti, ki so bili narejeni v hitrem nizu, // enako seme in bodo generirali enako sekvecno return generator.nextInt(zgMeja); }
Naključno število na intervalu z dano spodnjo in zgornjo mejo
Razlaga algoritma:
- metoda sprejma dva argumenta, prvi je spodnja meja intervala, drugi pa je zgornja meja intervala
- v if zanki lovimo izjemo IllegalArgumentException, če je slučajno vrednost zgornje meje manjša od vrednosti spodnje meje
- ustvarimo novi generator, ki je tipa Random
- izračunamo interval na katerem generiramo psevdonaključna števila; "interval" smo shranili v tip long, da bi se izognili prekoračitve meje
- z metodo generator.nextDouble(), dobimo psevdonaključno število (realno število), ki je poenoteno porazdeljena na intervalu med 0.0 in 1.0
- izračunemo odlomek intervala
- kot rezultat pa metoda vrača, celo število, ki ga dobilo po formuli
Opomba: če v konstruktorju nimamo nobenega argumenta, se bo za seme vzelo trenutni čas
public int izbiraStvIntervalu(int spMeja, int zgMeja) { if (spMeja >= zgMeja) { StringBuilder message = new StringBuilder(); message.append("Spodnja meja ("); message.append(spMeja); message.append(") mora biti manjsa od zgornje meje ("); message.append(zgMeja); message.append(")"); } // dolocimo interval; vzamemo tip long, da se izognemo prekoracitve mej long interval = (long)zgMeja - (long)spMeja + 1; // izracunamo odlomek intervala, pri cemer mora veljati: 0 <= odlomek < interval long odlomek = (long)(interval * generator.nextDouble()); return (int)(odlomek + spMeja); }
Naključna števila v tabeli
Razlaga programa:
- v if zanki lovimo izjemo IllegalArgumentException, če je zgornja meja manjša ali enaka nič in če je niz, ki ga na koncu izpisujemo enak nič
- generiramo generator, ki je tipa random in rezultat, ki je tipa ArrayList (tabela, ki ji lahko sprot spreminjamo velikost)
- s for zanko se sprehodimo po našem nizu, ki ga na koncu izpišemo
- kot rezultat medota vrne niz z psevdonakljičnimi števili, ki smo mu velikost določili z vhodnim paramatrom
if (zgMeja <=0) { } if (velikostNiza <=0) { } // veckratna uporaba istega "random" objekta, da generira niz // celostevilskih nakljucnih stevil for(int i=0; i < velikostNiza; ++i) { } return rezultat; }

