Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab01.docx
Скачиваний:
7
Добавлен:
14.07.2019
Размер:
29.75 Кб
Скачать

Алгоритм Xorshift

Цей алгоритм також запропонований Джорджем Марсалією, і є найбільш швидким із усіх алгоритмів. Він залежить від 4 коефіцієнтів, на основі якого генерує псевдовипадкове число. Наприклад, якщо існують коефіцієнти x, y, z, w, то для випадкового числа t маємо:

Зациклюючи даний алгоритм, можна отримати послідовність високоякісних псевдовипадкових чисел. Крім того, в ньому використовуються тільки прості операції, що робить його найбільш простим і швидким алгоритмом. Крім того, замість зациклювати основні аргументи алгоритму x і w їх можна вибирати за допомогою іншого генератора псевдовипадкових чисел, таким чином підвищуючи криптостійкість метода.

Інші математичні алгоритми псевдовипадкових рядів

Крім вищеописаних, існує ще безліч різноманітних способів генерувати псевдовипадкові послідовності. Яскравим прикладом є алгоритм Блюма-Блюма-Шуба, запропонований Ленором Блюмом, Мануелем Блюмом та Майклом Шубом. Він заснований на рекурсивному додаванні за модулем два добутку двох простих чисел P та Q і наступним вибором біта парності результуючого числа. Із послідовності вибраних бітів й складається псевдовипадкове число.

Сам алгоритм може бути описаний наступними виразами:

Також заслуговує уваги метод Фібоначчі із запізненням. Цей метод дуже добре комбінується із уже описаним вище методом xorshift, так як в ньому використовуються два числа (які можуть бути використані у якості основних параметрів). Основна формула такого генератора надзвичайно проста:

Параметри a та b використовуються як «коефіцієнти запізнення». Якщо у якості початкових чисел послідовності отримані за допомогою xorshift значення, алгоритм стає криптостійким.

Крім того, існують численні модифікації алгоритма Лемера, як, наприклад, алгоритм Парка-Міллера – в якому у якості модуля використовується просте число Мерсенна. Для криптографічних систем розробляються окремі алгоритми – типу алгоритму Наора-Рейнгольда, із складним математичним апаратом, який дозволяє генерувати майже бездоганні статистично послідовності.

Для комп‘ютерної графіки теж існують спеціалізовані алгоритми. Один із них, який є складовою математичного забезпечення GPU сучасних відеоплат, називається WarpStandard. Він характеризується дуже високим періодом – 21024, і характеризується високим споживанням оперативної пам‘яті.

Нарешті, існує цілий клас гібридних генераторів псевдовипадкових чисел, в яких поєднуються два або більше алгоритми (вище уже був описаний варіант гібридизації метода Фібоначчі із методом xorshift). Ідея таких генераторів надзвичайно проста – якщо дві послідовності взаємно прості, то період такого генератора буде дорівнюватиме добутку їх періодів.

Рекомендації по реалізації

Розглянемо просту реалізацію алгоритма Лемера:

Основні параметри алгоритму задаються за допомогою констант:

A dw 7

X dw 1

C dw 13

M dw 255

N dw 6

Перемістимо номер елемента послідовності, який необхідно отримати, в регістр cx, і організуємо цикл, в якому виконаємо необхідні математичні дії. В регістрі ax зберігатиметься поточний елемент послідовності.

mov cx, N

cycle:

mov ax, X

mul A

add ax, C

div M

mov X, dx

mov ax, dx

loop cycle

Цикл перерветься на необхідній нам послідовності. Щоб вивести її на екран, знадобиться процедура виведення на екран десяткового числа. Для цього використайте стандартну процедуру, здатну вивести будь-яке 16-бітне число (аналогічна процедура може бути написана як для 32-бітного, так і для 64-бітного числа).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]