double arrow

Детерминизация конечных автоматов

Для того, чтобы построить соответствующее таким грамматикам автоматы, можно рассматривать переходы F автомата Q ´ VT в множество подмножеств Q (т.е. в P(Q)). При этом

½P(Q)½=2½Q½.

Будем называть недетерминированным конечным автоматом S пятерку объектов S = <Q, VT, q0, F, K>, где интерпретация Q, VT, q0, K такая же, как и раньше, а F – отображение Q ´ VT в P(Q).

Определение цепочек, допускаемых автоматом, остается прежним, но если в детерминированном автомате последовательность конфигураций однозначно определялась заданием входной цепочки, так как из каждой конфигурации автомат мог перейти не более чем в одну конфигурацию, то в недетерминированном случае это не так. Поэтому при интерпретации определения "цепочка X допущена" как (q0,x) ├ (q, l)&qÎK необходимо при анализе цепочки, моделируя работу автомата, перебрать варианты выполнения тактов, чтобы найти тот (или те), которые приводят в заключительную ситуацию. В силу тех же соображений (тождественность движений по графу и при порождении цепочки, и при ее допускании) можем утверждать, что для любой грамматики G может быть построен конечный автомат A (в общем случае недетерминированный), такой, что L(G)=L(A). Соответствия между параметрами грамматики и автомата остаются те же.

Возникает естественный вопрос о соотношении класса языков, допускаемых детерминированными и недетерминированными автоматами. Ясно, что для любого детерминированного автомата A существует недетерминированный A' допускающий тот же самый язык (достаточно в качестве A' взять А). Но верно ли обратное? Ответ на этот вопрос дает следующая теорема.

Теорема 1. Если L=L(A) для некоторого недетерминированного автомата A, то найдется конечный автомат A' такой, что L(A')=L(A).

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

Пусть дан недетерминированный конечный автомат А = <Q, VT, q0, F, K>. Построим соответствующий детерминированный автомат А’= <Q’, VT, q0’, F’, K’>

Q’ = P(Q). При этом множество состояний будем обозначать как .

q0’=[q0].

K’ = {/ ÇK ¹Æ}

F’(, a)=

Несложно доказать методом математической индукции, что для любого I

([q0],XY) ├iA’(B,Y) Û B={p/ (q0, XY) ├iA(p,Y)}

½X½=i.

Значит, для любой цепочки Х

([q0],X) ├iA’(B,l) Û B={p/ (q0, X) ├iA(p,l)}

Поэтому, в случае BÎ K’, т.е. если Х – цепочка, допускаемая детерминированным автоматом, то в исходном недетерминированном автомате существует путь из начального в конечное состояние при чтении этой цепочки, и, следовательно, L(A)=L(A’).

Т.о., сопоставляя доказанные утверждения, получаем:

Класс А-языков и класс языков, распознаваемых конечными автоматами, совпадает.

Так, например, для автомата, представленного на рис. 5, соответствующий детерминированный автомат представлен на рис. 6.

Рис.6

Здесь F(S,a)= [S,A] = A’

F([S,A], a) = [S,A]

F([S,A],b) = [A, K] = K’

F([A,K],b)= [A, K] = K’

Для автомата на рис. 7а детерминированный автомат представлен на рис.7b.

Рис.7

Алгоритм построения детерминированного автомата по недетерминированному:

Строим начальное состояние q0’= [q0], помечаем его как начальное.

Для каждого состояния, построенного на предыдущем шаге, строим

F(qi’, a) для всех aÎVT. Если для какого-нибудь из построенных состояний функция перехода ещё не построена, возвращаемся к шагу 2.

Помечаем как конечные все состояния qi’=/ Ç K¹Æ.

Конечность процесса обеспечивается конечностью множества P(Q).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: