Построение суффиксного дерева в RAM: различия между версиями

Перейти к навигации Перейти к поиску
Строка 4: Строка 4:


== Постановка задачи ==
== Постановка задачи ==
Суффиксное дерево – возможно, самая известная и изученная структура данных для индексирования строк, имеющая приложения во многих областях, связанных с анализом последовательностей. После его изобретения в начале семидесятых было разработано несколько подходов к эффективному построению суффиксного дерева строки для различных моделей вычислений. Наиболее перспективные подходы, строящие суффиксное дерево в оперативной памяти, представлены в данном обзоре.
[[Суффиксное дерево]] – возможно, самая известная и изученная структура данных для индексирования строк, имеющая приложения во многих областях, связанных с анализом последовательностей. После его изобретения в начале семидесятых было разработано несколько подходов к эффективному построению суффиксного дерева строки для различных моделей вычислений. Наиболее перспективные подходы, строящие суффиксное дерево в оперативной памяти, представлены в данном обзоре.




Нотация
'''Нотация'''
Пусть дан алфавит £. Trie-деревом над алфавитом £ является корневое дерево, ребра которого помечены строками над S, такими, что никакие две метки ребер, выходящих из одной вершины, не начинаются с одного и того же символа. Trie-дерево является сокращенным, если все его внутренние вершины (возможно, за исключением корня) являются вершинами ветвления. Пусть дана конечная строка S 2 U". Суффиксным деревом S, T(S), является сокращенное trie-дерево над S, такое, что конкатенации меток ребер вдоль путей от корня до листьев являются суффиксами S. Пример суффиксного дерева приведен на рис. 1.
 
Пусть дан алфавит <math>\Sigma \;</math>. Trie-деревом над алфавитом <math>\Sigma \;</math> является корневое дерево, ребра которого помечены строками над S, такими, что никакие две метки ребер, выходящих из одной вершины, не начинаются с одного и того же символа. Trie-дерево является сокращенным, если все его внутренние вершины (возможно, за исключением корня) являются вершинами ветвления. Пусть дана конечная строка <math>S \in \Sigma^n \;</math>. Суффиксным деревом S, T(S), является сокращенное trie-дерево над <math>\Sigma \;</math>, такое, что конкатенации меток ребер вдоль путей от корня до листьев являются суффиксами S. Пример суффиксного дерева приведен на рис. 1.
   
   


Строка 19: Строка 20:




Ограничения
'''Ограничения'''
Временная сложность построения суффиксного дерева для строки S длины n зависит от размера базового алфавита S. Он может быть константным, может быть целочисленным S = f1; 2... n g, а может быть произвольным конечным множеством, элементы которого можно сравнивать за константное время. Заметим, что третий случай можно свести ко второму, если отобразить символы алфавита на множество f1...n g, хотя при этом возникают дополнительные затраты на сортировку S.
 
Временная сложность построения суффиксного дерева для строки S длины n зависит от размера базового алфавита <math>\Sigma \;</math>. Он может быть константным, может быть целочисленным <math>\Sigma = \{1, 2, ., n \} \;</math>, а может быть произвольным конечным множеством, элементы которого можно сравнивать за константное время. Заметим, что третий случай можно свести ко второму, если отобразить символы алфавита на множество {1, ..., n}, хотя при этом возникают дополнительные затраты на сортировку <math>\Sigma \;</math>.
 
 
'''Задача 1 (построение суффиксного дерева)'''


Дано: конечная строка S длины n из символов алфавита <math>\Sigma \;</math>.
Требуется: построить суффиксное дерево T(S).


Задача 1 (построение суффиксного дерева)
Дано: конечная строка S длины n из символов алфавита S. Требуется: построить суффиксное дерево T(S).
Если предположить, что ребра, выходящие из каждой вершины, лексикографически упорядочены, что обычно имеет место, суффиксное дерево позволяет получить отсортированный порядок S0 символов за линейное время. Таким образом, построение суффиксного дерева наследует нижние границы сложности задачи сортировки: Q{n log n) в случае алфавита общего вида и Q{n) для целочисленных алфавитов.
Если предположить, что ребра, выходящие из каждой вершины, лексикографически упорядочены, что обычно имеет место, суффиксное дерево позволяет получить отсортированный порядок S0 символов за линейное время. Таким образом, построение суффиксного дерева наследует нижние границы сложности задачи сортировки: Q{n log n) в случае алфавита общего вида и Q{n) для целочисленных алфавитов.


== Основные результаты ==
== Основные результаты ==
4446

правок

Навигация