Jump to content

LCP-массив

LCP-массив
Тип Множество
Изобретён Манбер и Майерс (1993)
Временная сложность и пространственная сложность в большой записи O
Средний Худший случай
Космос
Строительство

В информатике самый длинный общий массив префиксов ( LCP массив ) представляет собой вспомогательную структуру данных по отношению к массиву суффиксов . Он хранит длины самых длинных общих префиксов (LCP) между всеми парами последовательных суффиксов в отсортированном массиве суффиксов.

Например, если A := [ Эбб , аб , отец , б , малыш ] — массив суффиксов, самый длинный общий префикс между A [1] = Эбб и А [2] = аб является а который имеет длину 1, поэтому H [2] = 1 в массиве LCP H . Аналогично, ЛКП A [2] = аб и А [3] = отец является аб , поэтому H [3] = 2.

Дополнение массива суффиксов массивом LCP позволяет эффективно моделировать обходы суффиксного дерева сверху вниз и снизу вверх . [ 1 ] [ 2 ] ускоряет сопоставление с образцом в массиве суффиксов [ 3 ] и является обязательным условием для сжатых суффиксных деревьев. [ 4 ]

Массив LCP был представлен в 1993 году Уди Манбером и Джином Майерсом вместе с массивом суффиксов, чтобы улучшить время работы их алгоритма поиска строк. [ 3 ]

Определение

[ редактировать ]

Позволять быть суффиксным массивом строки длины , где — это сторожевая буква, которая уникальна и лексикографически меньше любого другого символа. Позволять обозначаем подстроку начиная от к . Таким образом, это самый маленький суффикс .

Позволять обозначают длину самого длинного общего префикса между двумя строками и . Тогда массив LCP представляет собой целочисленный массив размера такой, что является неопределенным и для каждого . Таким образом хранит длину самого длинного общего префикса лексикографически наименьший суффикс и его предшественник в массиве суффиксов.

Разница между массивом LCP и массивом суффиксов:

  • Массив суффиксов: представляет лексикографический ранг каждого суффикса массива.
  • Массив LCP: содержит совпадение префиксов максимальной длины между двумя последовательными суффиксами после их лексикографической сортировки.

Рассмотрим строку :

я 1 2 3 4 5 6 7
С [я] б а н а н а $

и соответствующий ему отсортированный массив суффиксов  :

я 1 2 3 4 5 6 7
А[я] 7 6 4 2 1 5 3

Массив суффиксов с суффиксами, написанными внизу вертикально:

я 1 2 3 4 5 6 7
А[я] 7 6 4 2 1 5 3
С[А[i], n][1] $ а а а б н н
С[А[i], n][2] $ н н а а а
С[А[i], n][3] а а н $ н
С[А[i], n][4] $ н а а
С[А[i], n][5] а н $
С[А[и], п][6] $ а
С[А[и], п][7] $

Тогда массив LCP строится путем сравнения лексикографически последовательных суффиксов для определения их самого длинного общего префикса:

я 1 2 3 4 5 6 7
Привет] неопределенный 0 1 3 0 0 2

Так, например, длина самого длинного общего префикса разделяется суффиксами и . Обратите внимание, что не определено, поскольку не существует лексикографически меньшего суффикса.

Эффективные алгоритмы строительства

[ редактировать ]

Алгоритмы построения массива LCP можно разделить на две разные категории: алгоритмы, которые вычисляют массив LCP как побочный продукт массива суффиксов, и алгоритмы, которые используют уже созданный массив суффиксов для вычисления значений LCP.

Манбер и Майерс (1993) предлагают алгоритм для вычисления массива LCP вместе с массивом суффиксов в время. Кярккяйнен и Сандерс (2003) показывают, что их также можно изменить. временной алгоритм, позволяющий также вычислять массив LCP. Касаи и др. (2001) представляют первый алгоритм времени (FLAAP), который вычисляет массив LCP по тексту и массиву суффиксов.

Если предположить, что каждый текстовый символ занимает один байт, а каждая запись суффикса или массива LCP — 4 байта, то основным недостатком их алгоритма является большой объем занимаемого пространства. байт, в то время как исходный вывод (текст, массив суффиксов, массив LCP) занимает только байты. Поэтому Манзини (2004) создал усовершенствованную версию алгоритма Касаи и др. (2001) (lcp9) и сократили занимаемую площадь до байты. Кярккяйнен, Манзини и Пуглиси (2009) предлагают еще одно усовершенствование алгоритма Касаи ( -алгоритм), который улучшает время работы. Вместо фактического массива LCP этот алгоритм создает перестановочный массив LCP (PLCP), в котором значения отображаются в текстовом, а не в лексикографическом порядке.

