4551
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) |
||
Строка 36: | Строка 36: | ||
Для локализации каждого такого вхождения <math>SA[i], sp_1 \le i \le ep_1</math>, можно вычислить последовательность i, LF[i], LF[LF[i]], ... до тех пор, пока не будет достигнут <math>LF^k [i]</math>, являющийся выбранной позицией суффиксного массива и, таким образом, явно хранящийся в структуре выборки, предназначенной для запросов display(i, j). Тогда <math>SA[i] = SA[LF^k[i]] + k</math>. Поскольку мы перемещаемся по тексту практически последовательно, мы не можем сделать в этом процессе более s шагов. | Для локализации каждого такого вхождения <math>SA[i], sp_1 \le i \le ep_1</math>, можно вычислить последовательность <math>i, LF[i], LF[LF[i]], ...</math> до тех пор, пока не будет достигнут <math>LF^k [i]</math>, являющийся выбранной позицией суффиксного массива и, таким образом, явно хранящийся в структуре выборки, предназначенной для запросов display(i, j). Тогда <math>SA[i] = SA[LF^k[i]] + k</math>. Поскольку мы перемещаемся по тексту практически последовательно, мы не можем сделать в этом процессе более s шагов. | ||
Строка 48: | Строка 48: | ||
Теорема 3 ( | '''Теорема 3 (Мэкинен и Наварро, 2005 [3]). Задача CTI может быть решена с помощью так называемого сокращенного суффиксного массива (Succinct Suffix Array, SSA) размером <math>nH_0 + o(n \; log \; \sigma)</math> бит, выполняющего операцию count(P) за время <math>O(m(1 + log \; \sigma / log \; log \; n))</math>, locate(P) – за время <math>O(log^{1 + \epsilon} \; n \; log \; \sigma / log \; log \; n)</math> на одно вхождение, а display(i, j) – за время <math>O((j - i + log^{1 + \epsilon} \; n) log \; \sigma / log \; log \; n)</math>. Здесь <math>H_0</math> – энтропия нулевого порядка для T, <math>\sigma = o(n)</math>, а <math>\epsilon > 0</math> – произвольная константа.''' | ||
Ферраджина и др. [ ] разработали технику под названием | Ферраджина и др. [2] разработали технику под названием ''форсирование сжатия'' (compression boosting), которая находит оптимальное разбиение <math>T^{bwt}</math>, такое, что при сжатии каждого элемента по отдельности с использованием его модели нулевого порядка результат пропорционален энтропии k-го порядка. Этот подход можно совместить с идеей SSA, построив дерево вейвлетов отдельно для каждого отрезка и некоторые дополнительные структуры для решения глобальных запросов <math>rank_c()</math> для отдельных деревьев вейвлетов: | ||
Теорема 4 ([Ферраджина и др. [4]). Задача CTI может быть решена с помощью так называемого дружественного к алфавитам FM-индекса (Alphabet-Friendly FM-Index, AF-FMI) размером | '''Теорема 4 ([Ферраджина и др. [4]). Задача CTI может быть решена с помощью так называемого дружественного к алфавитам FM-индекса (Alphabet-Friendly FM-Index, AF-FMI) размером <math>nH_k + o(n \; log \; \sigma)</math> бит, имеющего ту же временную сложностьи те же ограничения, что и SSA, при <math>k \le \alpha \; log_{\sigma}\; n</math> для любого константного <math>0 < \alpha < 1</math>.''' | ||
Недавно проведенный анализ [ ] показал, что требования к памяти простого алгоритма SSA ограничены тем же количеством бит | Недавно проведенный анализ [8] показал, что требования к памяти простого алгоритма SSA ограничены тем же количеством бит <math>nH_k + o(n \; log \; \sigma)</math>, что теоретически делает подход на базе форсирования для достижения того же результата излишним. На практике реализации в работах [4, 7] намного превосходят реализации, построенные непосредственно на этой упрощенной идее. | ||
== Применение == | == Применение == |
правка