Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[01] Соколов В.А. Формальные языки и грамматики....doc
Скачиваний:
96
Добавлен:
29.10.2018
Размер:
1.44 Mб
Скачать

Лекция 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, qjQ и   **(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:

­q0aq1, ­q0bq3,

­q0a q3, ­q0bq2,

­q0a q0, ­q0bq3,

­qa  q2, ­q0bq1,

т.е. '(q0, a) = {q0, q1, q2, q3}

'(q0, b) = {q1, q2, q3}.

Теперь то же самое сделаем для q1:

­q1aq3, ­q1bq1,

т.е. '(q1, a) = {q3}, '(q1, b) = {q1}.

Далее для q2 :

­q2aq0, ­q2bq3,

­q2a  q2, ­q2bq2,

­q2a q1,

т.е. '(q2, a) = {q0, q1, q2}, '(q2, b) = {q2, q3}.

Для q3 получаем:

­q3aq3, ­q3bq1,

т.е. '(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').