Gog & Ohlebusch (2011) предлагают два алгоритма, которые теоретически медленны ( ) на практике оказались быстрее, чем вышеупомянутые алгоритмы.

По состоянию на 2012 год Самый быстрый на данный момент алгоритм построения массива LCP с линейным временем принадлежит Фишеру (2011) , который, в свою очередь, основан на одном из самых быстрых алгоритмов построения суффиксного массива (SA-IS) Нонга, Чжана и Чана (2009) . Fischer & Kurpicz (2017), основанный на DivSufSort Юты Мори, работает еще быстрее.

Приложения

[ редактировать ]

Как отметили Абуэльхода, Курц и Олебуш (2004), некоторые проблемы обработки строк можно решить с помощью следующих видов обхода дерева :

  • обход всего суффиксного дерева снизу вверх
  • обход поддерева суффиксного дерева сверху вниз
  • обход суффиксного дерева с использованием суффиксных ссылок.

Касаи и др. (2001) снизу вверх, показывают, как моделировать обход суффиксного дерева используя только массив суффиксов и массив LCP. Абуэлхода, Курц и Олебуш (2004) расширяют массив суффиксов с помощью массива LCP и дополнительных структур данных и описывают, как этот расширенный массив суффиксов можно использовать для моделирования всех трех видов обхода суффиксного дерева. Фишер и Хойн (2007) сокращают требования к пространству расширенного массива суффиксов за счет предварительной обработки массива LCP для запросов минимального диапазона . Таким образом, каждая проблема, которую можно решить с помощью алгоритмов суффиксного дерева, также может быть решена с использованием расширенного массива суффиксов . [ 2 ]

Решение о том, является ли шаблон длины является подстрокой строки длины берет время, если используется только массив суффиксов. Дополнительно используя информацию LCP, эту границу можно улучшить до время. [ 3 ] Абуэльхода, Курц и Олебуш (2004) показывают, как еще больше улучшить это время работы для достижения оптимального время. Таким образом, используя массив суффиксов и информацию массива LCP, на запрос принятия решения можно ответить так же быстро, как и при использовании дерева суффиксов .

Массив LCP также является важной частью сжатых суффиксных деревьев, которые обеспечивают полную функциональность суффиксного дерева, такую ​​как суффиксные ссылки и запросы наименьшего общего предка . [ 5 ] [ 6 ] Кроме того, его можно использовать вместе с массивом суффиксов для вычисления факторизации Лемпеля-Зива LZ77 в время. [ 2 ] [ 7 ] [ 8 ] [ 9 ]

Проблема с самой длинной повторяющейся подстрокой для строки длины можно решить в время с использованием как массива суффиксов и массив LCP. Достаточно выполнить линейное сканирование массива LCP, чтобы найти его максимальное значение и соответствующий индекс где хранится. Самая длинная подстрока, которая встречается хотя бы дважды, определяется выражением .

В оставшейся части этого раздела более подробно объясняются два применения массива LCP: как массив суффиксов и массив строк LCP можно использовать для построения соответствующего суффиксного дерева и как можно отвечать на запросы LCP для произвольных суффиксов, используя диапазон. минимум запросов к массиву LCP.

Найдите количество вхождений шаблона

[ редактировать ]

Чтобы найти количество вхождений заданной строки (длина ) в тексте (длина ), [ 3 ]

  • Мы используем двоичный поиск по суффиксному массиву найти начальное и конечное положение всех вхождений .
  • Теперь, чтобы ускорить поиск, мы используем массив LCP, а именно специальную версию массива LCP (LCP-LR ниже).

Проблема с использованием стандартного двоичного поиска (без информации LCP) заключается в том, что в каждом из необходимо было выполнить сравнения, мы сравниваем P с текущей записью массива суффиксов, что означает полное сравнение строк длиной до m символов. Итак, сложность .

Массив LCP-LR помогает улучшить эту ситуацию. , следующим образом:

