Egy programozó bármilyen programot megtud csinálni fejből a számítógépre ha megtanulja a C++ nyelvet?
Előbb definiálni kellene a véletlen fogalmát. A magyar név nagyon beszédes: Véletlen az, amiről nem tudunk hogyan vélekedni.
Innen már következik, hogy megfelelő algoritmus választása az egész. Pl. egy Mersenne twister algoritmus esetén az ismétlési periódus hossza: 2^19937 − 1 . Ezzel 32 bites véletlenszámokat lehet előállítani. A generátor által adott számsorozatok nagyon nagy egyezést adnak a tényleges véletlen eloszlásokkal.
Ha a program indulásakor megfelelő módon inicializálod a generátort – mondjuk az idővel ezredmásodperc pontossággal + a lementett utolsó generált számokból –, akkor több százezer generált szám birtokában sem tudsz következtetni a következő számra. Ilyen módon a valódi véletlennel egyenértékű generált számsort kapsz.
Többszálú, főleg netes környezetben meg aztán végképp így van.
Nincs gond a véletlen számokkal, csak megfelelő felhasználásra megfelelő algoritmust kell választani. Pl. netes környezetben a random.org vagy hasonló oldalal is meg lehet fejelni az egészet – mondjuk x000 sorsolt szám után újra inicializálod a generátort a random.org-ból vett értékkel –, ami meg valódi véletlent ad, hiszen az légköri elektromos zaj alapján generál számot.
Persze ha nem inicializálod a véletlenszám-generátort, akkor valóban fennáll az a jelenség, hogy minden indításkor ugyanazt a számsort fogja neked generálni. De ez egyszerű programozási hiba csak.
iostream: Azért kicsit vitatkoznék. Ez nem teljesen igaz. Akkor igaz, ha ismered az algoritmust ÉS az inicializáló értéket, valamint a sorsolások számát, illetve bizonyos algoritmusok esetén ez utóbbi sem kell, ha teljes értékkészlettel dolgozol.
Persze ha belekutatsz a memóriába, akkor bármilyen véletlenszám-generátorral kreált értéket előre lehet jelezni, hiszen mind matematikai műveletekkel képződik, amit a megfelelő információk birtokában (adatok és algoritmus) te is el tudsz végezni.
Viszont ha van egy program, ami mondjuk ezredmásodperces idővel inicializálja a véletlenszám-generátort és mondjuk kockadobásokat szimulál, akkor pusztán az eddig kisorsolt számok alapján nem igazán lehet megjósolni az eredményt, még akkor sem, ha ismered a generátor algoritmusát. Persze ha kellően sok – az ismétlődési hosszat megközelítő darabszámban – generáltatsz vele számokat, akkor már lehet következtetni a számodra nem látható információkra.
Viszont az is igaz, hogy ha nincs inicializálva a véletlenszám generátor, akkor minden indulás után ugyanazokat a számokat fogja dobni.
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!