на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Формальные языки
Введем необходимые обозначения. Пусть — непустое слово
в некотором алфавите, а
— наибольший собственный префикс
слова
,
являющийся его суффиксом. Тогда справедливы следующие утверждения:
- Слова
являются собственными префиксами и суффиксами слова
.
- Последовательность
обрывается на пустом слове.
- Любой префикс слова
, являющийся его суффиксом, находится в последовательности
Пример.
Пусть . Тогда

Определение.
Функцией откатов для слова называют
функцию
,
определяемую соотношением
, где
— префикс длины
слова
.
В нашем примере функция задается следующей таблицей:
Алгоритм
Кнута-Морриса-Пратта построения функции откатов для слова :
![\formula{
f(1) := 0;\\
\t for\ i :=1\ \t to\ n - 1\ \t do\\
\mbox{}\q \t begin\ j := f(i);\\
\mbox{}\q\q \t while\ (Y[j + 1] \ne
Y[i + 1]) \& (j > 0)\
\t do\ j := f[j];\\
\mbox{}\q\q \t if\ Y[j + 1] = Y[i + 1]\
\t then\ f[i + 1] := j + 1\
\t else\ f[i +1] := 0;\\
\mbox{}\q\t end
}](/sites/default/files/tex_cache/7596c395fc93452c16152aae67965f73.png)
Для разъяснения работы алгоритма рассмотрим ситуацию, возникшую при
обработке слова на шаге
. К этому моменту
вычислены значения
при
:
Выполняем
. Видим, что
условие во внутреннем цикле не выполняется из-за первого сомножителя, так
как
, поэтому тело
внутреннего цикла не выполняется, и далее в соответствии с алгоритмом
вычисляем
и
.
Пришли к следующей ситуации :
Вычисляем
. Видим, что
условие
)
во внутреннем цикле выполняется. Следовательно,
вычисляется новое значение
; условие
опять выполнено, вычисляем новое
и на
этот раз условие выполняется, снова вычисляем
.
Наконец внутренний цикл завершается, причиной завершения является
невыполнение условия
и поэтому
. Итак, вычислено
.
Оценим трудоемкость алгоритма.
Обработка очередной буквы может потребовать многих
итераций во внутреннем цикле. Обозначим их число через
.
Заметим, что каждая итерация внутреннего цикла уменьшает
по
крайней мере на
. С другой стороны, переход к следующему
значению
увеличивает
не более чем на
. Таким образом,
имеем неравенства
![\eq*{
f[i + 1] \le f[i] - N_i + 1
}](/sites/default/files/tex_cache/89aff233374aea6a54b5c8270731409a.png)
или
![\eq*{
N_i \le f[i] - f[i + 1] + 1.
}](/sites/default/files/tex_cache/caca25107fdb0074ca515d8eb0b2a569.png)
Суммируя последнее неравенство по от
до
, получим
![\eq*{
\suml_{i=1}^{n-1}N_{i} = f[1]-f[n] + n - 1\le n.\vspace{-1mm}
}](/sites/default/files/tex_cache/a11de2f7ddb6a6836fd71c787035e203.png)

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





![\formula{
\t for\ j := 1\ \t to\ n\ \t do\
\varphi[j - 1, Y_j]:=j;\\
\t for\ a \in A,\ a \ne Y_1\
\t do\ \varphi[0, a]:= 0;\\
\t for\ j :=1\ \t to\ n\ \t do
for\ a \in A,\
a \ne Y_{j+1}\ \t do\ \varphi[j, a] :=
\varphi [f[j], a];
}](/sites/default/files/tex_cache/17f6b649fb76a32cca767d274960a5a6.png)
Для слова получим автомат, заданный диаграммой,
изображенной на рис. 13.4.