В любой момент алгоритма двоичного поиска мы, как обычно, рассматриваем диапазон суффиксного массива и его центральной точки , и решаем, продолжим ли мы поиск в левом поддиапазоне или в правильном поддиапазоне . Для принятия решения сравниваем к строке в . Если идентичен , наш поиск завершен. А если нет, то мы уже сравнили первый персонажи а потом решил, стоит ли лексикографически меньше или больше, чем . Предположим, что результат таков. больше, чем . Итак, на следующем этапе мы рассматриваем и новая центральная точка в середине:

             M ...... M' ...... R
             |
      we know:
         lcp(P,M)==k

Хитрость теперь в том, что LCP-LR заранее вычисляется так, что -lookup сообщает нам самый длинный общий префикс и , .

Мы уже знаем (из предыдущего шага), что сам имеет префикс общие персонажи с : . Теперь есть три возможности:

  • Случай 1: , то есть имеет меньше префиксных символов, общих с M, чем M общего с M'. Это означает, что (k+1)-й символ M' такой же, как и у M, и поскольку P лексикографически больше, чем M, он также должен быть лексикографически больше, чем M'. Итак, продолжаем в правой половине (M',...,R).
  • Случай 2: , то есть имеет больше префиксных символов, общих с чем имеет общее с . Следовательно, если бы мы сравнивали к , общий префикс будет меньше, чем , и будет лексикографически больше, чем , поэтому, фактически не производя сравнения, мы продолжаем в левой половине .
  • Случай 3: . Итак, М и М' тождественны в первом персонажи. Чтобы решить, продолжим ли мы в левой или правой половине, достаточно сравнить к начиная с й персонаж.
  • Продолжаем рекурсивно.

Общий эффект заключается в том, что никакой характер сравнивается с любым символом текста более одного раза (подробнее см. [ 3 ] ). Общее количество сравнений символов ограничено , поэтому общая сложность действительно .

Нам все еще нужно предварительно вычислить LCP-LR, чтобы он мог сообщить нам время lcp между любыми двумя записями массива суффиксов. Мы знаем, что стандартный массив LCP дает нам lcp только последовательных записей, т.е. для любого . Однако, и в описании выше не обязательно являются последовательными записями.

Ключом к этому является понимание того, что только определенные диапазоны когда-либо произойдет во время бинарного поиска: он всегда начинается с и делит это в центре, а затем продолжает либо влево, либо вправо, снова делит эту половину и так далее. Другой способ взглянуть на это таков: каждая запись массива суффиксов встречается как центральная точка ровно одного возможного диапазона во время двоичного поиска. Итак, существует ровно N различных диапазонов. это может сыграть роль при двоичном поиске, и достаточно предварительно вычислить и для тех возможные диапазоны. Так что это отдельные заранее вычисленные значения, следовательно, LCP-LR по размеру.

Более того, существует простой рекурсивный алгоритм для вычисления значения LCP-LR в время из стандартного массива LCP.

Подводить итоги:

  • LCP-LR можно вычислить в время и пространство от ЛКП.
  • Использование LCP-LR во время двоичного поиска помогает ускорить процедуру поиска с к .
  • Мы можем использовать два двоичных поиска, чтобы определить левый и правый конец диапазона совпадений для , а длина диапазона соответствия соответствует количеству вхождений P.

Построение суффиксного дерева

[ редактировать ]

Учитывая массив суффиксов и массив LCP веревки длины , его суффиксное дерево может быть построен в time основан на следующей идее: начните с частичного суффиксного дерева для лексикографически наименьшего суффикса и повторно вставляйте другие суффиксы в порядке, заданном массивом суффиксов.

Позволять быть частичным суффиксным деревом для . Дальше пусть быть длиной конкатенации всех меток пути от корня узел .

Случай 1 ( ): Предположим, что суффиксы , , и строки уже добавлены в суффиксное дерево. Тогда суффикс добавляется в дерево, как показано на рисунке. путь Крайний правый выделен красным.

Начните с , дерево, состоящее только из корня. Чтобы вставить в , пройдите по крайнему правому пути, начиная с недавно вставленного листа до корня, до самого глубокого узла с достигается.

