Почему мы не сдвигаемся в этом направлении?
При изучении алгоритма Кнута – Морриса – Пратта для строки:
ABC ABCDAB ABCDAB
для шаблона:
ABCDABD
Я застрял на одном шаге. Я выделю шаг, на котором я сейчас застрял.
ABC ABCDAB ABCDAB
ABCDABD
ABC ABCDAB ABCDAB
ABCDABD
ABC ABCDAB ABCDAB
ABCDABD
ABC ABCDAB ABCDAB
ABCDABD--------------------(WHY THIS ?)
Я не понимаю вышеупомянутый шаг. Я ожидаю, что вышеуказанный шаг будет:
ABC ABCDAB ABCDAB
ABCDABD
Пожалуйста, объясните логику / причину правильного шага.
1 ответ
Когда '' сравнивают с 'D', это находит несоответствие. И этот алгоритм "помнит", что предыдущий "AB" сравнивается, поэтому необходимо проверить, является ли несовпадающий символ "C".
Идея метода KMP объясняется в книге "Введение в алгоритмы". Это очень похоже на метод бесконечного автомата, который может помочь вам понять его.