Разработка программного метода генерации псевдослучайных чисел | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 4 мая, печатный экземпляр отправим 8 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №27 (369) июль 2021 г.

Дата публикации: 29.06.2021

Статья просмотрена: 328 раз

Библиографическое описание:

Лобашевская, В. А. Разработка программного метода генерации псевдослучайных чисел / В. А. Лобашевская. — Текст : непосредственный // Молодой ученый. — 2021. — № 27 (369). — С. 27-29. — URL: https://moluch.ru/archive/369/82946/ (дата обращения: 25.04.2024).



В статье приводится краткое описание процесса проектирования и разработки алгоритма, выдающего псевдослучайные числа.

Ключевые слова: псевдослучайные числа,алгоритм Лемера, алгоритм Вичмана-Хилла, линейный конгруэнтный метод, С++.

Введение

Генератор псевдослучайных чисел (ГПСЧ) — алгоритм, порождающий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению.

ГПСЧ — одна из ключевых частей веб-безопасности. Она часто используется в криптографии, однако не все методы имеют хорошую криптозащищенность.

Методы генерации псевдослучайных чисел

Алгоритм для генерации псевдослучайных чисел существует большое множество. Рассмотрим некоторые из них:

1.1. Метод Фибоначчи с запаздываниями

Этот метод можно описать следующей формулой:

В данном алгоритме каждое последующее число является тем, которое было сгенерировано 7 шагов назад, плюс случайное число, которое было сгенерировано 10 шагов назад и деленное по модулю на большее значение .

1.2. Метод серединных квадратов

Данный метод был предложен Нейманом, суть данного метода заключается в том, что выбирается число меньше 1 разрядностью 2n и возводится в квадрат. Из полученного результата, разрядность которого должна быть 2*2n (если нет, то добавляются два нуля справа от полученного числа) выбираются 2 n чисел из середины полученного после возведения в квадрат числа. Число записывается после десятичной точки. Далее процедура повторяется.

1.3. Алгоритм Лемера.

Данный алгоритм был предложен Д.Лемером в 1988 году и в качестве входных значений берет a = 16807 и m = 2147483647, позднее в 1993 году Лемер использовал a = 48271 как более качественную альтернативу. Однако, алгоритм Лемера как и алгоритм Вичмана-Хилла является лишь частным случаем линейного конгруэнтного метода и рассчитывается по следующей формуле:

где m — модуль(m≥2), а — множитель (0≤a≤m)

1.4. Метод Вичмана-Хилла.

Этот алгоритм датируется 1982 годом. Идея Вичмана-Хилла заключается в генерации трех предварительных результатов и последующим их объединением в один финальный результат.

Так как данный алгоритм использует три разных генерирующих уравнения, ему требуется трое начальных значений, в данном случае это 30269, 30307, 30323 Алгоритм Вичмана-Хилла немногим сложнее, чем алгоритм Лемера, но его преимущество заключается в том, что он генерирует более длинную последовательность псевдослучайных чисел, прежде чем начнет повторяться.

1.5. Линейный Конгруэнтный Метод

Данный алгоритм — это один из методов генерации псевдослучайных чисел. Линейный конгруэнтный метод был предложен Д.Лемером в 1949 году. Суть данного метода заключается в вычислении последовательности случайных чисел по формуле:

