Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


Pseudorandomas

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search

Pseudorandomas - tai įvairūs algoritmai, kurie duoda skaičių sekas, kurios primena random skaičių sekas, tačiau išties yra ne random, nes yra visai ne atsitiktinės. Kompiuteriuose, deja, dažniausiai random funkcija irgi veikia ne kaip tikras randomas, o kaip kokia nors gudresnė pseudorandom sekos generacija.

Bet koks pseudorandomas turi problemų, iš kurių esminės yra dvi:

  • Pseudorandom seka duoda paterną, kuris gali būti pastebėtas įvairiais atvejais - klasikinis pvz., kai seką atvaizduoji dvimačiame paviršiuje - atsiranda visokios linijos, ruožai, raštai ir panašiai
  • Pseudorandom seka gali būti suprognozuojama - atsekus, koksai algoritmas ir nuo kada ją generuoja, galima per tai sulaužyti visokius kodus, hešinimo algoritmus ir panašiai

Paprastai pseudorandomas naudojamas vietoje randomo dėl dviejų priežasčių

  • Pseudorandomą generuoti daug paprasčiau ir greičiau, nereikia daug visokių komplikuotų skaičiavimo resursų, daugelis visai neblogų funkcijų veikia belenkaip greitai
  • Tikrą randomą generuoti yra sunku arba beveik neįmanoma, nes jam reikia kreipimosi į realų fizikinį atsitiktinių reikšmių generatorių, ko nebūna

Dažniausiai vietoje tikro randomo būna naudojamas tam tikras kompromisinis variantas:

  • Imama tam tikra pseudorandomo funkcija, turinti parametrą, kuris nustatytų generaciją
  • Tai pseudorandomo funkcijai inicializuoti panaudojama iš kažkur gauta tikra arba praktiškai tikra random reikšmė

Tada gaunasi, kad generuojamas gal ir pseudorandomas, bet jo pagrinde yra ir tikras randomas, kurį atspėti beveik neįmanoma. Taigi, toksai kompromisas gali daugmaž išspręsti visas tas randomo generacijos problemas.

Kadangi praktikoje dažniausiai randomu vyksta realaus laiko įvykiai, tai pagal tikrinamą laiką papidomą random modifikatorių susigeneruoti būna dažniausiai visai nesunku. Esminiu ribojimu tampa tik tai, kad funkcijų gaunamas laikas dažniausiai būna labai riboto tikslumo, pvz., vienos sekundės ar vienos mikrosekundės. Visgi net ir sekundės atveju tada galima gauti vos sekundę laiko tegyvuojantį pseudorandomo pagrindą, kas paprastai jau reiškia, kad generacija pagerinama labai smarkiai.

Pagal poreikį, aišku, gali būti naudojami ir keli tokie random pagrindai, kas leidžia dar kažkiek ką nors pagerinti.