Алгоритм Апостолико-Крочемора
Версия от 16:37, 4 марта 2016; Voidmaster (обсуждение | вклад)
Эта статья находится в разработке!
Алгоритм Апостолико-Крочемора (англ. Apostolico-Crochemore algorithm) - вариация Алгоритма Бойера-Мура.
Характерные черты
- этап предобработки занимает времени и константное количество памяти,
- этап поиска занимает времени,
- выполняет сравнений в худшем случае.
Описание алгоритма
Нам даны:
— текст, — образец, , .Для начала рассмотрим ситуацию, когда мы сравниваем наш образец с
. Предположим, что первое несовпадение произойдет между и при . Тогда и . Когда сдвиг возможен, разумно ожидать что префикс шаблона совпадет c некоторым суффиксом . Более того, если мы ходим избежать несовпадения при сдвиге, то нужно чтобы символ, следующий за префиксом в шаблоне, не совпадал с . Такой наибольший префикс называется помеченным бордером строки .
Определение: |
помеченный бордер (англ. tagged border) строки | — строка .
Введем обозначение: пусть — длина наибольшего бордера для за которым следует символ и если нет такого помеченного бордера, где ( ). Затем после сдвига сравнение можно продолжить между символами и не потеряв никакого вхождения в и избежав отступа по тексту (смотри рис. 1).