Алгоритм Кнута-Морриса-Пратта (КМП) получает на вход
слово
и просматривает его слева направо буква за буквой, заполняя при
этом массив натуральных чисел
, где
(функция l определена в предыдущем пункте). Словами: l[i]
есть длина наибольшего начала слова
,одновременно являющегося его концом.
10.4.1. Какое отношение все это имеет к поиску подслова? Другими
словами, как использовать алгоритм КМП для определения того,
является ли слово A подсловом слова B?
10.4.2. Описать алгоритм заполнения таблицы
.
Другими словами, нас интересуют начала Z слова
одновременно являющиеся его концами
-- из них нам надо выбрать самое длинное. Откуда берутся эти
начала? Каждое из них (не считая пустого)
получается из некоторого слова Z'
приписыванием буквы x[i+1]. Слово Z' является началом и
концом слова
. Однако не любое слово,
являющееся началом и концом слова
,годится -- над