
- •5.3 Задачи к главе 5 56
- •6.4 Задачи к главе 6 67
- •7.5 Задачи к главе 7 85
- •1 Элементы теории множеств и отношений
- •1.1 Условные обозначения, принятые в тексте
- •1.2 Множества. Способы задания множеств
- •1.3 Операции над множествами
- •1.4 Действия с цепочками
- •1.5 Число элементов множества
- •Решение
- •1.6 Отношения
- •Решение
- •1.7 Свойства бинарных отношений
- •1.8 Операции с бинарными отношениями
- •1.9 Упражнения и задачи к главе 1
- •2 Элементы алгебры логики
- •2.1 Простые высказывания; логические связки
- •2.2 Составные высказывания. Таблицы истинности
- •2.3 Логические законы
- •2.4 Построение заданных составных высказываний
- •2.5 Отношения между высказываниями
- •2.6 Аргументы
- •2.7 Задачи на построение таблиц истинности
- •3 Элементы теории графов
- •3.1 Общие понятия и определения
- •3.2 Способы задания графов
- •3.3 Элементы графов
- •3.4 Операции с частями графа
- •3.5 Диаметр, радиус и центр графа
- •3.6 Диаметр протяженности, радиус протяженности и центр протяженности графа
- •3.7 Задачи к главе 3
- •4 Теория конечных автоматов
- •4.1 Конечные автоматы – распознаватели
- •4.2 Эквивалентные состояния ка
- •4.3 Недостижимые состояния ка
- •4.4 Недетерминированный конечный автомат
- •4.5 Задачи к главе 4
- •5 Автоматы с магазинной памятью
- •5.1 Автоматы-распознаватели с магазинной памятью
- •5.2 Автоматы–трансляторы с магазинной памятью
- •Параметры мп-транслятора:
- •5.3 Задачи к главе 5
- •6 Грамматики
- •6.1 Общие сведения
- •6.2 Классификация грамматик
- •6.3 Эквивалентные преобразования грамматик
- •6.3 1 Удаление или добавление бесполезных (непродуктивных и недостижимых) нетерминалов
- •Решение
- •6.3.2 Добавление нетерминала
- •6.3.3 Подстановка правил
- •6.3.4 Изменение направления рекурсии
- •6.4 Задачи к главе 6
- •7 Распознаватели для грамматик
- •7.1 Построение ка–распознавателей для автоматных
- •Решение
- •7.2 Построение ка–распознавателей для праволинейных грамматик
- •7.3 Построение мп–распознавателей для s – грамматик
- •7.4 Построение мп–распознавателей для q – грамматик
- •7.5 Задачи к главе 7
4.4 Недетерминированный конечный автомат
Недетерминированный конечный автомат (в дальнейшем НКА) представляет собой обычный КА с той разницей, что в таблице переходов паре "входной символ – состояние" ставится в соответствие множество состояний (а не единственное, как в КА) и начальных состояний может быть несколько. Такой автомат может получиться при решении конкретной задачи – построении распознавателя для регулярного множества. Единственный недостаток такого НКА, по сравнению с КА, невозможность простой программной реализации.
В процессе построения такого недетерминированного конечного автомата должны быть определены следующие параметры:
а) входной алфавит V (конечное множество входных символов и символ "конец цепочки");
б) конечное множество состояний S;
в) множество начальных состояний Sнач (подмножество состояний, с которых может начинать работу НКА при обработке новой цепочки);
г) множество допускающих состояний Sдоп (подмножество множества состояний S, с которым сравнивается достигнутое НКА состояние после прихода символа "конец цепочки");
д) таблица переходов (управляющая таблица), которая паре "текущее состояние – входной символ" ставит в соответствие несколько новых состояний; если паре "текущее состояние – входной символ" нельзя поставить в соответствие ни одно состояние из множества S, то клетку таблицы переходов оставляют пустой.
Работу НКА можно интерпретировать двумя способами:
1 На некоторых шагах при распознании цепочки с помощью НКА есть множество выборов. Если имеется хотя бы одна последовательность состояний, при которой НКА заканчивает работу в допускающем состоянии, то такая цепочка будет допущена этим НКА.
2 При возникновении альтернативы во время работы НКА (в выборе начального состояния или перехода) автомат распадается на конечные автоматы по количеству альтернатив, которые работают параллельно. Если при поступлении символа "конец цепочки" хотя бы один из параллельно работающих КА находится в допускающем состоянии, то такая цепочка будет допущена этим НКА.
Существует процедура эквивалентного преобразования НКА в КА по следующему алгоритму (преобразуется таблица переходов НКА):
1 Для будущей управляющей таблицы эквивалентного КА изобразить столбцы по количеству входных символов и обозначить их входными символами.
2 В первую клетку первой строки занести как множество все начальные состояния НКА.
3 Заполнить остальные клетки этой строки (кроме последней): по таблице переходов НКА выписать в виде множеств все состояния, в которые переходят состояния, записанные в первой клетке через соответствующие входные символы.
4 В первой клетке очередной строки записать одно из новых множеств состояний, которые получены в п.3 при заполнении клеток таблицы переходов, и выполнить п.3.
5 Закончить процесс построения таблицы переходов после того, как будут исчерпаны все варианты множеств, которые появились в таблице.
6 При заполнении столбца с символом "конец цепочки" ставить "допустить", если в множество состояний первой клетки строки входит хотя бы одно допускающее состояние НКА, и "отвергнуть" – в противном случае.
7. Переобозначить множества состояний как новые состояния и заново заполнить таблицу переходов (получена таблица переходов эквивалентного КА).
8. Определить остальные параметры КА по полученной таблице переходов.
Описанную выше процедуру проиллюстрируем на конкретном примере.
Пример. НКА задан таблицей переходов:
S |
k |
n |
–| |
A |
A |
B,C |
0 |
B |
B |
C |
1 |
C |
|
A,C |
1 |
Примечание. Для упрощения записи в последнем столбце таблицы символом "0" обозначено действие "отвергнуть", символом "1" – "допустить".
V = { k, n, –| }; S нач = { A, B };
S = { A, B, C }; S доп = { B, C }.
Преобразовать заданный НКА в КА и минимизировать полученный КА.
Р е ш е н и е
1 Выполним процедуру преобразования НКА в КА по описанному выше алгоритму(см. рис а на следующей стр.)
2 Переобозначим состояния следующим образом( см. рис.б):
a = { A, B }; b = { B, C }; c = { B }; d = { A, C }; e = { C };
f = { A }; g = { A, B, C }.
а (до переобозначения) б (после переобозначения)
S |
k |
n |
–| |
|
S |
k |
n |
–| |
A,B |
A,B |
B,C |
1 |
|
a |
a |
b |
1 |
B,C |
B |
A,C |
1 |
|
b |
c |
d |
1 |
B |
B |
C |
1 |
|
c |
c |
e |
1 |
A,C |
A |
A,B,C |
1 |
|
d |
f |
g |
1 |
C |
|
A,C |
1 |
|
e |
|
d |
1 |
A |
A |
B,C |
0 |
|
f |
f |
b |
0 |
A,B,C |
A,B |
A,B,C |
1 |
|
g |
a |
g |
1 |
3 Проверим состояния полученного КА на достижимость:
{a} {a,b} {a, b, c, d} {a, b, c, d, e,f, g}
Все состояния КА достижимы.
4 Проверим состояния полученного КА на эквивалентность:
Первое разбиение множества состояний на подмножества по входному символу "конец цепочки": {f}; {a,b,c,d,e,g}.
Проанализируем воздействие входного символа "k" на второе подмножество:
d f; e { }; остальные остаются в этом же подмножестве. Есть основания выделить d и e в отдельные подмножества.
Теперь разбиение будет иметь вид: {f}; {d}; {e}; {a,b,c,g}.
Проанализируем воздействие входного символа "n" на последнее подмножество:
b d; c e; a b; g g.
Состояния b и c переходят в другие группы и их нужно выделить; состояние а – в выделенное на этом шаге состояние b и на этом основании его тоже нужно выделить. В результате:
{f}; {d}; {e}; {a}; {b}; {c}; {g}.
Вывод: эквивалентных состояний нет; полученный КА является минимальным.
5 По таблице переходов КА определим остальные его параметры:
V = { k, n, –| }; S нач ={a}; S доп = {a, b, c, d, e, g};
S = {a, b, c, d, e, f, g}.