Генератор Псевдовипадкових Чисел

Можна створити таку послідовність чисел, властивості якої будуть схожі на властивості послідовності випадкових чисел.

Такі послідовності називаються псевдовипадковими.

Вперше запропонував їх використовувати Джон фон Нейман у 1946 р. Його метод полягав в наступному: n-розрядне число підносилось до квадрата і з нього вибиралися середні n цифр. Метод був дуже недосконалий, послідовності майже завжди вироджувалися в нуль або зациклювалися з коротким періодом. Пізніше було запропоновано багато різних алгоритмів отримання псевдовипадкових чисел.

В основі програмних генераторів як правило лежать рекурентні формули. Як правило, вони генерують цілі числа рівномірно розподілені на відрізку від 0, до деякого максимального m. Щоб отримати числа з рухомою комою, рівномірно розподілені на [0,1), кожен отриманий результат ділять на m.

Лінійна змішана форма

    Генератор Псевдовипадкових Чисел 

Ця формула має багато часткових випадків:

Мультиплікативний конгруентний метод

    Генератор Псевдовипадкових Чисел 

Змішаний конгруентний метод

    Генератор Псевдовипадкових Чисел 

Квадратичний конгруентний метод

Огляд методів

Лінійний конгруентний метод

Запропонований Д. Х. Лемером. Основна обчислювальна формула:

    Генератор Псевдовипадкових Чисел 

Алгоритм зациклюється з періодом, що не перевищує деякого m. Коефіцієнти а, m і x(0) можуть приймати довільні цілі значення, за винятком 0. Параметр с може бути також і 0, але в цьому випадку скорочується період. Число ітерацій m звичайно вибирається рівним максимальному значенню типу, що робить непотрібною операцію ділення, яка автоматично виконається при переповненні. Число а можна взяти рівним, наприклад, 1664525, с — рівним 1013904223. Такий метод часто реалізують в сучасних системах програмування, хоча він майже непридатний у галузі статистики чи криптографії, де вимоги до «випадковості» значно вищі.

«Mother-of-All» random number generator

Запропонований Джорджем Марсалією (Marsaglia), професором університету Флориди. Обчислювальна формула:

    Генератор Псевдовипадкових Чисел 

Цей алгоритм є узагальненням попереднього і позбавлений його головного недоліку — короткого періоду. Його період — Генератор Псевдовипадкових Чисел .

Випадкове число Генератор Псевдовипадкових Чисел  належатиме проміжку [0, 1). Початкові значення можна задавати довільні. Алгоритм може бути застосований в прикладних науках, але він має нижчу швидкість.

Вихор Мерсенна

Докладніше: Вихор Мерсенна

Вихор Мерсенна запропонований у 1997 Макуто Матсумото і Такеджі Нушиміро. Основна ідея полягає в тому, що до початкової ітерації, яка ініціює процедуру, застосовується серія бітових операцій. Після їх виконання отримують нову послідовність, перший член якої вважається псевдовипадковим числом. Цей алгоритм має величезний період: Генератор Псевдовипадкових Чисел  ітерації (це більше ніж Генератор Псевдовипадкових Чисел ).

Алгоритм дуже швидкий через відсутність множень, але не має достатньої випадковості. Тому галузь застосування алгоритму дещо обмежена.

Генератори типу «Xorshift»

Одні з найновіших генераторів від Джорджа Марсалії. Знову розглядається деяка початкова послідовність, до якої застосовуються операції xor та побітові зсуви. Ці операції полягають в наступному:

    Генератор Псевдовипадкових Чисел 

Замість shl можна використовувати також shr, та еквівалентне множення.

Алгоритм має період Генератор Псевдовипадкових Чисел  та проходить тести Diehard.

Підсумкове випадкове число може бути одержано за допомогою підсумовування окремих членів послідовності, або застосування до них операції xor. В наш час[коли?] це один з найбільш вживаних алгоритмів; послідовність, що генерується, достатньо випадкова, періоди — від (залежно від реалізації), відсутність операцій множення позитивно позначається на швидкості.

Інші генератори

Інтерес можуть представляти комбінації вже представлених методів[джерело?]. Деякі з них реалізовані у відповідних програмних середовищах у вигляді функцій rand(), random().

Randomize

Часто для створення унікальної послідовності псевдовипадкових чисел початковий її член ініціалізують наприклад остачею від ділення поточного часу в мілісекундах на певне число. Зазвичай це робить функція randomize(), хоча можна задати початкове число послідовності і вручну.

Див. також

Примітки


Tags:

Генератор Псевдовипадкових Чисел Лінійна змішана формаГенератор Псевдовипадкових Чисел Огляд методівГенератор Псевдовипадкових Чисел RandomizeГенератор Псевдовипадкових Чисел Див. такожГенератор Псевдовипадкових Чисел ПриміткиГенератор Псевдовипадкових ЧиселПсевдовипадкові числа

🔥 Trending searches on Wiki Українська:

Сталін Йосип ВіссаріоновичЗайменникПрикметникПримаченко Марія ОксентіївнаУкраїнська радикальна партія (1890)Акутаґава РюноскеЕсеОсоби з невизначеним громадянством (Естонія)ХорватіяДніпро (місто)Леся УкраїнкаЗакарпатська областьАрсеній (Яковенко)Членство України в міжнародних організаціяхПриродоохоронні території УкраїниРуданський Степан ВасильовичАвтомобільна промисловість в СШАAviciiВірменіяЛьвівНарукавні знаки Збройних сил УкраїниЧорнобильОрлан-10114-та окрема бригада територіальної оборони (Україна)Октавіан АвгустПакт Молотова — РіббентропаПунічні війниІсторія України79-та окрема десантно-штурмова бригада (Україна)ХмельницькийВодаЗінченко Олександр ВолодимировичYouTubeАрмор (система)Острозький Костянтин ІвановичУкраїнська моваВідродженняВолейболРеволюційна українська партіяДень ЗемліMIM-104 PatriotФірцак Іван ФедоровичСписок постачання зброї та обладнання в Україну під час російського вторгненняGoogleРимська республікаAster (ракети)Волинська трагедіяАнтитерористична операція на сході УкраїниМегалополісАнтоніу де Олівейра СалазарВоєнний стан в УкраїніFallout (серія)Правило 34Порошенко Петро ОлексійовичГра престолівМітозПрезидентські вибори у США 2024ЄвропаXVideosAUTO.RIAЧикатило Андрій РомановичПрийменникКам'янськеОчеретинеДонцов Дмитро ІвановичРічард БахDiscordВідзнаки Головнокомандувача Збройних сил УкраїниВійна за незалежність СШАДихальна системаПетриченко Павло ВікторовичКропивницькийНідерландиСлобідська УкраїнаПерша столиця УкраїниІсус Христос🡆 More