A számítástechnikában mi alapján jönnek létre a véletlen szémok?
Igen, a számítógép eredendően egy előre kiszámítható módon generál véletlenszerű számokat. A gép véletlenszerűnek tűnő számokat generál, ezeket úgy szokás nevezni, hogy pszeudovéletlen számok.
Például, beadsz a számítógépnek ötöt, a számítókép fogja, veszi a négyzetgyökét, megszorozza ötször öttel, majd veszi az első ötször kettő számot. így kaptál egy véletlenszerűnek tűnő számot, de mégis ki tudod számolni.
A legtöbb modern programozási nyelv véletlen szám generátora a Mersenne Twister módszeren alapul:
Röviden annyi, hogy az algoritmusnak beadsz egy számot, amit "seed"-nek nevezel, és az algoritmus ezzel a számmal egymás után sokszor elvégez egy bonyolult műveletet (mint ami leírtam fenn), ami után egy véletlenszerűnek tűnő számot kapsz, majd az eredményt felhasználja, hogy egy újat generáljon. Így az algoritmus generál N darab véletlenszerűnek tűnő számot amit akár papíron is ki tudsz számolni.
A baj az, hogy az algoritmus két ugyanolyan számra ugyanazt a pszeudovéletlen számot generálja.
A kulcs az az, hogy a seedet próbáld minél jobban variálni. Ezért általában amikor véletlen számot implementálsz, akkor legtöbbször a jelenlegi időt használod seednek. Mivel a jelenlegi idő minden másodpercben másmilyen, ezért minden másodpercben másmilyen véletlennek tűnő értéket kapsz.
Ha többször akarsz egy másodperc alatt egy véletlen számot generálni akkor érdemes még egy ciklusonként inkrementált értéket is hozzádobni a jelenlegi időhöz.
plussz infó, ha esetleg jobban érdekel a téma:
Ez a megközelítés általában jó saját amatőr programokhoz, mert egy véletlenszerűnek tűnő számot dob vissza, de már például ha dollármilliárdos cégeknek akarsz védelmet nyújtani, ami bizony használ véletlenül generált számokat, akkor támadók kihasználhatják az algoritmus tulajdonságait hogy lekorlátozzák a lehetséges értékeket az idő ismeretében, ezért ez akkor nem a legmegfelelőbb megoldás, ugyanis tudsz értékeket kizárni.
A Random.org atmoszférikus zajokat (szélmozgás, hőmérséklet stb.) használ a seednek a generáláshoz, ami jóformán megjósolhatatlan. Nekik van egy webes API-juk, amit használhatsz a programodban, internekapcsolat mellett.
A Cloudfare védelmet biztosít weboldalaknak kibertámadás ellen és ők is használnak random számokat. Az ő random szám generálásuk úgy müködik, hogy ki van rakva egy csomó lávalámpa egy polcra, amelyeknek véletlenszerű a mozgása, és egy kamera folyamatosan videózza őket, és amikor random számot kell generálni, ennek a videónak az egyik képkocskáját használják seendek a generáláshoz. Így úgyszintén egy igazán véletlenszerű mozgást kapsz.
https://www.youtube.com/watch?v=1cUUfMeOijg
^láva lámpáról videó
A random számok un. pszeudo-véletlen számok.
De lehet kapni hardvert amely valódi véletlen számokat képes generálni.
Amikor elindítasz egy programot, akkor a program megnézi, hogy mennyi az idő ezredmásodpercekben. Ebből az időpontból készít egy számot. Ennek a számnak a neve seed.
Amikor a programnak kell egy véletlen szám, akkor a seed-et megszorozza 134775813-mal, és hozzáad 1-et. Az így kapott szám lesz a véletlen szám. A seed értékét is megváltoztatja erre a számra.
Ha valaki egyszer rájön, hogy mi a seed értéke, akkor onnantól kezdve az összes random számot előre kitudja számolni.
Köszönöm szépen #1 a nagyon hasznos választ.
Illetve #3 nak is :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!