4551
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) |
||
Строка 50: | Строка 50: | ||
Чтобы убедиться в мощи преобразования bwt, рассмотрим ситуацию с точки зрения эмпирической энтропии. Зафиксируем целое положительное число k. Первые k столбцов матрицы bwt содержат все подстроки s длины k, | Чтобы убедиться в мощи преобразования bwt, рассмотрим ситуацию с точки зрения эмпирической энтропии. Зафиксируем целое положительное число k. Первые k столбцов матрицы bwt содержат все подстроки s длины k, лексикографически упорядоченные (а также k подстрок, содержащих символ $). Для любой подстроки w строки s длины k символы, непосредственно предшествующие каждому вхождению w в s, сгруппированы вместе в множество последовательных позиций в <math>\hat{s} \;</math>, поскольку они являются последними символами строк матрицы <math>\mathcal{M} \;</math>, которым предшествуют символы w. Используя нотацию, предложенную при определении <math>Н_k \;</math>, можно перефразировать это свойство так, чтобы символы <math>w_s \;</math> были последовательными в <math>\hat{s} \;</math> или, что эквивалентно, чтобы <math>\hat{s} \;</math> содержало в качестве подстроки перестановку <math>\pi_w (w_s) \;</math> строки <math>w_s \;</math>. | ||
Строка 56: | Строка 56: | ||
Поскольку перестановка строки не меняет ее (модифицированной) эмпирической энтропии нулевого порядка (то есть <math>H_0 (\pi_w (w_s)) = H_0 (w_s)) \;</math>), преобразование Барроуза-Уилера может рассматриваться как способ свести задачу сжатия строки s вплоть до энтропии k-го порядка к задаче сжатия ''различных фрагментов'' <math>\hat{s} \;</math> вплоть до их энтропии ''нулевого порядка''. Чтобы убедиться в этом, рассмотрим разбиение <math>\hat{s} \;</math> на подстроки <math>\pi_w (w_s) \;</math>, изменяя w над <math>\Sigma^k \;</math>. Из этого следует, что \hat{s} = \ | Поскольку перестановка строки не меняет ее (модифицированной) эмпирической энтропии нулевого порядка (то есть <math>H_0 (\pi_w (w_s)) = H_0 (w_s)) \;</math>), преобразование Барроуза-Уилера может рассматриваться как способ свести задачу сжатия строки s вплоть до энтропии k-го порядка к задаче сжатия ''различных фрагментов'' <math>\hat{s} \;</math> вплоть до их энтропии ''нулевого порядка''. Чтобы убедиться в этом, рассмотрим разбиение <math>\hat{s} \;</math> на подстроки <math>\pi_w (w_s) \;</math>, изменяя w над <math>\Sigma^k \;</math>. Из этого следует, что <math>\hat{s} = \bigsqcup_{w \in \Sigma^k} \pi_w (w_s) \;</math>, где <math>\bigsqcup \;</math> – оператор конкатенации над строками. [''Помимо <math>\bigsqcup_{w \in \Sigma^k} \pi_w (w_s) \;</math>, строка <math>\hat{s} \;</math> также содержит последние k символов s (не входящие ни в какой <math>w_s \;</math>) и специальный символ $. Для простоты в дальнейшем изложении эти символы будут игнорироваться.''] | ||
Из (1) следует, что <math>\sum_{w \in \Sigma^k} |\pi_w (w_s)| H_0 (\pi_w (w_s)) = \sum_{w \in \Sigma^k} |w_s| H_0 (w_s) = |s| H_k (s)</math>. | |||
Следовательно, для сжатия строки s вплоть до <math>|s| H_k (s) \;</math> достаточно сжать каждую ее подстроку <math>\pi_w (w_s)) \;</math> вплоть до эмпирической энтропии нулевого порядка. Заметим, однако, что при использовании вышеприведенной схемы параметр k необходимы выбрать заранее. Более того, подобную схему нельзя применить к <math>H^*_k \;</math>, определенной в терминах контекстов длины ''не более'' k. В результате на данный момент не известно эффективной процедуры для вычисления разбиения <math>\hat{s} \;</math> согласно <math>H^*_k(s) \;</math>. Усилитель сжатия [3] представляет собой естественное дополнение bwt и позволяет сжимать любую строку s до <math>H_k(s) \;</math> (или <math>H^*_k(s) \;</math>) одновременно для всех <math>k \ge 0 \;</math>. | |||
Следовательно, для сжатия строки s вплоть до | |||
== Алгоритм усиления степени сжатия == | == Алгоритм усиления степени сжатия == |
правка