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