Алгоритм Преобразование НКА в ДКА
Вход: НКА .
Выход: ДКА .
Шаг 1. Пометить первый столбец таблицы переходов ДКА начальным состоянием (множеством начальных состояний) НКА
.
Шаг 2. Заполняем очередной столбец таблицы переходов , помеченный символами
, для этого определяем те состояния
, которые могут быть достигнуты из каждого символа строки
при каждом входном символе
. Поместить каждое найденное множество
(в том числе
) в соответствующие позиции столбца
таблицы
, т.е.:
для некоторого
}
Шаг 3. Для каждого нового множества (кроме
), полученного в столбце
таблицы переходов
, добавить новый столбец в таблицу, помеченный
.
Шаг 4. Если в таблице переходов КА есть столбец с незаполненными позициями, то перейти к шагу 2.
Шаг 5. Во множество ДКА
включить каждое множество, помечающее столбец таблицы переходов
и содержащее
НКА
.
Шаг 6. Составить таблицу новых обозначений множеств состояний и определить ДКА в этих обозначениях.
Этот алгоритм обеспечивает отсутствие недостижимых состояний ДКА, но не гарантирует его минимальности.
Пример Пример 2.1.Дана регулярная грамматика с правилами
. Построить по регулярной грамматике КА и преобразовать полученный автомат к детерминированному виду.
Построим по НКА из примера 2.1 ДКА
.
1 Строим таблицу переходов для ДКА (таблица 2.2).
Таблица 2.2 – Построение функции переходов для ДКА
Шаг | |||||||
F | S | A, B | A, N | B, N | A | N | B |
a | A, B | A, N | A | N | A | ![]() | N |
b | ![]() | B, N | N | B | N | ![]() | B |
2 Во множество заключительных состояний автомата включим элементы
.
3 Введем следующие новые обозначения состояний автомата : (A,B)=С, (A, N)=D, (B, N)=E.
4 Искомый ДКА определяется следующей пятеркой объектов: ,
, функция переходов задана таблицей 2.3,
,
.
Таблица 2.3 – Функция переходов для ДКА
![]() | S | A | B | С | D | E | N |
a | C | A | N | D | A | N | ![]() |
b | ![]() | N | B | E | N | B | ![]() |
Граф полученного ДКА представлен на рисунке 2.1.
![]() |
Рисунок 2.1 – Граф ДКА
Дата добавления: 2016-03-27; просмотров: 4074;