Нам нужно различать два случая:

  • : Это означает, что объединение меток от корня к путь равен самому длинному общему префиксу суффиксов и .
    В этом случае вставьте как новый лист узла и обозначим край с . Таким образом, метка края состоит из оставшихся символов суффикса. которые еще не представлены конкатенацией меток корня к путь.
    Это создает частичное суффиксное дерево. .
    Случай 2 ( ): Чтобы добавить суффикс , край ранее вставленного суффикса приходится разделяться. Новое ребро нового внутреннего узла помечается самым длинным общим префиксом из суффиксов. и . Края, соединяющие два листа, помечены остальными символами суффикса, не являющимися частью префикса.
  • : Это означает, что объединение меток от корня к путь отображает меньше символов, чем самый длинный общий префикс суффиксов и а недостающие символы содержатся в метке края самый правый край. Поэтому нам нужно разделить это ребро следующим образом:
    Позволять быть ребенком на самый правый путь.
  1. Удалить край .
  2. Добавить новый внутренний узел и новый край с этикеткой . Новая метка состоит из недостающих символов самого длинного общего префикса. и . Таким образом, конкатенация меток корня в путь теперь отображает самый длинный общий префикс и .
  3. Соединять к вновь созданному внутреннему узлу по краю это помечено . Новая метка состоит из оставшихся символов удаленного края. которые не использовались в качестве метки края .
  4. Добавлять как новый лист и подключим его к новому внутреннему узлу по краю это помечено . Таким образом, метка края состоит из оставшихся символов суффикса. которые еще не представлены конкатенацией меток корня к путь.
  5. Это создает частичное суффиксное дерево. .

Простой аргумент амортизации показывает, что время работы этого алгоритма ограничено :

Узлы, которые проходятся на шаге идя по крайнему правому пути (кроме последнего узла ) удаляются из крайнего правого пути, когда добавляется к дереву как новый лист. Эти узлы никогда больше не будут пересекаться на всех последующих шагах. . Следовательно, максимум узлы будут пройдены в общей сложности.

LCP-запросы для произвольных суффиксов

[ редактировать ]

Массив LCP содержит только длину самого длинного общего префикса каждой пары последовательных суффиксов в массиве суффиксов . Однако с помощью обратного суффиксного массива ( , то есть суффикс это начинается с позиции в хранится в положении в постоянного времени ) и запросы минимального диапазона на , можно определить длину самого длинного общего префикса произвольных суффиксов в время.

Из-за лексикографического порядка суффиксного массива каждый общий префикс суффиксов и должен быть общим префиксом для всех суффиксов между позиция в массиве суффиксов и позиция в массиве суффиксов . Следовательно, длина самого длинного префикса, общего для всех этих суффиксов, представляет собой минимальное значение в интервале . Это значение можно найти за постоянное время, если предварительно обрабатывается для запросов с минимальным диапазоном.

Таким образом, учитывая строку длины и две произвольные позиции в строке с , длина самого длинного общего префикса суффиксов и можно вычислить следующим образом: .

Примечания

