Сжатие ZIP-файла с использованием LZW-сжатия создает слишком большой сжатый файл
Я пытался сжать zip-файл, используя метод сжатия LZW (код приведен в следующей ссылке),
http://rosettacode.org/wiki/LZW_compression
Он создает длину закодированного файла слишком большой, чем исходный размер файла, в чем причина? Пожалуйста, кто-нибудь, помогите мне понять, что происходит в режиме реального времени.
1 ответ
При сжатии без потерь невозможно сжать каждый файл в более короткий файл.
Это связано с тем, что существует 256N файлов длиной N байт, но есть (256N-1) / 255 файлов, которые короче N байтов. Так что не каждый файл может быть сопоставлен с более короткими файлами.
Более того, если какой-либо файл становится короче, то какой-то более короткий файл должен был уступить место, чтобы сделать это возможным. Поэтому некоторые файлы должны стать больше.
Сжатие без потерь работает путем распознавания общих шаблонов в типичных файлах, созданных людьми, и преобразования длинных последовательностей байтов с высокой вероятностью в более короткие последовательности. Ценой этого является то, что некоторые последовательности становятся длиннее. Цель этого проекта - сжать типичные файлы, но нетипичные файлы должны быть длиннее.
Если сжатие выполняет свою работу, избыточная информация удаляется из файла, и выходные данные аналогичны случайным данным. Тогда вывод не может быть сжат дальше.