Суффиксное дерево

BANANA
. Каждая подстрока завершается специальным символом $
. Шесть путей от корня к листьям (показаны в виде прямоугольников) соответствуют шести суффиксам. A$
, NA$
, ANA$
, NANA$
, ANANA$
и BANANA$
. Цифры в листьях обозначают начальную позицию соответствующего суффикса. Суффиксные ссылки, отмеченные пунктиром, используются при построении. В информатике суффиксное дерево (также называемое деревом PAT или, в более ранней форме, деревом позиций ) представляет собой сжатое дерево, содержащее все суффиксы данного текста в качестве их ключей и позиции в тексте в качестве их значений. Суффиксные деревья позволяют особенно быстро реализовать многие важные строковые операции.
Построение такого дерева для струны занимает время и пространство, линейные по длине . После создания можно быстро выполнить несколько операций, например найти подстроку в , поиск подстроки, если допускается определенное количество ошибок, и поиск совпадений для шаблона регулярного выражения . Суффиксные деревья также предоставили одно из первых решений за линейное время для проблемы самой длинной общей подстроки . [2] За такое ускорение приходится платить: для хранения суффиксного дерева строки обычно требуется значительно больше места, чем для хранения самой строки.
История [ править ]
Эта концепция была впервые введена Вайнером (1973) .Вместо суффикса , Вайнер хранит в своем дереве [3] идентификатор префикса для каждой позиции, то есть самая короткая строка, начинающаяся с и происходит только один раз в . Его алгоритм D принимает несжатый [4] пытаться и расширяет его до попытки . Таким образом, начиная с тривиальной попытки для , попытка может быть построен последовательные вызовы алгоритма D; однако общее время работы . Вайнера Алгоритм B поддерживает несколько вспомогательных структур данных, чтобы добиться линейного времени выполнения в зависимости от размера построенного дерева. Последнее еще может быть узлы, например для Вайнера Алгоритм C , наконец, использует сжатые попытки для достижения линейного общего размера хранилища и времени выполнения. [5] Дональд Кнут впоследствии охарактеризовал последний как «Алгоритм 1973 года», по словам его ученика Воана Пратта . [ оригинальное исследование? ] [6] Учебник Aho, Hopcroft & Ullman (1974 , Sect.9.5) воспроизвел результаты Вайнера в упрощенной и более элегантной форме, введя термин « дерево позиций» .
МакКрайт (1976) был первым, кто построил (сжатое) дерево всех суффиксов. . Хотя суффикс, начинающийся с обычно длиннее префиксного идентификатора, их представления путей в сжатом дереве не различаются по размеру. С другой стороны, МакКрайт мог обойтись без большинства вспомогательных структур данных Вайнера; остались только суффиксные ссылки.
Укконен (1995) еще больше упростил конструкцию. [6] Он предоставил первое онлайн-построение суффиксных деревьев, теперь известное как алгоритм Укконена , время выполнения которого соответствовало самым быстрым на тот момент алгоритмам.Все эти алгоритмы имеют линейное время для алфавита постоянного размера и имеют время работы в наихудшем случае в общем.
Фарах (1997) предложил первый алгоритм построения суффиксного дерева, оптимальный для всех алфавитов. В частности, это первый алгоритм с линейным временем для строк, взятых из алфавита целых чисел в полиномиальном диапазоне. Алгоритм Фараха стал основой для новых алгоритмов построения как суффиксных деревьев, так и суффиксных массивов , например, во внешней памяти, сжатых, кратких и т. д.
Определение [ править ]
Суффиксное дерево для строки длины определяется как дерево такое, что: [7]
- У дерева ровно n листьев, пронумерованных от к .
- За исключением корня, каждый внутренний узел имеет как минимум двух дочерних узлов.
- Каждое ребро помечено непустой подстрокой .
- Никакие два ребра, исходящие из узла, не могут иметь метки строк, начинающиеся с одного и того же символа.
- Строка, полученная путем объединения всех строк-меток, найденных на пути от корня к листу. пишется суффикс , для от к .
Если суффикс также является префиксом другого суффикса, такого дерева для строки не существует. Например, в строке abcbc суффикс bc также является префиксом суффикса bcbc . В таком случае путь, обозначающий bc, не будет заканчиваться листом, что нарушает пятое правило. Чтобы решить эту проблему, дополняется терминальным символом, которого нет в строке (обычно обозначается $
). Это гарантирует, что ни один суффикс не является префиксом другого и что будет листовые узлы, по одному на каждый из суффиксы . [8] Поскольку все внутренние некорневые узлы являются ветвящимися, их может быть не более такие узлы и всего узлов ( листья, внутренние некорневые узлы, 1 корень).
Суффиксные ссылки являются ключевой особенностью старых алгоритмов построения с линейным временем, хотя большинство новых алгоритмов, основанных на алгоритме Фараха , обходятся без суффиксных ссылок. В полном суффиксном дереве все внутренние некорневые узлы имеют суффиксную ссылку на другой внутренний узел. Если путь от корня до узла представляет собой строку , где это один символ и представляет собой строку (возможно, пустую), она имеет суффиксную ссылку на внутренний узел, представляющий . См., например, суффиксную ссылку из узла для ANA
к узлу для NA
на рисунке выше. Суффиксные ссылки также используются в некоторых алгоритмах, работающих на дереве.
Обобщенное суффиксное дерево — это суффиксное дерево, созданное для набора строк, а не для одной строки. Он представляет все суффиксы из этого набора строк. Каждая строка должна заканчиваться другим символом завершения.
Функциональность [ править ]
Суффиксное дерево для строки длины может быть встроен время, если буквы происходят из алфавита целых чисел в полиномиальном диапазоне (в частности, это верно для алфавитов постоянного размера). [9] Для более крупных алфавитов время работы в основном зависит от сортировки букв, чтобы привести их в диапазон размеров. ; в общем, это занимает время.Приведенные ниже затраты указаны в предположении, что алфавит постоянен.
Предположим, что для строки построено суффиксное дерево. длины или что обобщенное суффиксное дерево для набора строк построено общей длины .Ты можешь:
- Поиск строк:
- Проверьте, есть ли строка длины является подстрокой в время. [10]
- Найдите первое вхождение шаблонов общей длины как подстроки в время.
- Найти все появление шаблонов общей длины как подстроки в время. [11]
- Найдите регулярное выражение P за ожидаемое сублинейное время . . [12]
- Найти для каждого суффикса шаблона , длина самого длинного совпадения между префиксом и подстрока в в время. [13] Это называется статистикой соответствия для .
- Найдите свойства строк:
- Найдите самые длинные общие подстроки строки и в время. [14]
- Найдите все максимальные пары , максимальные повторы или супермаксимальные повторы в время. [15]
- Найдите разложение Лемпеля–Зива в время. [16]
- Найдите самые длинные повторяющиеся подстроки в время.
- Найдите наиболее часто встречающиеся подстроки минимальной длины в время.
- Найдите самые короткие строки из которые не происходят в , в время, если есть такие струны.
- Найдите кратчайшие подстроки, встречающиеся только один раз в время.
- Найдите для каждого , самые короткие подстроки не встречается нигде в в время.
Суффиксное дерево может быть подготовлено для поиска наименьшего общего предка за постоянное время между узлами в время. [17] Тогда можно также:
- Найдите самый длинный общий префикс между суффиксами. и в . [18]
- Найдите шаблон P длины m с не более чем k несовпадениями в время, где z — количество попаданий. [19]
- Найти все максимальные палиндромы в , [20] или время, если промежутки длины разрешены, или если несоответствия допускаются. [21]
- Найти все тандемные повторы в , и k -мисматч тандемных повторов в . [22]
- Найдите самые длинные общие подстроки, по крайней мере, струны в для в время. [23]
- Найдите самую длинную палиндромную подстроку данной строки (используя обобщенное суффиксное дерево строки и ее обратную сторону) за линейное время. [24]
Приложения [ править ]
Суффиксные деревья можно использовать для решения большого количества строковых проблем, возникающих при редактировании текста, поиске по произвольному тексту, вычислительной биологии и других областях применения. [25] Основные приложения включают в себя: [25]
- Поиск строки , сложностью O ( m ), где m — длина подстроки (но с начальным временем O ( n ), необходимым для построения суффиксного дерева для строки)
- Нахождение самой длинной повторяющейся подстроки
- Нахождение самой длинной общей подстроки
- Нахождение самого длинного палиндрома в строке
Суффиксные деревья часто используются в приложениях биоинформатики для поиска закономерностей в последовательностях ДНК или белков (которые можно рассматривать как длинные строки символов). Способность эффективно искать несоответствия можно считать их самой сильной стороной. Суффиксные деревья также используются при сжатии данных ; их можно использовать для поиска повторяющихся данных, а также на этапе сортировки преобразования Берроуза-Уиллера . Варианты схем сжатия LZW используют суффиксные деревья ( LZSS ). Суффиксное дерево также используется в кластеризации суффиксного дерева — алгоритме кластеризации данных , используемом в некоторых поисковых системах. [26]
Реализация [ править ]
Если каждый узел и ребро могут быть представлены в пространстве все дерево можно представить в космос. Общая длина всех строк на всех ребрах дерева равна , но каждое ребро можно сохранить как позицию и длину подстроки S , что дает общее использование пространства компьютерные слова. Наихудшее использование пространства суффиксного дерева наблюдается со словом Фибоначчи , дающим полную картину. узлы.
Важным выбором при реализации суффиксного дерева являются отношения «родитель-потомок» между узлами. Наиболее распространенным является использование связанных списков, называемых родственными списками . Каждый узел имеет указатель на своего первого дочернего узла и на следующий узел в дочернем списке, частью которого он является. Другие реализации с эффективными свойствами времени выполнения используют хеш-карты , отсортированные или несортированные массивы (с удвоением массива ) или сбалансированные деревья поиска . Нас интересует:
- Стоимость поиска ребенка по данному персонажу.
- Стоимость присоединения ребенка.
- Стоимость подключения всех дочерних узлов узла (деленная на количество дочерних узлов в таблице ниже).
Пусть σ — размер алфавита. Тогда у вас есть следующие расходы:
Искать | Вставка | Обход | |
---|---|---|---|
Родственные списки/несортированные массивы | О ( п ) | Я(1) | Я(1) |
Побитовые родственные деревья | О ( logσ ) | Я(1) | Я(1) |
Хэш-карты | Я(1) | Я(1) | О ( п ) |
Сбалансированное дерево поиска | О ( logσ ) | О ( logσ ) | О (1) |
Сортированные массивы | О ( logσ ) | О ( п ) | О (1) |
Хэш-карты + списки братьев и сестер | О (1) | О (1) | О (1) |
Стоимость внедрения амортизируется, а затраты на хеширование указаны для идеального хеширования.
Большой объем информации в каждом ребре и узле делает суффиксное дерево очень дорогим, в хороших реализациях оно потребляет в 10–20 раз больше памяти, чем исходный текст. Массив суффиксов снижает это требование до коэффициента 8 (для массива, включающего значения LCP , построенные в 32-битном адресном пространстве и 8-битных символах). Этот коэффициент зависит от свойств и может достигать 2 при использовании символов шириной 4 байта ( необходимо содержать любой символ в некоторых UNIX-подобных системах, см. wchar_t ) в 32-битных системах. Исследователи продолжают находить более мелкие индексирующие структуры.
Параллельное строительство [ править ]
Были предложены различные параллельные алгоритмы для ускорения построения суффиксного дерева. [27] [28] [29] [30] [31] Недавно был разработан практический параллельный алгоритм построения суффиксного дерева с работа (последовательное время) и диапазон был разработан . Алгоритм обеспечивает хорошую параллельную масштабируемость на многоядерных машинах с общей памятью и может индексировать геном человека (около 3 ГБ ) менее чем за 3 минуты на 40-ядерной машине. [32]
Внешняя конструкция [ править ]
Несмотря на линейность, использование памяти суффиксным деревом значительно выше.чем фактический размер коллекции последовательностей. Для большого текстапостроение может потребовать использования внешней памяти.
Имеются теоретические результаты построения суффиксных деревьев во внешнихпамять.Алгоритм Фараха-Колтона, Феррагины и Мутукришнана (2000). теоретически оптимален, его сложность ввода-вывода равна сложности сортировки.Однако общая сложность этого алгоритма до сих пор не позволялапрактическая реализация. [33]
С другой стороны, были проведены практические работы по построениюдисковые суффиксные деревьякоторые масштабируются до (несколько) ГБ/часов.Современные методы: TDD, [34] ТРЕЛЛИС, [35] ДиГеСТ, [36] иБ 2 СТ. [37]
TDD и TRELLIS масштабируются до всего генома человека, в результате чего образуется дисковое суффиксное дерево размером в десятки гигабайт. [34] [35] Однако эти методы не могут эффективно обрабатывать коллекции последовательностей, превышающие 3 ГБ. [36] DiGeST работает значительно лучше и способен обрабатывать коллекции последовательностей размером порядка 6 ГБ примерно за 6 часов. [36]
Все эти методы позволяют эффективно строить суффиксные деревья для случая, когдадерево не помещается в основную память,но вход делает.Самый последний метод, B 2 СТ, [37] весы для обработкивходы, которые не помещаются в основную память. ERA — это новый метод построения параллельного суффиксного дерева, который значительно быстрее. ERA может проиндексировать весь геном человека за 19 минут на 8-ядерном настольном компьютере с 16 ГБ оперативной памяти. В простом кластере Linux с 16 узлами (4 ГБ ОЗУ на узел) ERA может проиндексировать весь геном человека менее чем за 9 минут. [38]
См. также [ править ]
Примечания [ править ]
- ^ Дональд Э. Кнут; Джеймс Х. Моррис; Воган Р. Пратт (июнь 1977 г.). «Быстрое сопоставление с образцом в строках» (PDF) . SIAM Journal по вычислительной технике . 6 (2): 323–350. дои : 10.1137/0206024 . Здесь: стр.339 внизу.
- ↑ В 1970 году Кнут предположил, что проблему невозможно решить за линейное время. [1] В 1973 году это было опровергнуто алгоритмом суффиксного дерева Вайнера Weiner (1973) .
- ^ Этот термин используется здесь, чтобы отличить структуры данных-предшественников Вейнера от правильных суффиксных деревьев, определенных выше и не рассмотренных до МакКрейта (1976) .
- ^ т. е. каждая ветвь помечена одним символом
- ^ См . Файл: WeinerB aaaabbbbaaaabbbb.gif и Файл: WeinerC aaaabbbbaaaabbbb.gif для получения информации о несжатом дереве примера и его сжатом корреспонденте.
- ↑ Перейти обратно: Перейти обратно: а б Гигерих и Курц (1997) .
- ^ Гасфилд (1999) , стр.90.
- ^ Гасфилд (1999) , стр.90-91.
- ^ Фарах (1997) .
- ^ Гасфилд (1999) , стр.92.
- ^ Гасфилд (1999) , стр.123.
- ^ Баеза-Йейтс и Гоннет (1996) .
- ^ Гасфилд (1999) , стр.132.
- ^ Гасфилд (1999) , стр.125.
- ^ Гасфилд (1999) , стр.144.
- ^ Гасфилд (1999) , стр.166.
- ^ Гасфилд (1999) , Глава 8.
- ^ Гасфилд (1999) , стр.196.
- ^ Гасфилд (1999) , стр.200.
- ^ Гасфилд (1999) , стр.198.
- ^ Гасфилд (1999) , стр.201.
- ^ Гасфилд (1999) , стр.204.
- ^ Гасфилд (1999) , стр.205.
- ^ Гасфилд (1999) , стр.197–199.
- ↑ Перейти обратно: Перейти обратно: а б Эллисон, Л. «Суффиксные деревья» . Архивировано из оригинала 13 октября 2008 г. Проверено 14 октября 2008 г.
- ^ Впервые представлено Замиром и Эциони (1998) .
- ^ Апостолико и др. (1988) .
- ^ Харихаран (1994) .
- ^ Сахиналп и Вишкин (1994) .
- ^ Фарах и Мутукришнан (1996) .
- ^ Илиопулос и Риттер (2004) .
- ^ Шун и Блеллох (2014) .
- ^ Смит (2003) .
- ↑ Перейти обратно: Перейти обратно: а б Тата, Ханкинс и Патель (2003) .
- ↑ Перейти обратно: Перейти обратно: а б Пхупакди и Заки (2007) .
- ↑ Перейти обратно: Перейти обратно: а б с Барский и др. (2008) .
- ↑ Перейти обратно: Перейти обратно: а б Барский и др. (2009) .
- ^ Мансур и др. (2011) .
Ссылки [ править ]
- Ахо, Альфред В .; Хопкрофт, Джон Э .; Уллман, Джеффри Д. (1974), Проектирование и анализ компьютерных алгоритмов , Ридинг / Массачусетс: Аддисон-Уэсли, ISBN 0-201-00029-6 .
- Апостолико, А.; Илиопулос, К.; Ландау, генеральный директор; Шибер, Б.; Вишкин, Ю. (1988), «Параллельное построение суффиксного дерева с приложениями» , Algorithmica , 3 (1–4): 347–365, doi : 10.1007/bf01762122 , S2CID 5024136 .
- Баеза-Йейтс, Рикардо А .; Гонне, Гастон Х. (1996), «Быстрый поиск текста по регулярным выражениям или автоматический поиск при попытках», Journal of the ACM , 43 (6): 915–936, doi : 10.1145/235809.235810 , S2CID 1420298 .
- Барский, Марина; Стеге, Ульрике; Томо, Алекс; Аптон, Крис (2008), «Новый метод индексации геномов с использованием суффиксных деревьев на диске», CIKM '08: Материалы 17-й конференции ACM по управлению информацией и знаниями (PDF) , Нью-Йорк, штат Нью-Йорк, США: ACM, стр. 649–658 .
- Барский, Марина; Стеге, Ульрике; Томо, Алекс; Аптон, Крис (2009), «Суффиксные деревья для очень больших геномных последовательностей», CIKM '09: Материалы 18-й конференции ACM по управлению информацией и знаниями (PDF) , Нью-Йорк, Нью-Йорк, США: ACM .
- Фарах, Мартин (1997), «Оптимальное построение суффиксного дерева с большими алфавитами» (PDF) , 38-й симпозиум IEEE по основам информатики (FOCS '97) , стр. 137–143 .
- Фарах, Мартин ; Мутукришнан, С. (1996), «Построение рандомизированного суффиксного дерева по оптимальному логарифмическому времени», Международный коллоквиум по языкам автоматов и программированию (PDF) .
- Фарах-Колтон, Мартин ; Феррагина, Паоло; Мутукришнан, С. (2000), «О сложности сортировки построения суффиксного дерева», Журнал ACM , 47 (6): 987–1011, doi : 10.1145/355541.355547 , S2CID 8164822 .
- Гигерих, Р.; Курц, С. (1997), «От Укконена до МакКрайта и Вайнера: унифицированный взгляд на построение суффиксного дерева в линейном времени» (PDF) , Algorithmica , 19 (3): 331–353, doi : 10.1007/PL00009177 , S2CID 18039097 , заархивировано из оригинала (PDF) 3 марта 2016 г. , получено 13 июля 2012 г.
- Гасфилд, Дэн (1997), Алгоритмы на строках, деревьях и последовательностях: информатика и вычислительная биология , Cambridge University Press, ISBN 0-521-58519-8 .
- Харихаран, Рамеш (1994), «Построение оптимального параллельного суффиксного дерева», Симпозиум ACM по теории вычислений (PDF) .
- Илиопулос, Костас; Риттер, Войцех (2004), «О параллельных преобразованиях суффиксных массивов в суффиксные деревья», 15-й австралийский семинар по комбинаторным алгоритмам , CiteSeerX 10.1.1.62.6715 .
- Мансур, Эссам; Аллам, Амин; Скиадопулос, Спирос; Калнис, Панос (2011), «ERA: Эффективное построение последовательного и параллельного суффиксного дерева для очень длинных строк» (PDF) , Proceedings of VLDB Endowment , 5 (1): 49–60, arXiv : 1109.6884 , Bibcode : 2011arXiv1109.6884M , doi : 10.14778/2047485.2047490 , S2CID 7582116 .
- МакКрайт, Эдвард М. (1976), «Алгоритм построения пространственно-экономического суффиксного дерева», Журнал ACM , 23 (2): 262–272, CiteSeerX 10.1.1.130.8022 , doi : 10.1145/321941.321946 , S2CID 9250303 .
- Пхупакди, Бенджарат; Заки, Мохаммед Дж. (2007), «Индексация суффиксного дерева на основе диска в масштабе генома», SIGMOD '07: Материалы Международной конференции ACM SIGMOD по управлению данными , Нью-Йорк, Нью-Йорк, США: ACM, стр. 833– 844, CiteSeerX 10.1.1.81.6031 .
- Сахинальп, Дженк; Вишкин, Узи (1994), «Нарушение симметрии для построения суффиксного дерева», Симпозиум ACM по теории вычислений , doi : 10.1145/195058.195164 , S2CID 5985171
- Смит, Уильям (2003), Вычисление шаблонов в строках , Аддисон-Уэсли .
- Шун, Джулиан; Блеллок, Гай Э. (2014), «Простой алгоритм параллельного декартова дерева и его применение к построению параллельного суффиксного дерева», Транзакции ACM на параллельных вычислениях , 1 : 1–20, doi : 10.1145/2661653 , S2CID 1912378 .
- Тата, Сандип; Хэнкинс, Ричард А.; Патель, Джигнеш М. (2003), «Практическое построение суффиксного дерева», VLDB '03: Материалы 30-й Международной конференции по очень большим базам данных (PDF) , Морган Кауфманн, стр. 36–47 .
- Укконен, Э. (1995), «Онлайн-построение суффиксных деревьев» (PDF) , Algorithmica , 14 (3): 249–260, doi : 10.1007/BF01206331 , S2CID 6027556 .
- Вайнер, П. (1973), «Алгоритмы сопоставления с линейным образцом» (PDF) , 14-й ежегодный симпозиум IEEE по теории коммутации и автоматов , стр. 1–11, doi : 10.1109/SWAT.1973.13 , заархивировано из оригинала (PDF) на 3 марта 2016 г. , получено 16 апреля 2015 г.
- Замир, Орен; Эциони, Орен (1998), «Кластеризация веб-документов: демонстрация осуществимости», SIGIR '98: Материалы 21-й ежегодной международной конференции ACM SIGIR по исследованиям и разработкам в области поиска информации , Нью-Йорк, Нью-Йорк, США: ACM, стр. 46. –54, CiteSeerX 10.1.1.36.4719 .
Внешние ссылки [ править ]
- Суффиксные деревья от Сартаджа Сахни
- Словарь алгоритмов и структур данных NIST: суффиксное дерево
- Универсальное сжатие данных на основе преобразования Берроуза-Уиллера: теория и практика , применение суффиксных деревьев в BWT
- Теория и практика кратких структур данных , реализация сжатого суффиксного дерева на C++
- Реализация суффиксного дерева Укконена на языке C Часть 1 Часть 2 Часть 3 Часть 4 Часть 5 Часть 6
- Онлайн-демо: визуализация суффиксного дерева Укконена