- •Содержание
- •Рекомендации к проведению лабораторных работ
- •Комментарии в тексте программы
- •Компиляция и запуск программы на выполнение
- •Переменные и константы
- •Операторы и выражения
- •Оператор присваивания
- •Арифметические операции
- •Логические операции
- •Составной оператор begin..end
- •Условный оператор if..then
- •Оператор-селектор case..of
- •Операторы обработки циклов
- •Цикл с параметром for .. do
- •Цикл с предусловием while..do
- •Цикл с постусловием repeat..until
- •Процедуры break и continue
- •Оператор with..do
- •Процедуры и функции
- •Процедуры
- •Функции
- •1. Фундаментальные структуры данных
- •Общее понятие типа данных
- •Простой тип
- •Перечислимые типы данных
- •Поддиапазонны
- •Строковый тип
- •Структурные типы
- •Массивы
- •Записи
- •Множества
- •Представление структур в памяти
- •Задание
- •2. Работа с последовательностями, файлы
- •Доступ к файлу
- •Операции над файлами
- •Окончание файла
- •Пример работы с файлом
- •Задание
- •3. Анализ алгоритмов
- •Рост функций
- •Задание
- •4. Простейшие методы сортировки массивов
- •Оценка алгоритмов сортировки
- •Шейкер-сортировка
- •Сортировка простыми вставками
- •Сортировка бинарными вставками
- •Задание
- •5. Улучшенные методы сортировки массивов
- •Сортировка с помощью включений с уменьшающимися расстояниями (сортировка Шелла)
- •Пирамидальная сортировка
- •Сортировка с разделением (быстрая сортировка)
- •Задание
- •6. Сортировка последовательных файлов
- •Сортировка простым слиянием
- •Естественное слияние
- •Задание
- •7. Рекурсивные алгоритмы
- •Сравнение рекурсии и итерации
- •Задание
- •8. Динамические структуры данных, связные списки
- •Списки
- •Пример создания и заполнения списка
- •Задание
- •9. Нелинейные структуры данных
- •Граф
- •Бинарное дерево
- •Задание
- •10. Алгоритмы на графах
- •Алгоритмы обхода в глубину и по уровням
- •Построение минимального остовного дерева
- •Поиск кратчайшего пути
- •Задание
- •11. Поиск данных
- •Двоичный (бинарный) поиск элемента в массиве
- •Интерполяционный поиск элемента в массиве
- •Алгоритм Бойера-Мура
- •Задание
- •12. Хеширование
- •Отечественный стандарт хеширования
- •Создание хеш-функции
- •Хеш-функции для строковых значений, алгоритм Гонера
- •Задание
- •13. Методы сжатия текстовых данных
- •Метод “Running”
- •Словарные методы сжатия
- •Алгоритм Хаффмана
- •Задание
- •14. Алгоритмы вывода графических примитивов
- •Рисование отрезка
- •Прямое вычисление координат
- •Инкрементный алгоритм Брезенхэма
- •Простейший алгоритм закрашивания замкнутой области
- •Задание
- •15. Псевдослучайные последовательности
- •Метод середин квадратов
- •Линейный конгруэнтный метод
- •Генератор псевдослучайных чисел, поставляемый с системой
- •Оценка качества генератора ПСП
- •Задание
- •16. Параллельные алгоритмы
- •Пример многопоточного приложения
- •Задание
- •Задание на СКР
- •Вариант 1. Клеточные автоматы
- •Вариант 2. Раскрашивание карты
- •Вариант 3. Крисс-кросс
- •Вариант 4. Лабиринт
- •Список использованной литературы
- •Приложение A. Справочник по функциям Delphi
- •Операции с порядковыми типами
- •Математические функции и процедуры
- •Генерация псевдослучайного числа
- •Преобразование типов данных
- •Работа с памятью
- •Приложение Б. Компонент-сетка TStringGrid
- •Приложение В. Компонент-диаграмма TChart
- •Приложение Д. Элементарный поток – класс TThread
71
15.Псевдослучайные последовательности
Вид занятия – лабораторная работа Цель – исследование методов генерации псевдослучайных значений, оценка качества ПСП
Продолжительность – 4 часа
Числа, которые выбираются случайным образом, находят множество случайных применений: моделирование; принятие решений; выборочный метод; компьютерное программирование; развлечения. А что такое “случайность”? Охотнее говорят о последовательности независимых случайных чисел с заданным распределением.
Равномерным распределением на конечном множестве чисел называется такое распределение, при котором любое из возможных чисел имеет одинаковую вероятность появления.
В течение долгих лет, те, кому случайные числа были нужны для исследований, таскали шары из урны, бросали игральные кости или раздавали карты. Сегодня появились более совершенные способы генерации случайных чисел и псевдослучайных последовательностей.
Генератор псевдослучайных чисел (ГПСЧ, PRNG(англ.)) — алгоритм, генерирующий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению (обычно равномерному).
Метод середин квадратов
Метод середин квадратов предложен Джоном фон Нейманом в 1946 году. Его идея заключалась в следующем:
1. Берём N-значное число |
Æ 5772156649 |
2.Возводим число в квадрат Æ 33317792380594909201
3.Из результата (2N-значного числа) берём N средних цифр Æ 7923805949
4.Возвращаемся к 1-му шагу.
На языке Паскаль указанный алгоритм будет выглядеть следующим образом:
var MisSqSeed : integer;
Function GetNum:Integer; var Seed:integer;
Begin
Seed:=MisSqSeed* MisSqSeed; MisSqSeed:=(Seed DIV 100) MOD 10000; Result:= MisSqSeed ;
End;
Линейный конгруэнтный метод
Линейный конгруэнтный метод предложен Д.Г. Лехмером (D.H. Lehmer) в 1949 году. Он основан на математическом выражении:
X n+1 = (aX n +c)mod m
где: m – модуль 0 < m ; a – множитель 0 ≤ a < m ; с – приращение 0 ≤ c < m ; в момент запуска Xn= X0 ; X0 – начальное значение
Конгруэнтная последовательность всегда образует петли, т.е. обязательно существует цикл, который будет повторяться бесконечное количество раз. Поэтому для получения большого периода повторения m должно быть достаточно большим.
72 |
Рисунок 15.1. – Пример ПСП последовательности сгенерированной в программе Mathcad |
Из представленного на рисунке 15.1 графика видно, что период линейной конгруэнтной последо- |
вательности с параметрами a=11, c=67 и m=255 невелик. Поэтому такая ПСП вряд ли подойдёт |
для применения в криптографических системах. |
Генератор псевдослучайных чисел, поставляемый с системой
Большинство языков программирования обладают встроенными генераторами ПСП. Например, в среде Delphi имеется функция:
function Random [( Range: Integer)];
выдающая равномерно распределенное число от 0 до Range-1, и связанная с ней переменная
var RandSeed: LongInt = 0;
инициализирующая старт последовательности. Однако почти все встроенные генераторы используют рассмотренную выше рекуррентную последовательность.
Оценка качества генератора ПСП
Качественный генератор случайных чисел характеризуется тремя свойствами:
1.Равномерным распределением случайных чисел.
2.Непредсказуемостью значений.
3.Замкнутостью цикла (способностью генерировать весь перечень значений из заданного подмножества).
При оценке качества ПСП различают два вида критериев: эмпирические критерии, при которых компьютер манипулирует группами чисел последовательности и вычисляет определённые статистики, и теоретические критерии, для которых характеристики последовательности определяются с помощью теоретико-числовых методов, основанных на рекуррентных правилах, которые используются для образования последовательности.
Один из наиболее эффективных способов оценки последовательность на “качество случайности” основан на критерии “Хи-квадрат”- χ2 . Однако в нашей лабораторной работе мы проведём анализ ПСП с помощью трёх эмпирических критериев:
-тест на длительность периода повторения последовательности;
-критерий равномерности (критерий частот);
-тест на пропуски.
Критерий равномерности проверяет тот факт. что ПСП распределяет генерируемые значения по всему заданному диапазону.
73
Тест на пропуски гарантирует, что последовательность случайных чисел не будет сначала попадать в один поддиапазон, затем во второй, затем в третий…, несмотря на то, что в целом числа будут равномерно распределены по поддиапазону.
Задание
1.Подготовьте программную реализацию трех различных генераторов псевдослучайных последовательностей, например системного генератора, генератора на основе метода середин квадратов и линейного конгруэнтного метода.
2.Оцените качество генератора поставляемого с системой (функция Random) генераторов ПСП рассмотренных в данной работе по критерию равномерности и теста на пропуски.
3.Предложите способ тестирования и проведите анализ генератора построенного на основе линейного конгруэнтного метода на длительность периода повторения.
При визуализации результатов работы (задание 2) целесообразно воспользоваться диаграммой TChart. Описание этого компонента вы найдёте среди приложений к этому материалу.