- •Лекция 1 Список рекомендуемой литературы
- •Теория формальных языков. Модели языка по Хомскому
- •Обозначения
- •Лекция 2 Неоднозначность грамматики
- •Укорачивающие контекстно-свободные грамматики
- •Автоматные грамматики
- •Задача разбора
- •Нормальные формы Бэкуса-Наура. Б.Н.Ф. – нотация
- •Лекция 3
- •Контекстные условия
- •Конечные автоматы
- •Связь автоматных грамматик и конечных автоматов
- •Минимизация автоматов
- •Лекция 4 Машина Тьюринга
- •Минимизация конечного автомата
- •Кс-языки и их связь с мп-автоматами. Магазинная память (мп)
- •Мп-автоматы
- •Мп-автомат, распознающий язык {0n 1n | nN}
- •Графическое описание мп-автомата
- •Лекция 5
- •Совместимые состояния частичных автоматов
- •Нахождение максимальной группировки
- •Построение минимального частичного автомата
- •Модель динамического поведения. Асинхронный процесс как метамодель
- •Лекция 6 Асинхронный процесс
- •Лекция 7 Сети Петри
- •Пространство состояний сетей Петри
- •Анализ сетей Петри
- •Методы анализа сетей Петри. Дерево достижимости
- •Лекция 8 Матричные уравнения
- •Моделирование с помощью сетей Петри
- •События и условия
- •Одновременность и конфликт
Минимизация автоматов
Множество определённых цепочек может допускаться различными конечными автоматами. Минимизация конечных автоматов предполагает отыскание автомата с минимальным числом состояний, допускающего заданный набор цепочек (конкретный язык).
Оказывается, что существует и единственен автомат, допускающий заданное множество цепочек, который имеет меньшее число состояний, чем любой другой, допускающий то же множество (единственность понимается с точностью до переобозначения состояний). Такой автомат называется минимальным.
Состояние S автомата M называется неотличимым от состояния Т автомата N, если и только если автомат М, начав работу с состояния S, будет допускать в точности те же цепочки, что и автомат N, начавший работать с состояния Т.
Автоматы М и N неотличимы тогда и только тогда, когда их начальные состояния неотличимы.
Таким образом, неотличимость есть отношение, заданное на множестве автоматов. Оно рефлексивно, симметрично и транзитивно, следовательно, оно является отношением эквивалентности. Значит, всё множество конечных автоматов может быть разбито на набор непересекающихся подмножеств, в каждом из которых автоматы неотличимы.
В дальнейшем мы будем рассматривать автоматы с одним и тем же множеством символов.
Можно доказать следующую теорему: состояния S и Т эквивалентны тогда и только тогда, когда выполняются следующие условия:
Условие подобия: состояния S и Т либо допускающие, либо отвергающие одновременно.
Условие преемственности: для всех входных символов состояния S и Т должны переходить в эквивалентные состояния, т.е. их преемники эквивалентны.
Состояние S автомата М называется недостижимым, если ни для какой входной цепочки в состояние S нельзя попасть из начального состояния.
Для определения недостижимых состояний организуют специальную таблицу, которую заполняют следующим образом. Включим в таблицу начальное состояние q0, затем будем включать в неё состояния, в которые можно попасть из q0 по каждому входному символу. Затем для каждого состояния, включённого в таблицу, определим состояния, которые достижимы из него по каждому входному символу и т.д.
Процесс заканчивается тогда, когда в таблицу не будет включаться новых состояний. Этот алгоритм конечен. Не включённые в таблицу состояния будут недостижимы.
Автомат называется приведённым, если он не содержит недостижимых состояний и никакие два его состояния не эквивалентны друг другу.
Чтобы получить приведённый автомат, необходимо выбросить недостижимые состояния и соединить эквивалентные состояния в одно состояние. Все приведённые автоматы, допускающие один и тот же язык, эквивалентны с точностью до обозначения состояния.
Имеется алгоритм приведения, основанный на разбиении на блоки. Идея алгоритма такова: все состояния делят на непересекающиеся множества так, чтобы неэквивалентные состояния попали в разные блоки. Сначала, используя условие подобия, множество состояний делим на два непересекающихся подмножества. Далее проверяем, что происходит под действием каждого входного символа с состояниями блока. При нарушении условия преемственности разбиваем блоки на меньшие относительно входного символа.