[ редактировать ]
  • Абуэльхода, Мохамед Ибрагим; Курц, Стефан; Олебуш, Энно (2004). «Замена суффиксных деревьев расширенными суффиксными массивами» . Журнал дискретных алгоритмов . 2 : 53–86. дои : 10.1016/S1570-8667(03)00065-0 .
  • Манбер, Уди; Майерс, Джин (1993). «Суффиксные массивы: новый метод поиска строк в Интернете». SIAM Journal по вычислительной технике . 22 (5): 935. CiteSeerX   10.1.1.105.6571 . дои : 10.1137/0222058 . S2CID   5074629 .
  • Касаи, Т.; Ли, Г.; Аримура, Х.; Арикава, С.; Парк, К. (2001). Вычисление самого длинного общего префикса в суффиксных массивах за линейное время и его приложения . Материалы 12-го ежегодного симпозиума по комбинаторному сопоставлению с образцом. Конспекты лекций по информатике. Том. 2089. стр. 181–192. дои : 10.1007/3-540-48194-X_17 . ISBN  978-3-540-42271-6 .
  • Олебуш, Энно; Фишер, Йоханнес; Гог, Саймон (2010). КСТ++ . Обработка строк и поиск информации. Конспекты лекций по информатике. Том. 6393. с. 322. дои : 10.1007/978-3-642-16321-0_34 . ISBN  978-3-642-16320-3 .
  • Кярккяйнен, Юха; Сандерс, Питер (2003). Простое построение массива суффиксов линейной работы . Материалы 30-й международной конференции «Автоматы, языки и программирование». стр. 943–955 . Проверено 28 августа 2012 г.
  • Фишер, Йоханнес (2011). Стимуляция LCP-массива . Алгоритмы и структуры данных. Конспекты лекций по информатике. Том. 6844. стр. 374–385. arXiv : 1101.3448 . дои : 10.1007/978-3-642-22300-6_32 . ISBN  978-3-642-22299-3 .
  • Манзини, Джованни (2004). Два приема экономии места при вычислении массива LCP за линейное время . Теория алгоритмов - SWAT 2004. Конспекты лекций по информатике. Том. 3111. с. 372. дои : 10.1007/978-3-540-27810-8_32 . ISBN  978-3-540-22339-9 .
  • Кярккяйнен, Юха; Манзини, Джованни; Пуглиси, Саймон Дж. (2009). Перестановочный массив самых длинных общих префиксов . Комбинаторное сопоставление с образцом. Конспекты лекций по информатике. Том. 5577. с. 181. дои : 10.1007/978-3-642-02441-2_17 . ISBN  978-3-642-02440-5 .
  • Пуглиси, Саймон Дж.; Терпин, Эндрю (2008). Компромиссы пространства и времени для вычисления массива с самым длинным общим префиксом . Алгоритмы и вычисления. Конспекты лекций по информатике. Том. 5369. с. 124. дои : 10.1007/978-3-540-92182-0_14 . ISBN  978-3-540-92181-3 .
  • Гог, Саймон; Олебуш, Энно (2011). Быстрые и легкие алгоритмы построения LCP-массива (PDF) . Материалы семинара по алгоритмической разработке и экспериментам, ALENEX 2011. С. 25–34 . Проверено 28 августа 2012 г.
  • Нонг, Ге; Чжан, Сен; Чан, Вай Хун (2009). Построение линейного суффиксного массива с помощью почти чистой индуцированной сортировки . Конференция по сжатию данных 2009 г. п. 193. дои : 10.1109/DCC.2009.42 . ISBN  978-0-7695-3592-0 .
  • Фишер, Йоханнес; Хойн, Волкер (2007). Новое краткое представление RMQ-информации и улучшения расширенного массива суффиксов . Комбинаторика, алгоритмы, вероятностные и экспериментальные методологии. Конспекты лекций по информатике. Том. 4614. с. 459. дои : 10.1007/978-3-540-74450-4_41 . ISBN  978-3-540-74449-8 .
  • Чен, Г.; Пуглиси, С.Дж.; Смит, ВФ (2008). «Факторизация Лемпеля – Зива с использованием меньшего времени и пространства». Математика в информатике . 1 (4): 605. дои : 10.1007/s11786-007-0024-4 . S2CID   1721891 .
  • Крочемор, М.; Илие, Л. (2008). «Вычисление самого длинного предыдущего фактора в линейном времени и приложениях». Письма об обработке информации . 106 (2): 75. CiteSeerX   10.1.1.70.5720 . дои : 10.1016/j.ipl.2007.10.006 . S2CID   5492217 .
  • Крочемор, М.; Илие, Л.; Смит, ВФ (2008). Простой алгоритм вычисления факторизации Лемпеля-Зива . Конференция по сжатию данных (dcc, 2008 г.). п. 482. дои : 10.1109/DCC.2008.36 . hdl : 20.500.11937/5907 . ISBN  978-0-7695-3121-2 .
  • Садакане, К. (2007). «Сжатые суффиксные деревья с полной функциональностью». Теория вычислительных систем . 41 (4): 589–607. CiteSeerX   10.1.1.224.4152 . дои : 10.1007/s00224-006-1198-x . S2CID   263130 .
  • Фишер, Йоханнес; Мякинен, Вели; Наварро, Гонсало (2009). «Быстрые сжатые суффиксные деревья, ограниченные энтропией» . Теоретическая информатика . 410 (51): 5354. doi : 10.1016/j.tcs.2009.09.012 .
  • Фишер, Йоханнес; Курпиц, Флориан (5 октября 2017 г.). «Демонтаж ДивСуфСорта». Материалы Пражской конференции по стрингологии 2017 . arXiv : 1710.01896 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d16f6f157b35e58994a34c719735c41e__1718271120
URL1:https://arc.ask3.ru/arc/aa/d1/1e/d16f6f157b35e58994a34c719735c41e.html
Заголовок, (Title) документа по адресу, URL1:
LCP array - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)