Сжатое суффиксное дерево — различия между версиями
AndrewD (обсуждение | вклад) (→Существование сжатого суффиксного дерева) |
|||
Строка 4: | Строка 4: | ||
}} | }} | ||
==Существование сжатого суффиксного дерева== | ==Существование сжатого суффиксного дерева== | ||
− | [[Файл: | + | [[Файл:Suffix_tree_3.png|thumb|right|Суффиксное дерево для строки <tex>xabxa</tex> с защитным символом]] |
Определение суффиксного дерева не гарантирует, что такое дерево существует для любой строки <tex>s</tex>. Если один суффикс совпадает с префиксом другого суффикса, то построить суффиксное дерево, удовлетворяющее данному выше определению, невозможно, поскольку путь для первого суффикса не сможет закончиться в листе. Например, для строки <tex>xabxa</tex> суффикс <tex>xa</tex> является префиксом суффикса <tex>xabxa</tex>. Во избежание этого в конце строки <tex>s</tex> добавляется символ, не входящий в исходный алфавит. Такой символ называется '''''защитным'''''. Как правило, защитный символ обозначается <tex>\$</tex>. | Определение суффиксного дерева не гарантирует, что такое дерево существует для любой строки <tex>s</tex>. Если один суффикс совпадает с префиксом другого суффикса, то построить суффиксное дерево, удовлетворяющее данному выше определению, невозможно, поскольку путь для первого суффикса не сможет закончиться в листе. Например, для строки <tex>xabxa</tex> суффикс <tex>xa</tex> является префиксом суффикса <tex>xabxa</tex>. Во избежание этого в конце строки <tex>s</tex> добавляется символ, не входящий в исходный алфавит. Такой символ называется '''''защитным'''''. Как правило, защитный символ обозначается <tex>\$</tex>. | ||
Версия 02:51, 17 мая 2011
Определение: |
Пусть дана строка | , . Суффиксное дерево (сжатое суффиксное дерево) для строки - ориентированное дерево с корнем, имеющее ровно листьев, занумерованных от до . Каждая внутренняя вершина, отличная от корня, имеет не меньше двух детей, а каждая дуга помечена непустой подстрокой строки . Никакие две дуги, выходящие из одной и той же вершины, не могут иметь пометок, начинающихся с одного и того же символа. Суффиксное дерево содержит все суффиксы строки : для каждого листа конкатенация меток дуг на пути от корня к листу в точности составляет суффикс, который начинается в позиции , то есть .
Содержание
Существование сжатого суффиксного дерева
Определение суффиксного дерева не гарантирует, что такое дерево существует для любой строки
. Если один суффикс совпадает с префиксом другого суффикса, то построить суффиксное дерево, удовлетворяющее данному выше определению, невозможно, поскольку путь для первого суффикса не сможет закончиться в листе. Например, для строки суффикс является префиксом суффикса . Во избежание этого в конце строки добавляется символ, не входящий в исходный алфавит. Такой символ называется защитным. Как правило, защитный символ обозначается .Связь с суффиксным бором
Пусть суффиксный бор строки . Тогда сжатое суффиксное дерево может быть получено из слиянием каждого пути из неветвящихся вершин в одну дугу.
-Хранение в памяти
В суффиксном дереве количество разветвлений не более количества листьев, поэтому для его хранения требуется
памяти.Использование
Суффиксное дерево позволяет за линейное время найти:
- Количество различных подстрок данной строки
- Наибольшую общую подстроку двух строк
- Суффиксный массив и массив (longest common prefix)
Источники
Дэн Гасфилд - Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология - СПб.: Невский Диалект; БХВ-Петербург, 2003. — 654 с: ил.