
- •Оглавление
- •1. Информация, ее представление и измерение
- •2. Системы счисления и действия в них
- •3. Пространство сообщений. Коды обнаружения и исправления ошибок
- •4. Кодирование и шифрование информации
- •4.1. Криптография и криптоанализ
- •4.2. Традиционные симметричные криптосистемы
- •4.2. Шифрование методом замены
- •4.3. Шифрование методами перестановки
- •4.4. Шифрование методом гаммирования
- •4.3.Элементы криптоанализа
- •5. Функции алгебры логики. Программная реализация логических функций
- •5.1. Основные функции алгебры логики
- •Коммутативность
- •Ассоциативность
- •Дистрибутивность
- •5.2. Булева алгебра. Функциональная полнота
- •Свойства алгебры Жегалкина
- •1. Коммутативность
- •2. Дистрибутивность
- •3. Идемпотентность
- •5.3. Минимизация функций алгебры логики
- •5.4. Программная реализация логических функций и автоматов
- •6. Логические элементы эвм
- •8. Данные, типы данных, структуры и обработка
- •9. Методы разработки и анализа алгоритмов
- •10. Теория конечных автоматов
- •10.1. Определение конечного автомата
- •10.2. Способы представления конечных автоматов
- •11. Архитектура эвм
- •12. Программное и техническое обеспечение эвм
- •13. Информационные структуры
- •13.1. Последовательное и связанное распределение данных
- •13.2. Стеки и очереди
- •13.3. Деревья
- •13.4. Представление деревьев
- •13.5. Прохождение деревьев, леса
- •14. Формальные языки и грамматики
- •14.1. Введение в теорию формальных языков и грамматик
- •14.2. Выводы цепочек формальных грамматик. Деревья ксг
- •14.3. Основные понятия теории формальных языков и грамматик
- •Литература
10. Теория конечных автоматов
10.1. Определение конечного автомата
Теория автоматов лежит в основе теории построения компиляторов. Конечный автомат - одно из основных понятий. Под автоматом подразумевается не реально существующее техническое устройство, хотя такое устройство может быть построено, а некоторая математическая модель, свойства и поведение которой можно иммитировать с помощью программы на вычислительной машине. Конечный автомат является простейшей из моделей теории автоматов и как правило служит управляющим устройством для всех остальных видов автоматов. Конечный автомат обладает рядом свойств:
-
конечный автомат может решать ряд легких задач компиляции. Лексический блок почти всегда строится на основе конечного автомата.
-
работа конечного автомата отличается высоким быстродействием.
-
моделирование конечного автомата требует фиксированного объема памяти, что упрощает управление памятью.
-
существует ряд теорем и алгоритмов, позволяющих конструировать и упрощать конечные автоматы.
В литературе существует несколько отличных определений конечного автомата. Однако, общим в них является то, что конечный автомат моделирует вычислительное устройство с фиксированным объемом памяти, которое читает последовательности входных символов, принадлежащие некоторому входному множеству. Принципиальные различия в определениях связаны с тем, что автомат делает на выходе. Выходом автомата может быть указание на то « допустима » или нет данная входная цепочка. « Допустимой » называется правильно построенная или синтаксически правильная цепочка. Например, цепочка, которая должна изображать числовую константу, считается построенной неправильно, если она содержит две десятичные точки.
Определение: Конечный автомат - это формальная система, которая задается с помощью следующих объектов [10]:
-
конечным множеством входных символов;
-
конечным множеством состояний;
-
функцией переходов, которая каждой паре ( текущее состояние, входной символ) ставит в соответствие новое состояние;
-
начальным состоянием;
-
подмножеством состояний , выделенных в качестве допускающих или заключительных.
Пример. Разберем работу контроллера, проверяющего четно или нечетно число единиц в произвольной цепочке, состоящей из нулей и единиц. Допустим, что соответствующий конечный автомат должен « допускать» все цепочки, содержащие нечетное число единиц и « отвергать » цепочки с четным их числом. Назовем этот автомат « контроллером четности ». Считаем, что символы, отличные от 0 и 1 нельзя подавать на вход автомата. Итак, входной алфавит контроллера есть множество {0, 1} . Считаем, что в конкретный момент времени конечный автомат имеет дело лишь с одним входным символом, а информацию о предыдущих символах входной цепочки сохраняет с помощью конечного множества состояний. В качестве множества состояний будем рассматривать множество { чет, нечет }, одно из этих состояний должно быть выбрано в качестве начального. Пусть им будет состояние {чет}, поскольку на первом шаге число прочитанных единиц равно нулю, а нуль есть четное число. При чтении очередного входного символа состояние автомата либо меняется, либо сохраняется прежним причем новое его состояние зависит от входного символа и текущего состояния. Такое изменение состояния называется переходом.
Работа автомата может описываться математически функцией переходов вида ( Sтек., x ) = Sнов. Иначе это можно записать следующим образом:
( чет., 0) = чет. ( чет., 1) = нечет.
( нечет., 0) = нечет. ( нечет., 1) = чет.
Контроллер имеет единственное допускающее состояние НЕЧЕТ, а ЧЕТ есть « отвергающее » состояние. Отразим последовательность переходов автомата при подаче на его вход цепочки 1101.
ЧЕТ
НЕЧЕТ
ЧЕТ
ЧЕТ
НЕЧЕТ
Таблица переходов такого автомата имеет вид:
-
0
1
чет
чет
нечет
нечет
нечет
чет
Определение. Конечный автомат - это формальная система
S = { A, Q, , ,V },
объекты которой следующие:
-
A - конечное множество входных символов (множество
терминалов);
-
Q - конечное множество внутренних состояний автомата
(множество нетерминалов);
-
V - конечное множество выходных символов (выходной алфавит);
-
- функция переходов, для которой характерно A Q Q;
-
- функция выходов, определяющая отображение вида :
A Q V.