Вопрос: поиск подстрок в LZ сортировкой


Сайт о сжатии >> Форум #Компрессор# >> [Ответить] [Ответы]

Автор: Никита Лесников, <nlo_one@mail.ru>
Слуцк, Беларусь, 11 августа 2003 года в 16:08:45

Мне в голову пришел следующий метод поиска подстрок в поблочном
LZ. Я даже подозреваю, что он используется в IMP. :)

Идея такова: для данного блока данных (given data block) строится суффиксный
массив. Если ограничить максимальную длину совпадения где-то
двухстами-трехстами байтами, то с этой работой великолепно справятся алгоритмы
Kao, Seward'а, а также Itoh'а и Tanak'и (перечислены в порядке убывания скорости).

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

Далее при выполнении LZ можно просто выполнять поиск по этому дереву (деревьям),
правда, отсекая строки, не входящие в скользящее окно.

При этом становятся ненужными операции добавления и удаления суффиксов из
двоичного дерева, а также балансировки. Другой положительной стороной этого алгоритма
являются его требования к памяти - 9*N ( "обычное" двоичное дерево требует от 9*N
до 10*N )

Конечно же, есть и отрицательные стороны: на малых (относительно размера блока)
словарях процент отсекаемых строк будет слишком велик. В то же время, когда размер
словаря соизмерим с размером блока, данная реализация в среднем должна работать очень эффективно.
Кроме того, становиться возможным неполный поиск по дереву, который трудно реализовать
на "классических" деревьях.

Мне бы хотелось узнать мнение специалистов об этом алгоритме. Достаточно ли он эффективен,
чтобы его применять на практике?

Regards,
Никита Лесников (mailto:nlo_one@mail.ru)

Ответы:



Ответить на это сообщение

Тема:

Имя (желательно полное):

E-Mail:

URL:

Город:

Страна:

Вежливый и подробный комментарий:
(Форматируйте его, пожалуйста, как почту - короткими строками
Еnter в конце строки, пустая строка между параграфами).

Пожалуйста, заполните все поля.
И не нажимайте по два раза на кнопку! Дождитесь ответа сервера.