Алгоритм Укконена
Алгоритм Укконена — алгоритм построения суффиксного дерева для заданной строки за линейное время.
Содержание
Первая версия алгоритма
Рассмотрим сначала метод, который строит дерево за время , где — длина исходной строки . В дальнейшем данный алгоритм будет оптимизирован таким образом, что будет достигнута линейная скорость работы.
Описание
Алгоритм делится на фаз. В фазе с номером в дерево добавляются все суффиксы подстроки . При добавлении суффикса алгоритм сначала находит конец пути из корня, помеченного подстрокой , затем добавляет к концу этой подстроки очередной символ , если этот символ не был добавлен ранее.
Псевдокод
Приведенный алгоритм можно записать с помощью псевдокода:
for to do for to do insert()
Поскольку операция insert может занимать линейное время, очевидно, что время работы данного алгоритма составляет .
Возможные исходы операции insert
Ниже приведены три возможных случая, которые могут возникнуть при добавлении подстроки в дерево.
Оптимизация алгоритма Укконена
| Определение: |
| Пусть обозначает произвольную строку, где — ее первый символ, а — оставшаяся подстрока(возможно пустая). Если для внутренней вершины с путевой меткой существует другая вершина с путевой меткой то ссылка из в называется суффиксной ссылкой. |
Источник
Дэн Гасфилд — Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология — СПб.: Невский Диалект; БХВ-Петербург, 2003. — 654 с: ил.


