В алгоритме Кнута-Морриса-Пратта, когда слово «подстрока» представляет собой последовательность одной и той же буквы, например. «AAAAAAAA ...», таблица отказов это что-то вроде этого: «-1, 0, 1, 2, 3, 4, 5, ...».Квадратичный алгоритм Кнута-Морриса-Пратта
Это означает, что если тест что-то вроде «AAAAAAAB» Когда мы достигнем «B» мы вернемся X символов и начать пытаться соответствовать снова, хотя мы знаем, что мы должны начать после того, как Б.
Am I что-то не хватает?
Edit (делая пример конкретных):
Скажем тест: AAAAAAAABAAAAAAAAA, то есть (8 As, В, 9 В) и слово ищет является AAAAAAAAA, то есть (9 As).
Нерабочее таблица будет: -1, 0, 1, 2, 3, 4, 5, 6, 7.
В какой-то момент она будет т = 0, г = 8. Это произойдет сбой , поэтому m станет m = m + i - T [8] = 0 + 8 - 7 => m = 1, а i будет T [8] = 7.
Это не сработает снова, так что теперь мы будем имеют m = 2, i = 6, а затем m = 3, i = 7 и т. д.
Спасибо за ваш ответ. Да, вы правы, это все равно линейно, но .. –