где m — модуль(m≥2), а — множитель(0≤a≤m), с — приращение (0≤

Эта последовательность называется линейной конгруэнтной последовательностью. Главным недостатком данного алгоритма является то, что он не криптографически стойкий.

Проектирование

Для реализации ГПСЧ был выбран язык C++, в качестве компилятора был выбран G++, так же для реализации математической части ГСПЧ использовались: алгоритм Вичмана-Хилла, алгоритм Лемера, которые в свою очередь основываются на линейном конгруэнтном алгоритме.

Для реализации методов ГПСЧ создадим три класса:

— Lemer — класс, в котором реализован метод Лемера;

— Witchman — класс, в котором реализован метод Вичмана-Хилла;

— MyClass — класс, в котором реализован мой метод, основанный на линейном конгруэнтном методе.

Алгоритм, написанный в классе MyClass, так же является частным случаем линейного конгруэнтного метода. В качестве входных значений используются константы b1, b2, b3. Получаемый результат генерируется путем генерации случайного seed’а алгоритмом Лемера и последующей генерации трех случайных чисел линейным конгруэнтным методом, результат же получается по следующей формуле:

, где

m1, m2 и m3 — произвольные целые числа типа int.

Для хранения данных полученных при генерации чисел воспользуемся массивом. Алгоритм работы программы представлен на рисунке 1.

Рис. 1

Результаты работы программы

В качестве выходных данных использованы те же массивы и переменные, что и во входных данных, только полностью обновленные, содержащие необходимые данные для вывода.

В результате запуска программы на монитор выводится окно, представленное на рисунке 2.

Рис. 2

Выводы

В результате был разработан генератор псевдослучайных чисел, основанный на алгоритме Вичмана-Хилла и алгоритме Лемера, которые в свою очередь основываются на линейном конгруэнтном алгоритме.

Литература:

  1. Такач, Л. Комбинаторные методы в теории случайных процессов/ Л. Такач. — М.: 1999. — 266 c.
  2. Столов, Евгений Генераторы случайных чисел. Математическая теория / Евгений Столов. — М.: LAP Lambert Academic Publishing, 2014. — 443 c.
  3. Манин, Ю. И. Введение в теорию чисел / Ю. И. Манин, А. А. Панчишкин. — М: 1990. — 672 c.
  4. Шор, Е. В мире случайностей / Е. Шор. — М.: [не указано], 1977. — 804 c.
Основные термины (генерируются автоматически): алгоритм, линейный конгруэнтный метод, число, метод генерации.


Ключевые слова

С++, псевдослучайные числа, алгоритм Лемера, алгоритм Вичмана-Хилла, линейный конгруэнтный метод

Похожие статьи

Методы генерации случайных чисел | Статья в журнале...

Далее рассмотрим один из распространённых методов генерации псевдослучайных чиселлинейный конгруэнтный метод. В большинстве языков программирования именно этот метод используется в стандартной функции получения случайных чисел.

Математические основы и программная реализация генератора...

Алгоритм реализован линейным конгруэнтным методом. Написанная программа в качестве входных данных запрашивает пять переменных: x 0 — первое число алгоритма на основе которой и будет происходить генерация следующих чисел; a...

Нахождение k-error линейной сложности бинарной...

Cуществует эффективный метод нахождения линейной сложности конечной или периодической последовательности, описанный в источнике

В линейном конгруэнтным методе случайное число вычисляется по следующей рекуррентной формуле: , где — модуль ( ), — множитель...

Статистическое моделирование на ЭВМ непрерывных случайных...

Методы генерации случайных чисел | Статья в журнале... В большинстве языков программирования именно этот метод используется в стандартной функции получения случайных чисел. В линейном конгруэнтным методе случайное число вычисляется по...

Накопление случайности в генераторах псевдослучайных чисел

При идеальной генерации случайных чисел вероятность «выпадения» у всех чисел диапазона одинакова и определяется по формуле вероятности

Простыми примерами ГПСЧ могут служить метод «середины квадрата» [1] и линейный конгруэнтный метод [2].

Приложение последовательного регрессионного метода...

Приложение последовательного регрессионного метода к идентификации одного класса динамических систем.

Методы генерации случайных чисел | Статья в журнале... В линейном конгруэнтным методе случайное число вычисляется по следующей рекуррентной формуле...

Похожие статьи

Методы генерации случайных чисел | Статья в журнале...

Далее рассмотрим один из распространённых методов генерации псевдослучайных чиселлинейный конгруэнтный метод. В большинстве языков программирования именно этот метод используется в стандартной функции получения случайных чисел.

Математические основы и программная реализация генератора...

Алгоритм реализован линейным конгруэнтным методом. Написанная программа в качестве входных данных запрашивает пять переменных: x 0 — первое число алгоритма на основе которой и будет происходить генерация следующих чисел; a...

Нахождение k-error линейной сложности бинарной...

Cуществует эффективный метод нахождения линейной сложности конечной или периодической последовательности, описанный в источнике

В линейном конгруэнтным методе случайное число вычисляется по следующей рекуррентной формуле: , где — модуль ( ), — множитель...

Статистическое моделирование на ЭВМ непрерывных случайных...

Методы генерации случайных чисел | Статья в журнале... В большинстве языков программирования именно этот метод используется в стандартной функции получения случайных чисел. В линейном конгруэнтным методе случайное число вычисляется по...

Накопление случайности в генераторах псевдослучайных чисел

При идеальной генерации случайных чисел вероятность «выпадения» у всех чисел диапазона одинакова и определяется по формуле вероятности

Простыми примерами ГПСЧ могут служить метод «середины квадрата» [1] и линейный конгруэнтный метод [2].

Приложение последовательного регрессионного метода...

Приложение последовательного регрессионного метода к идентификации одного класса динамических систем.

Методы генерации случайных чисел | Статья в журнале... В линейном конгруэнтным методе случайное число вычисляется по следующей рекуррентной формуле...

Задать вопрос