- •Пример:
- •С помощью следующей конструкции
- •Затем с помощью конструкции
- •Наконец, с помощью конструкции
- •Пример:
- •Из начального состояния s1 можно достичь s3 и заключительного состояния s4 по путям,
- •По М и G/ построим НКА М/ :
- •построении ДКА М// по автомату М/ образует семь состояний. Но только четырёх из
- •Распознавание образов, задаваемых регулярными выражениями.
- •Как только в Sj попадает заключительное состояние, можно сказать, что у цепочки a1,a2,…,aj
- •АЛГОРИТМ 1 (моделирование недетерминированного конечного автомата)
- •Метод: Чтобы получить Si по Si-1 сначала найдём множество состояний
- •1.For i←0 until n do begin
- •7. While список ОЧЕРЕДЬ не пуст do begin
Как только в Sj попадает заключительное состояние, можно сказать, что у цепочки a1,a2,…,aj есть такой
суффикс aiai+1…aj, что aiai+1…aj принадлежит языку, представленному выражением , при некотором 1 i j.
Способ моделирования НКА М на цепочке х :
1.исключить -переходы в М и тем самым построить НКА М/ без .
2.моделировать НКА М/ на входной цепочке x=a1a2… an, вычислив для каждого i, 1 i n, множество состояний Si, в которые мог бы попасть М/ после прочтения a1,a2,…,aj. На самом деле каждое множество Si – это то состояние, в которое пришёл бы ДКА М// после прочтения a1,a2,…,aj.
АЛГОРИТМ 1 (моделирование недетерминированного конечного автомата)
•Вход: НКА M=(S, I, , s0, F) и цепочка x=a1a2…an из I*.
•Выход: Последовательность S0, S1, …, Sn, где
Метод: Чтобы получить Si по Si-1 сначала найдём множество состояний
Ti {t (s,ai) содержит t ддлнекоторого s 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←{s0}
3. Else Si← (s,ai) |
; |
s Si 1 |
|
{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; END.