Алгоритм Ахо-Корасик
Версия от 03:18, 14 марта 2011; 192.168.0.2 (обсуждение) (Первая версия статьи (статья ещё не дописана))
Эта статья находится в разработке!
Задача алгоритма
Найти для каждого образца из заданного множества образцов все его вхождения в текст за время
, где - суммарная длина образцов, - длина текста, - размер ответа (количество пар). В худшем случае , но он случается редко.Шаг 1
Строим бор из образцов. См. Бор.
Построение выполняется за время , где - суммарная длина образцов.
Шаг 2
Превращаем бор в автомат.
Узлы бора становятся состояниями автомата; корень - начальное состояние.
Узлы бора, в которых заканчиваются образцы, становятся терминалами.
Для переходов по автомату заведём в узлах несколько функций:
1) - возвращает родителя вершины ;
2) - суффиксная ссылка; здесь - сын по символу ;
3) - функция перехода;
4) - сжатая суффиксная ссылка.
Суффиксная ссылка , если - максимальный суффикс , . Обозначение: - слово, приводящее в вершину в боре.