Прогнозирование времени или степени сжатия для сжатия файла без потерь?

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

Допустим, у вас есть некоторая информация о файле, такая как размер, избыточность, тип (для простоты можно сказать текст). Может быть, у нас есть какие-то статистические данные из реальных предыдущих измерений. Что еще потребуется для прогнозирования времени выполнения и / или степени сжатия (даже если она очень приблизительная).

Только для локального сжатия размер файла будет иметь значение, поскольку фактическое чтение и запись данных на / с носителя данных (SD-карта, жесткий диск) займет более доминирующую часть от общего выполнения.

Фактическая часть сжатия, вероятно, будет зависеть от избыточности / типа, поскольку большинство алгоритмов сжатия работают путем сжатия небольших блоков данных (100 КБ или около того). Например, файлы HTML / Javascripts большего размера сжимаются лучше, поскольку они имеют большую избыточность.

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

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


person 22332112    schedule 25.10.2014    source источник
comment
Это довольно широко. Если у вас есть статистические данные (т. Е. Измерения, сделанные при предыдущих рабочих нагрузках для аналогичных файлов), вы, вероятно, можете получить оценку путем интерполяции. В общем случае неясно, есть ли универсальное решение для этого. (А как именно вы измерили избыточность?)   -  person Oliver Charlesworth    schedule 25.10.2014


Ответы (3)


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

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

person usr    schedule 25.10.2014

Это зависит от данных, но с изображениями вы можете брать небольшие образцы. Понижение частоты дискретизации изменит результат. Вот пример: PHP - сжатие изображения для встречи с файлом Ограничение по размеру.

person Gigamegs    schedule 27.10.2014

Степень сжатия можно рассчитать по формулам:

http://geekresearchlab.net/mtechproject/content/public/upload/5_2_o.jpg

А тестирование производительности можно провести с помощью V8 или Sunspider.

Вы также можете использовать такие алгоритмы, как DEFLATE или LZMA для вычисления механизма. PPM (частичное совпадение с прогнозированием) можно использовать для прогнозирования.

person ashumeow    schedule 27.10.2014