Примеры автоматов-распознавателей

Продолжение лекции

Примеры  языков.

Будем писать символы в кавычках, только если их нужно явно выделить.

1. X={a,b,c}; L={аbc, cc}. Очевидно, ссÎL, cbсÏL.

2. X={a,b,c}; L=Æ. Очевидно, ccÏL.

3. X={a,b,c}; L= X*. Очевидно, aссÎL.также как и любая цепочка из этих символов.

4. X={a,b,c}; X={anbcn| n³0}. Очевидно, aabccÎL, cbaaÏL.

5. X={a,b,c}; L={anbcm| n, m³0}. Очевидно, aaaabccÎL, cbaaÏL.

6. X={a,b,c}; L={х | в цепочке х количества вхождений а, b и с равны}. Очевидно, ссbаbаÎL, ccbÏL

7. X={0,1}; L=множество четных двоичных чисел. Очевидно, 100ÎL, 011ÏL.

8. X={(,)}; L=множество правильных скобочных выражений. Очевидно, (( ))( )ÎL, ))(( )ÏL.

9. X={+,-,0,...,9,‘.’}; L= множество вещественных констант. Очевидно, -6.7ÎL10, 23++4...6ÏL.

10. X={a}; L={aÎV* | длина a равна 2k, где k = 0, 1, ...}. Очевидно, aaaaÎL, aÏL.

11. X={a}; L={aÎV* | длина a равна 2k, где k = 0, 1, ...}. Очевидно, aaaaÎL, aÎL, aaaÏL.

12. X={большой, мощный, тяжелый, …, кран, локомотив, контейнер, …, ставит, ведет, кладет, везет,…}; L= русский язык.


Определение автомата-распознавателя

Автомат-распознаватель (или разборщик) — это специальный автомат, который позволяет определить принадлежность цепочки символов некоторому языку.

Задача распознавателя заключается в том, чтобы на основании исходной цепочки дать ответ на вопрос, принадлежит ли она заданному языку или нет.

Определение 1. Конечным автоматом-распознавателем называется пятерка объектов: А=< Q , X , Q 0 , σ , F >, где:

Q - конечное непустое множество (состояний);

Х - конечное непустое множество входных сигналов (входной алфавит);

Q0ÎQ - начальное состояние;

σ: Q´X®Q - функция переходов;

F - множество заключительных (финальных) состояний.

FÍQ – может включать в себя одно и более состояний, причем пустым оно не может быть.

Если автомат в процессе обработки некоторой входной цепочки  попадает в одно из состояний из множества F , то это означает, что цепочка  принадлежит языку.

Графически вершины, соответствующие заключительным состояниям, изображаются кружком из двойной линии или более толстой линией, а в написании будем помечать их символом +: Q+.

Автоматы-распознаватели отличаются от автоматов-преобразователей тем, что функции выходов и переходов не зависят от входных сигналов и являются одноместными функциями состояний.

Определение. Язык, для которого существует распознающий его конечный автомат, называется автоматным языком.

Очевидно, что любой конечный язык может быть задан конечным автоматом и поэтому все конечные языки - автоматные.

Но, не для всех языков существуют распознающие их конечные автоматы. Иными словами, существуют и неавтоматные языки.

Для представления автомата-распознавателя используется как таблицу переходов, так и граф переходов - это аналог диаграмм Мура для конечных автоматов-преобразователей.

Начинает работать автомата-распознавателя из начального состояния. Символы распознаваемой цепочки поступают посимвольно, начиная с первого изменяют состояния в соответствии с таблицей переходов.

Если найдется такая последовательность переходов из одного состояния в другое, что в результате прочтениявходного слова автомат А окажется в одном из заключительных состояний, то мы говорим, что автомат А распознает (допускает) это слово в алфавите Х. Если же такой последовательности переходов найти не удалось, слово автоматом не распознается.

Примечание:

1. В множество входных символов Х обязательно включают особый символ "конец цепочки", который сообщает КА о том, что достигнутое состояние принадлежит множеству финальных состояний F, если оно принадлежит ему то данная цепочка пропускается; в противном случае цепочка отвергается. По сути КА работает как фильтр, который пропускает "правильные" цепочки.

2. При распознании цепочек может возникнуть ситуация, когда невозможно поставить текущей паре состояние-входной символ новое состояние. Это означает, что распознаваемая цепочка не принадлежит распознаваемому множеству, хотя она и не просмотрена до символа "конец цепочки". Такие ситуации в таблице переходов помечаются символом "Е" ("error"); попав в такое состояние КА отвергает текущую цепочку и переходит в начальное состояние. В конкретных программных реализациях может вызываться обработчик ошибок, выдаваться сообщение о характере ошибки и т.п.


Примеры автоматов-распознавателей

Пример 1.

X={a,b,c}; L={аbc, cc}.

Полностью определенный граф переходов автомата, распознающего язык L, приведен на рисунке а). Входные цепочки “abc” и “сс” (и только они) переводят автомат из начального состояния Q 0 в одно из заключительных состояний Q 5 или Q 3.

