Jump to content

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

Суффиксное дерево для текста 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]

  1. У дерева ровно n листьев, пронумерованных от к .
  2. За исключением корня, каждый внутренний узел имеет как минимум двух дочерних узлов.
  3. Каждое ребро помечено непустой подстрокой .
  4. Никакие два ребра, исходящие из узла, не могут иметь метки строк, начинающиеся с одного и того же символа.
  5. Строка, полученная путем объединения всех строк-меток, найденных на пути от корня к листу. пишется суффикс , для от к .

Если суффикс также является префиксом другого суффикса, такого дерева для строки не существует. Например, в строке 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]

См. также [ править ]

Примечания [ править ]

  1. ^ Дональд Э. Кнут; Джеймс Х. Моррис; Воган Р. Пратт (июнь 1977 г.). «Быстрое сопоставление с образцом в строках» (PDF) . SIAM Journal по вычислительной технике . 6 (2): 323–350. дои : 10.1137/0206024 . Здесь: стр.339 внизу.
  2. В 1970 году Кнут предположил, что проблему невозможно решить за линейное время. [1] В 1973 году это было опровергнуто алгоритмом суффиксного дерева Вайнера Weiner (1973) .
  3. ^ Этот термин используется здесь, чтобы отличить структуры данных-предшественников Вейнера от правильных суффиксных деревьев, определенных выше и не рассмотренных до МакКрейта (1976) .
  4. ^ т. е. каждая ветвь помечена одним символом
  5. ^ См . Файл: WeinerB aaaabbbbaaaabbbb.gif и Файл: WeinerC aaaabbbbaaaabbbb.gif для получения информации о несжатом дереве примера и его сжатом корреспонденте.
  6. Перейти обратно: Перейти обратно: а б Гигерих и Курц (1997) .
  7. ^ Гасфилд (1999) , стр.90.
  8. ^ Гасфилд (1999) , стр.90-91.
  9. ^ Фарах (1997) .
  10. ^ Гасфилд (1999) , стр.92.
  11. ^ Гасфилд (1999) , стр.123.
  12. ^ Баеза-Йейтс и Гоннет (1996) .
  13. ^ Гасфилд (1999) , стр.132.
  14. ^ Гасфилд (1999) , стр.125.
  15. ^ Гасфилд (1999) , стр.144.
  16. ^ Гасфилд (1999) , стр.166.
  17. ^ Гасфилд (1999) , Глава 8.
  18. ^ Гасфилд (1999) , стр.196.
  19. ^ Гасфилд (1999) , стр.200.
  20. ^ Гасфилд (1999) , стр.198.
  21. ^ Гасфилд (1999) , стр.201.
  22. ^ Гасфилд (1999) , стр.204.
  23. ^ Гасфилд (1999) , стр.205.
  24. ^ Гасфилд (1999) , стр.197–199.
  25. Перейти обратно: Перейти обратно: а б Эллисон, Л. «Суффиксные деревья» . Архивировано из оригинала 13 октября 2008 г. Проверено 14 октября 2008 г.
  26. ^ Впервые представлено Замиром и Эциони (1998) .
  27. ^ Апостолико и др. (1988) .
  28. ^ Харихаран (1994) .
  29. ^ Сахиналп и Вишкин (1994) .
  30. ^ Фарах и Мутукришнан (1996) .
  31. ^ Илиопулос и Риттер (2004) .
  32. ^ Шун и Блеллох (2014) .
  33. ^ Смит (2003) .
  34. Перейти обратно: Перейти обратно: а б Тата, Ханкинс и Патель (2003) .
  35. Перейти обратно: Перейти обратно: а б Пхупакди и Заки (2007) .
  36. Перейти обратно: Перейти обратно: а б с Барский и др. (2008) .
  37. Перейти обратно: Перейти обратно: а б Барский и др. (2009) .
  38. ^ Мансур и др. (2011) .

Ссылки [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f44ffff5cb2a2751fc93085a79e39cd2__1719660420
URL1:https://arc.ask3.ru/arc/aa/f4/d2/f44ffff5cb2a2751fc93085a79e39cd2.html
Заголовок, (Title) документа по адресу, URL1:
Suffix tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)