Алгоритм Фараха

Материал из Викиконспекты
Перейти к: навигация, поиск
Эта статья находится в разработке!

Алгоритм Фарача — алгоритм построения суффиксного дерева для заданной строки s, который выполняется за время O(N), при этом даже не требуется выполнения условия конечности алфавита. Такая эффективность достигается за счет того, что строковые последовательности определяются на индексированном алфавите или, что эквивалентно, на целочисленном алфавите Σ={1,2...,a}, при этом накладывается дополнительное условие, что aO(N). Такие алфавиты часто встречаются на практике.


описание алгоритма

Основная идея алгоритма, заключается в том что мы уменьшаем размер исходной строки. Для этого мы разбиваем символы сходной строки на пару и пронумеровываем их, а из полученных номеров составляем новую строку, которая уже в 2 раза короче.

Мы опишем алгоритм Фарача в виде пяти выполняемых шагов. Используем в качестве примера строку s=121112212221, определенную на алфавите А=1,2 (в этом примере N = 12).

шаг 1: построение нечетного дерева

шаг 2: построение четного дерева по нечетному

шаг 3: слияние четного и нечетного дерева

шаг 4: построение LCP-дерева

шаг 5: построение суффиксного дерева по LCP и слитому

аспекты реализации

корректность и эффективность