примеры НКА + Алгоритм моделирования.ppt
- Количество слайдов: 16
Пример: Построим НКА для регулярного выражения ab*+c, длина которого 5. НКА для a, b, c имеет вид: a S 0 Sf
С помощью следующей конструкции S 0 M/ S 0/ S f/ Sf Построим автомат для b* b
Затем с помощью конструкции S 0=S 0 / M/ S f/ S 0// M// построим автомат для ab* a b Sf=Sf//
Наконец, с помощью конструкции S 0/ M 1 S 1/ S 0 S 1 S 0// M 2 S 1/ построим НКА для ab*+c
s 2 a s 3 s 4 s 5 b s 6 s 7 s 10 s 8 c s 9 Этот автомат имеет 10 состояний.
Пример: b Рассмотрим НКА a s 2 a s 1 b s 4 b s 3
Из начального состояния s 1 можно достичь s 3 и заключительного состояния s 4 по путям, помеченным символом . s 1 s 3 s 2 s 4 Для вычисления рефлексивного и транзитивного замыкания G/ ориентированного графа G надо добавить ребро (s 1, s 4).
По М и G/ построим НКА М/ : b s 1 a, b b s 2 a s 4
При построении ДКА М// по автомату М/ образуется восемь состояний. Но только четырёх из них можно достичь из начального состояния, так что остальные четыре можно выбросить. ДКА М// имеет вид: b {s 1} {s 2, s 4} b a a b {s 2} a a, b
Распознавание образов, задаваемых регулярными выражениями. Дана цепочка-текст x=a 1 a 2…an и регулярное выражение , называемое образом. Необходимо найти такой наименьший индекс j, что для некоторого i подцепочка aiai+1…aj цепочки х принадлежит языку представленному выражением .
Задачу можно переформулировать, заменив данное регулярное выражением =I* , где I – алфавит цепочки-текста. Можно найти первое вхождение цепочки из L( ) в x=a 1 a 2…an , обнаружив кратчайший префикс цепочки х, принадлежащий языку выражения . Шаги решения: 1. Построить НКА М для распознавания множества, представленного выражением ; 2. Применить алгоритм для определения последовательности множеств состояний Si, в которые может перейти НКА М после прочтения цепочки a 1 a 2…ai при i=1, 2, …, n.
Как только в Sj попадает заключительное состояние, можно сказать, что у цепочки a 1, a 2, …, aj есть такой суффикс aiai+1…aj, что aiai+1…aj принадлежит языку, представленному выражением , при некотором 1 i j. Способ моделирования НКА М на цепочке х : исключить -переходы в М и тем самым построить НКА М/ без . 2. моделировать НКА М/ на входной цепочке x=a 1 a 2…an, вычислив для каждого i, 1 i n, множество состояний Si, в которые мог бы попасть М/ после прочтения a 1, a 2, …, aj. На самом деле каждое множество Si – это то состояние, в которое пришёл бы ДКА М// после прочтения a 1, a 2, …, aj. 1.
АЛГОРИТМ 1 (моделирование недетерминированного конечного автомата) • Вход: НКА M=(S, I, , s 0, F) и цепочка x=a 1 a 2…an из I*. • Выход: Последовательность S 0, S 1, …, Sn, где
Метод: Чтобы получить Si по Si-1 сначала найдём множество состояний Затем вычислим «замыкание» множества Ti, добавив к Ti все такие состояния u, что (t, ) содержит u для некоторого t, ранее оказавшегося в Ti. Это замыкание (оно и будет множеством Si) строится с помощью очереди состояний t Ti, для которых множество (t, ) ещё не рассматривалось.
1. For i← 0 until n do begin 2. If i=0 then Si←{s 0} 3. Else Si← ; {Si ещё не достигло своего конечного значения. Сейчас оно соответствует множеству Ti} 4. Пометить каждое состояние t Si как «рассмотренное» ; 5. Пометить каждое состояние t S-Si как «нерассмотренное» ; 6. ОЧЕРЕДЬ ← Si;
7. While список ОЧЕРЕДЬ не пуст do begin 8. Найти и удалить первый элемент t, входящий в ОЧЕРЕДЬ; 9. For u (t, ) do 10. if u – «нерассмотренное» состояние then begin 11. Пометить u как «рассмотренное» ; 12. Добавить u в ОЧЕРЕДЬ и в Si; end; END.
примеры НКА + Алгоритм моделирования.ppt