Hogy működik a véletlenszám generátor?
Hogy tud egy számot véletlenül generálni? Nincs valamilyen fizikai ok, amivel mégis csak magyarázható, hogy az az adott szám mégsem véletlen? Ha visszamennénk az időben, akkor lehet, hogy ugyanazokat a számokat generálná le. Azaz véletlenszerű, de annyira azért mégsem. Nehéz megfogalmazni, de remélem sejtitek, hogy mire gondolok.
Hogyan lehetséges egyáltalán olyan algoritmust alkotni, amely véletlen számokat generál?
Hé!
Van egy NAGYON NAGY különbség:
- álvéletlen generátor,
- igazi véletlen generátor.
1: ez bizony ugyanazt adja, ha ugyanaz a kezdőérték, viszont az eloszlása tényleg olyan, mintha véletlen lenne. Ilyen van kb. az összes számítógépben.
2: ez pedig ténylegesen is véletlen értéket ad - ha megismétled, akkor mást. Ilyen minden olyan jelenség, amelyik kvantumeffektusokon alapul, pl. egy jó zajos ellenállás.
"pl. egy jó zajos ellenállás."
Mit értesz ezalatt?
"1: ez bizony ugyanazt adja, ha ugyanaz a kezdőérték, viszont az eloszlása tényleg olyan, mintha véletlen lenne. Ilyen van kb. az összes számítógépben."
Ez azt jelenti, hogy valódi véletlenszám generátor nem is létezik?
A legegyszerűbb algoritmus úgy működik, hogy van egy belső szám, amit számon tart a program. Mondjuk generáljunk 0 és 99 között véletlen számot, és legyen jelen esetben a belső szám induláskor 87. Legyen egy szorzó, ami fix, mondjuk a 79, meg egy összegtag, mondjuk 4212.
Generálni kell egy véletlen számot. Összeszorzom a 87-et a 79-el és hozzáadom a 4212-t, az eredmény 11085. A 85-at kiadom, mint generált szám, a 10-et meg megjegyzem. (Az utolsó négy számjeggyel dolgozok csak.)
Következő alkalommal a 10-et szorzom 79-el, és adom hozzá a 4212-t, az eredmény 5002. A 02 lesz a generált szám, az 50-et megjegyzem.
Következő alkalommal az 50-et szorzom 79-el, és adom hozzá a 4212-t, az eredmény 8162. A 62 lesz a generált szám, a 81-et megjegyzem.
81*79+4212 = 10611 → 11 a generált szám, 6 a megjegyzendő
6*79+4212 = 4686 → 86 a generált szám, 46 a megjegyzendő
46*79+4242 = 7846 → 46 a generált szám, 78 a megjegyzendő.
Máris generáltunk egy véletlenszerűnek tűnő számsort: 85, 2, 62, 11, 86, 46…
Persze ennél vannak jóval kifinomultabb algoritmusok is, az én példám nem biztos, hogy ideális. De az elv ez, hogy valamilyen számítást végez el újra és újra, és annak valamelyik része ad véletlenszerű eloszlást.
Persze ez az algoritmus minden programindítás után ugyanazt a véletlen számsort adja, a mindig 87 a kezdőérték. Ezért a kezdőértéket valamilyen módszerrel véletlenszerűsítik. Pl. véletlenszerű, hogy mikor indítottad el a programot, mondjuk fogják az órát, a percet, a másodpercet, összeadják, és ebből lesz a kiindulóérték. Mondjuk a 18:05:22-kor indítottad a programot, akkor 18+5+22=45 lesz a kezdőérték, így minden futtatásnál más-más számsort fog generálni az algoritmusod. De egyéb dolgokkal is lehet inicializálni a kezdőértéket, az IP címből, a processzor aktuális hőmérsékletéből, a futó programszálak számából, stb…
Lehet azzal is javítani a véletlenszerűséget, hogy nem a program maga generálja a véletlen számokat, hanem az operációs rendszer. Így egy adott program két generálása között megint véletlenszerű, hogy más folyamatok, programok hányszor generáltatnak az operációs rendszerrel véletlen számot.
Aztán van a valódi véletlen, de ehhez már célhardver kell, amiben mondjuk van egy hosszabb felezési idejű, gyengén radioaktív anyag, és azt számolja egy detektor, hogy hány atom bomlott el benne. Ez valóban véletlenszerű, és ebből lehet generálni valódi véletlen számot.
Zajos ellenállás: ha ráadsz egy feszültséget, az áram egy picit állandóan változni fog, kvantumjelenségek miatt. Ezt lehet mérni, de ez nem egyenletes eloszlású, tehát torz lesz a véletlened. Egyes számok sokszor jönnek, mások ritkán. Ezen kívül hőfüggő, stb.
Az atombomlásnál meg az a gond, hogy az időben változik. Felezési ideje van.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!