Может ли алгоритм сжатия «учиться» на множестве файлов и сжимать их лучше? - PullRequest
2 голосов
/ 31 августа 2011

Существует ли библиотека сжатия, которая поддерживает «обучение» для некоторого набора файлов или использует некоторые файлы в качестве базы для сжатия других файлов?

Это может быть полезно, если мы хотим сжать много похожих файлов, сохраняя быстрый доступ ккаждый из них.

Что-то вроде:

# compression:
compressor.learn_on_data(standard_data);
compressor.compresss(data, data_compressed);

# decompression:
decompressor.learn_on_data(the_same_standard_data);
decompressor.decompress(data_compressed, data);

Как это называется (я думаю, что "дельта-сжатие" - это немного другое)?Есть ли реализации этого в популярных библиотеках сжатия?Я ожидаю, что это сработает, например, предварительно заполняя словари стандартными данными.

1 Ответ

2 голосов
/ 01 сентября 2011

Да, это работает. Хотя для этого есть много методов, самый простой из них называется «предварительное заполнение словаря». Короче говоря, вы предоставляете файл, из которого «переваривается» последняя часть (до максимального размера окна, который может быть от 4K до 64MB в зависимости от вашего алгоритма), и, следовательно, может использоваться для лучшего сжатия следующего файл.

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

Недостаток: для компрессора и декомпрессора должен быть предусмотрен один и тот же словарь.

...