- •Курс лекций
- •Оглавление
- •Лекция 1 Языки и грамматики Языки
- •ГГрамматики
- •Лекция 2 Конечные автоматы Автоматы
- •Детерминированные конечные автоматы (распознаватели)
- •Языки и детерминированные конечные автоматы
- •Лекция 3 Конечные автоматы Недетерминированные конечные автоматы (распознаватели)
- •Эквивалентность дка и нка
- •Лекция 4 Конечные автоматы Минимизация конечных автоматов
- •Лекция 5 Регулярные выражения и регулярные грамматики
- •Регулярные выражения
- •Связь между регулярными выражениями и автоматными языками
- •Лекция 6 Регулярные выражения и регулярные грамматики Регулярные грамматики
- •Лекция 7 Свойства регулярных языков
- •Замкнутость класса регулярных языков
- •Алгоритмические проблемы регулярных языков
- •Лемма о расширении регулярных языков
- •Лекция 8 Контекстно-свободные языки
- •Контекстно-свободные грамматики
- •Лекция 9 Контекстно-свободные языки
- •Грамматический разбор
- •Неоднозначность грамматик и языков
- •Лекция 10 Преобразования кс‑грамматик и нормальные формы
- •Методы преобразования грамматик
- •Лекция 11 Преобразования кс‑грамматик и нормальные формы
- •Нормальные формы кс-грамматик
- •Лекция 12 Магазинные автоматы Магазинные автоматы
- •Недетерминированные магазинные автоматы
- •Лекция 13 Магазинные автоматы Магазинные автоматы и кс-языки
- •Лекция 14 Магазинные автоматы Детерминированные магазинные автоматы и детерминированные кс-языки
- •Лекция 15 Свойства контекстно-свободных языков
- •Лемма о расширении
- •Свойства замкнутости класса контекстно-свободных языков
- •Лекция 16 Свойства контекстно-свободных языков Некоторые алгоритмические проблемы для кс-языков
- •Предметный указатель
- •Формальные языки и грамматики Курс лекций
Лекция 3 Конечные автоматы Недетерминированные конечные автоматы (распознаватели)
Определение 3.1.
Недетерминированный конечный автомат (распознаватель), или НКА, – это пятерка М = (Q, , , q0, F), где Q, , q0, F определяются так же, как и для ДКА, а функция переходов выглядит так:
: Q ( {}) 2Q.
Пример 3.2.
q0 q1 q2
Заметим, что здесь
(q0, a) = {q1}, (q0, b) = , (q1, a) = {q2}, |
(q1, b) = {q0, q2}, (q2, a) = , (q2, b) = , |
значит, это НКА.
Определение 3.3.
Для НКА обобщенная функция переходов * определяется следующим образом: для любых qi, qj Q и * *(qi,) содержит qj тогда и только тогда, когда в диаграмме переходов этого НКА существует путь из qi в qj, помеченный .
Определение 3.4.
Язык, допускаемый НКА М, определяется так:
L(M) = { | * и *(q0,) F ¹ }.
Пример 3.5.
Рассмотрим НКА, заданный диаграммой:
q0 a q1 q2
Вычислим *(q1, а) и *(q2, ).
Рассмотрим сначала все пути из q1, соответствующие прочитанному символу а: {a(q1), a(q2), a(q0)}. В круглых скобках указаны вершины, в которых оканчиваются эти пути. Тогда, по определению,
*(q1, а) = {q0, q1, q2}.
Аналогично
*(q2, ) = {q0, q2}.
Заметим, что для любого q: q *(q, ).
От НКА М, содержащего -переходы, можно перейти к М' без -переходов так, что L(M) = L(M'). Для этого нужно для каждой пары (qi, а), qi Q, a , определить множество всех путей вида
= ... а ... ,
выходящих из вершины qi, и сформировать множество всех вершин qj1, ..., qjk, которыми оканчиваются эти пути.
Вводим новую функцию переходов ' для НКА М':
'(qi, а) = {qj1, ..., qjk},
и полагаем
М' = (Q, , ', q0, F).
Нетрудно видеть, что при этом
L(M) = L(M').
Это дает нам возможность в дальнейшем, при рассмотрении НКА как средства задания языков, считать, что НКА не содержит -переходов, т. е. : Q х 2Q.
Пример 3.6.
Рассмотрим НКА М, заданный диаграммой DМ:
q0 a, q1 b Здесь Q = {q0, q1, q2, q3},
={a, b}, F = {q1}.
a b b a
q2 b q3
b a
Построим автомат (недетерминированный) М' = (Q, , q0, ', F') без -переходов и такой, что L(M) = L(M'). Берем начальное состояние q0 и вычисляем все состояния, в которые М переходит из q0 по символу а и по символу b:
q0a q1, q0b q3,
q0a q3, q0b q2,
q0a q0, q0b q3,
q0a q2, q0b q1,
т.е. '(q0, a) = {q0, q1, q2, q3}
'(q0, b) = {q1, q2, q3}.
Теперь то же самое сделаем для q1:
q1a q3, q1b q1,
т.е. '(q1, a) = {q3}, '(q1, b) = {q1}.
Далее для q2 :
q2a q0, q2b q3,
q2a q2, q2b q2,
q2a q1,
т.е. '(q2, a) = {q0, q1, q2}, '(q2, b) = {q2, q3}.
Для q3 получаем:
q3a q3, q3b q1,
т.е. '(q3, a) = {q3}, '(q3, b) = {q1}.
Наконец заметим, что q1 (q0, ), т.е. допускается автоматом М, следовательно, q0 должно быть помещено в F'.
Таким образом, диаграмма DМ' автомата М' будет выглядеть следующим образом:
a
q0 a, b q1 b
b, a a b a
a a,b
q2 b q3
b, a a
Нетрудно видеть, что если некоторая строка L(M), то L(M'), и наоборот, т. е. L(M) = L(M').