4551
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) мНет описания правки |
||
Строка 6: | Строка 6: | ||
Простым примером полнотекстового индекса является | Простым примером полнотекстового индекса является ''суффиксный массив'' A[1, n], содержащий перестановку интервала [1, n], такую, что T[A[i], n] < T[A[i + 1], n] для всех <math>1 \le i < n</math>, где отношение "<" между строками обозначает лексикографический порядок. Используя суффиксный массив, можно найти вхождения заданного шаблона <math>P = p_1 p_2 ... p_m</math> в строке T с помощью двух бинарных поисков за время O(m log n). | ||
Строка 24: | Строка 24: | ||
2) асимптотически оптимально относительно размера текста, т. е. <math>n \; log \; \sigma (1 + o(1))</math> бит; | 2) асимптотически оптимально относительно размера текста, т. е. <math>n \; log \; \sigma (1 + o(1))</math> бит; | ||
3) пропорционально размеру ''сжатого'' текста, т. е. <math>O(nH_k)</math> бит, где <math>O(H_k)</math> — это (эмпирическая) ''энтропия k-го порядка'' строки <math> | 3) пропорционально размеру ''сжатого'' текста, т. е. <math>O(nH_k)</math> бит, где <math>O(H_k)</math> — это (эмпирическая) ''энтропия k-го порядка'' строки T ''//где <math>H_k</math> — минимальное среднее количество бит, необходимых для кодирования одного символа с помощью любого алгоритма сжатия, который фиксирует кодовое слово на основе контекста k-го символа, следующего за кодируемым символом. В [6] дано более формальное определение//''; | ||
или даже | |||
4) асимптотически оптимально относительно размера сжатого текста, т. е. <math>O(nH_k) + o(n \; log \; \sigma)</math> бит. | 4) асимптотически оптимально относительно размера сжатого текста, т. е. <math>O(nH_k) + o(n \; log \; \sigma)</math> бит. | ||
Строка 35: | Строка 36: | ||
Гросси и Виттер используют иерархическую декомпозицию массива А, основанную на <math>\Psi | Гросси и Виттер используют иерархическую декомпозицию массива А, основанную на <math>\Psi</math> ''//далее приводится описание, близкое к изложенному в [9]//''. рассмотрим первый уровень этой иерархической декомпозиции. Пусть <math>A_0 = A</math> – исходный суффиксный массив. Битовый вектор <math>B^0 [1, n]</math> определен таким образом, что <math>B^0 [i] = 1</math> в том и только том случае, если A[i] четно. Кроме того, пусть <math>\Psi_0 [1, \lceil n/2 \rceil ]</math> содержит последовательность значений <math>\Psi(i)</math> для тех аргументов i, для которых <math>B^0[i] = 0</math>. Наконец, пусть <math>A_1 [1, \lfloor n/2 \rfloor ]</math> будет подпоследовательностью <math>A_0 [1, n]</math>, образованной четными значениями <math>A_0[i]</math>, деленными на 2. | ||
Тогда A = A0 может быть представлен с использованием только ^Q, B° и A1. Чтобы получить A[i], сначала проверим, верно ли B°[i] = 1. Если это так, то A[i] (делится на 2) где-то в A1. Точное положение зависит от того, сколько единиц встречается в B° до позиции i, обозначенной rank(B°;i), т.е. A[i] = 2 ■ A1[rank1(B° ; i)]. Если B°[i] = 0, то A[i] является нечетным и не представлен в A1. Однако в этом случае элемент A[i] + 1 = A[^(i)] должен быть четным и, таким образом, должен быть представлен в A1. Так как WQ включает только 4> значения, где B°[i] = 0, из этого следует, что A[V(i)] = A[W0[rank0(B°, i)]]. После вычисления A[^(i)] (для четных ФЦ)) можно просто получить A[i] = A[4s(i)] - 1. | Тогда A = A0 может быть представлен с использованием только ^Q, B° и A1. Чтобы получить A[i], сначала проверим, верно ли B°[i] = 1. Если это так, то A[i] (делится на 2) где-то в A1. Точное положение зависит от того, сколько единиц встречается в B° до позиции i, обозначенной rank(B°;i), т.е. A[i] = 2 ■ A1[rank1(B° ; i)]. Если B°[i] = 0, то A[i] является нечетным и не представлен в A1. Однако в этом случае элемент A[i] + 1 = A[^(i)] должен быть четным и, таким образом, должен быть представлен в A1. Так как WQ включает только 4> значения, где B°[i] = 0, из этого следует, что A[V(i)] = A[W0[rank0(B°, i)]]. После вычисления A[^(i)] (для четных ФЦ)) можно просто получить A[i] = A[4s(i)] - 1. |
правка