Вейвлет-дерево - Wavelet Tree
В Вейвлет-дерево это лаконичная структура данных для хранения строк в сжатом пространстве. Он обобщает и операции, определенные на битвекторы к произвольным алфавитам.
Первоначально введено для представления сжатые массивы суффиксов,[1] он нашел применение в нескольких контекстах.[2][3] Дерево определяется путем рекурсивного разбиения алфавита на пары подмножеств; листья соответствуют отдельным символам алфавита, и в каждом узле a битвектор хранит, принадлежит ли символ строки одному или другому подмножеству.
Название происходит от аналогии с вейвлет-преобразование для сигналов, который рекурсивно разлагает сигнал на низкочастотные и высокочастотные составляющие.
Свойства
Позволять быть конечным алфавитом с . Используя сжатые словари в узлах строка можно хранить в , где это порядок-0 эмпирическая энтропия из .
Если дерево сбалансировано, операции , , и может поддерживаться в время.
Операция доступа
Вейвлет-дерево содержит растровое представление строки. Если мы знаем набор алфавитов, то точную строку можно вывести, отслеживая биты вниз по дереву. Чтобы найти букву в яth позиция в строке: -
Если яth элемент в корне равен 0, мы переходим к левому дочернему элементу, иначе мы переходим к правому дочернему элементу. Теперь наш индекс в дочернем узле - это ранг соответствующего бита в родительском узле. Этот ранг можно вычислить в O (1), используя сжатые словари. Наряду с переходом к дочернему элементу мы также уточняем наш алфавит до соответствующего подмножества. Эти шаги повторяются до тех пор, пока мы не дойдем до листа, где у нас останется только одна буква в нашем алфавите, то есть та, которую мы искали. Таким образом, для сбалансированного дерева любой S [i] в строке S может быть доступен в [3] время.
Расширения
В литературе было представлено несколько расширений базовой структуры. Чтобы уменьшить высоту дерева, можно использовать множественные узлы вместо двоичных.[2] Структура данных может быть динамической, поддерживая вставку и удаление в произвольных точках строки; эта функция позволяет реализовать динамический FM-индексы.[4] Это может быть дополнительно обобщено, позволяя операциям обновления изменять базовый алфавит: Wavelet Trie[5] эксплуатирует три структура в алфавите строк, чтобы разрешить динамическое изменение дерева.
дальнейшее чтение
- Вейвлет-деревья. Сообщение в блоге, описывающее построение вейвлет-дерева с примерами.
использованная литература
- ^ Р. Гросси, А. Гупта и Дж. С. Виттер, Сжатые энтропией текстовые индексы высокого порядка, Материалы 14-го ежегодного симпозиума SIAM / ACM по дискретным алгоритмам (SODA), Январь 2003 г., 841-850.
- ^ а б П. Феррагина, Р. Джанкарло, Дж. Манзини, Множество достоинств вейвлет-деревьев, Информация и вычисления, Том 207, выпуск 8, август 2009 г., страницы 849-866
- ^ Х.-Л. Чан, В.-К. Hon, T.-W. Лам и К. Садакане, Сжатые индексы для коллекций динамического текста, ACM-транзакции на алгоритмах, 3(2), 2007
- ^ Р. Гросси и Дж. Оттавиано, Wavelet Trie: поддержание индексированной последовательности строк в сжатом пространстве, В материалах 31-го симпозиума по принципам систем баз данных (PODS), 2012
внешние ссылки
- СМИ, связанные с Вейвлет-дерево в Wikimedia Commons