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

Эквивалентность дка и нка

Введем отношение эквивалентности на множестве всех конечных автоматов (распознавателей).

Определение 3.7.

Два автомата эквивалентны, если они допускают один и тот же язык.

Например, автоматы М и М' из предыдущего примера эквива-лентны. Пусть LD – класс языков, допускаемых детерминиро-ванными конечными автоматами, а LN – класс языков, допускаемых недетерминированными конечными автоматами. Наша цель - показать, что LD­­ = LN. В этом смысле понятия ДКА и НКА равно-сильны. Так как ДКА есть частный случай НКА (когда (q, a) = 1), то, очевидно, LD­­LN. Покажем, что LN ­­LD. Для этого для любого НКА М, допускающего язык L(M), достаточно построить ДКА М' такой, что L(M') = L(M), т.е. эквивалентный М.

Рассмотрим преобразование НКА в эквивалентный ДКА сначала на примере.

Пример 3.8.

Обозначим через М следующий НКА М = (Q, , q0, , F ):

q0 a q1 a

b

q2

Построим эквивалентный ему ДКА M' = (Q', , {q0}, ', F' ).

  1. Положим q0' ={q0}.

  2. '(q0', a) = (q0, a) = {q1, q2}, '(q0', b) = (q0, b) = .

  3. Положим q1' = {q1, q2}, q2' = .

  4. Вычисляем:

'(q1', a) = (q1, a)   (q2, a) = {q1, q2}   = {q1, q2} = q1',

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

'(q2', a) =  = q2', '(q2', b) =  = q2'.

Так как новых состояний q' не появилось, то процесс закончен. Получился M':

b

q'0 a q'1 a

b

q'2 a, b

Легко видеть, что это ДКА и что L(M') = L(M).

Теорема 3.9.

Пусть L – язык, допускаемый недетерминированным конечным автоматом MN = (QN, , N, q0, FN). Тогда существует детерминированный конечный автомат MD = (QD, , D, q0, FD) такой, что L = L(MD).

Доказательство.

Покажем, как по данному НКА MN построить ДКА MD. Будем использовать для этого процедуру (назовем ее Det), описанную ниже, которая по MN строит диаграмму переходов ГD автомата MD. Заметим, что, по определению, каждая вершина ГD должна иметь  выходящих дуг, помеченных различными символами из . Процедура Det останавливается лишь после того, как будут построены все такие дуги.

Процедура Det:

Шаг 1. Строим граф ГD, состоящий из единственной вершины {q0}, которую считаем начальной.

Шаг 2. Повторяем этот шаг до тех пор, пока у каждой построенной вершины в ГD не будет ровно  выходящих дуг:

  1. Берем вершину {qi, qj, . . ., qk}, принадлежащую ГD, в которой отсутствует выходящая дуга, помеченная некоторым символом а  .

  2. Вычисляем N(qi, a), N(qj, a), . . ., N(qk, a).

  3. Образуем объединение этих множеств: N(qi, a)  N(qj, a)  ...  N(qk, a) = {ql, qm, ..., qn}.

  4. Добавляем в ГD вершину, помеченную {ql, qm, ..., qn} (если она еще не была помещена в ГD).

  5. Добавляем в ГD дугу, ведущую из вершины {qi, qj, . . ., qk} в вершину {ql, qm, ..., qn} и помеченную символом а.

Шаг 3. Каждая вершина в ГD, чья метка содержит некоторую qf  F, считается финальной и помещается в множество FD.

Шаг 4. Если MN допускал строку , то вершина {q0} также помещается в FD.

Ясно, что процедура Det сходится (т.е. заканчивает свою работу через конечное число шагов). Действительно, каждый виток цикла в Шаге 2 добавляет дугу в ГD. Но ГD может иметь самое большее  дуг, так что этот цикл рано или поздно останавливается.

Покажем теперь, что в результате работы процедуры Det мы получим требуемый автомат MD (заданный своей диаграммой переходов ГD). Используем индукцию по длине n входной строки. Очевидно, что при n = 0   L(MN) тогда и только тогда, когда   L(MD). Предположим, что для любой строки   *, длина которой   n, существование в ГN пути, помеченного строкой , из вершины q0 в вершину qi влечет существование в ГD пути, помеченного , из вершины {q0} в вершину Si = {..., qi, ...}, и наоборот.

Пусть теперь  = n + 1. Положим  = а и рассмотрим путь в ГN из q0 в qj, помеченный строкой . Тогда должен существовать путь, помеченный , из q0 в qi и дуга (или совокупность дуг) из qi в qj, помеченная символом а. По предположению индукции, в ГD существует путь из {q0} в Si, помеченный строкой , а по построению в ГD должна существовать дуга, помеченная а, из Si в некоторую вершину, чья метка содержит qj. Аналогичным образом, несложно провести и обратное рассуждение. Таким образом, видим, что наше утверждение верно и для случая  = n + 1, откуда следует его истинность для любого натурального числа n. Наконец, замечаем, что если N*(q0, ) содержит некоторое финальное состояние qf, то qf   D*({q0}, ) и, значит, D*({q0}, )  FD, и наоборот, если qf   D*({q0}, ), то qf   N*(q0, ). Следовательно, L(MN) = L(MD). Теорема доказана.