Рисунок – Граф переходов автомата-распознавателя

Граф переходов этого же автомата-распознавателя, у которого граф переходов неполностью определен, приведен на рисунок, б).

В общем случае будем считать, что если некоторый переход Q под воздействием некоторого входного сигнала а не определен в автомате-распознавателе, то это по умолчанию означает, что существует незаключительное состояние, в которое этот автомат переходит из Q при подаче а, причем под воздействием всех входных сигналов автомат не выходит из этого незаключительного состояния.

В частности, в языке L нет цепочек, начинающихся с b, поэтому по сигналу bавтомат переходит в незаключительное состояние Q 6.

Далее, если автомат находится в состоянии Q 1 (после подачи сигнала a), то не могут появиться сигналы a и c, автомат переходит в незаключительное состояние Q 6. и т.д.


Пример.

В данной записи n – количество символов.

Пример.

 

 


Пример .

 

Пример.

Автомат распознает слова baa, abbba, bb, но не распознает слова bbb, abab, abb.


Пример.

X={a,b,c}; L={anbcn| n³0}.

Этот язык не является автоматным. На рисунке  представлен один из вариантов попытки построить такой автомат, из которого видно, что автомат, фактически, должен “подсчитывать” число символов а в первой части цепочки, чтобы число символов с было в точности ему равно. Но конечный автомат имеет лишь конечную память, поэтому он не может распознавать все цепочки L. Это рассуждение, конечно, не доказательство. Дадим строгое доказательство неавтоматности L.

 

Теорема . Язык L={anbcn| n³0} неавтоматный.

Доказательство. Предположим противное, т. е. что существует автомат А, который распознает все цепочки языка L={anbcn| n³0} и не распознает ни одной цепочки, не принадлежащие ему. Пусть число состояний автомата А равно k. Рассмотрим цепочку аkbck. Под воздействием первой части цепочки - k последовательных символов “а” - автомат А не может не вернуться в какое-либо из состояний, в котором он уже находился. Пусть это будет состоянием Qn, и длина цикла - цепочки “аааа …а”, под воздействием которой автомат переходит из Qn в Qn, равна t, причем t>0.

Тогда цепочка аk-r так же, как и цепочка аk-rаrk переводят автомат А из начального состояния в состояние Qn. Но поскольку цепочка аkbck = аk-rаrbck переводит А из начального в заключительное состояние, то и цепочка аk-rbck переводит А из начального в заключительное состояние. Но поскольку r>0, то это значит, что А распознает цепочку аk-rbck, которая не принадлежит языку L={anbcn| n³0}. Итак, мы пришли к противоречию, предположив существование конечного автомата, распознающего L.

 


Пример.

X={a,b,c}; L={anbcm| n, m³0}.

В отличие от предыдущего языка, L – автоматный. Автомат рисунке только с двумя состояниями распознает L. Простота этого распознавателя объясняется тем, что он не должен отслеживать количества символов а и с во входных цепочках.

Рисунок

Пример.

X={a,b,c}; L={х | в цепочке х количества вхождений а, b и с равны}.

L  не автоматный.

Пример.

X={0,1};

L=множество четных двоичных чисел. Автомат рисунке с двумя состояниями распознает L.

Рисунок


Пример.

X={+,-,0,...,9}; L=множество целых констант.

Автомат с тремя состояниями распознает L. Вместо конечного числа цифр на переходах здесь поставлена просто буква ц, обозначающая любую цифру.

Пример.

X={ (, ) }; L=множество правильных скобочных выражений.

L9  не автоматный. Распознавание вложенных скобок требует запоминания произвольных объемов информации: глубина вложенности может быть любой.

Пример.

X={+,-,0,...,9,’.’}; L= множество вещественных констант.

Автомат распознает L. Заметьте, что автомат правильно распознает константы, в которых можно не писать знак и либо целая, либо дробная часть может быть опущена, но не обе сразу. Десятичная точка как признак вещественного числа обязательна.

 


Дата добавления: 2020-11-29; просмотров: 1337; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!