Как приходите, разные текстовые файлы становятся разными размерами после сжатия?

StackOverflow https://stackoverflow.com/questions/2906491

Вопрос

У меня есть файл какого-либо случайного текста размером = 27 ГБ, а после сжатия он становится 40 МБ или около того.

И файл SQL 3,5 ГБ становится 45 МБ после сжатия.

Но текстовый файл 109 МБ стал 72 МБ после сжатия, так что с ним можно не так.

Почему настолько менее сжаты, он должен 10 МБ или около того, или я что-то не хватает.

Все файлы, как я вижу, это только на английском языке, а также некоторые грамматические символы (/,. - = + и т. Д.)

Почему?

Если нет, вы можете сказать, как я могу супер сжать текстовый файл?

Я могу код в PHP, NP в этом.

Это было полезно?

Решение

Коэффициент сжатия файла зависит от его содержания.

Большинство алгоритмов сжатия работают путем преобразования повторных данных в одно повторение, указывая, сколько раз это было повторено.

Например, файл, содержащий письмо a 1 000 000 раз могут быть сжаты намного больше, чем файл с полностью случайным контентом.

Для получения дополнительной информации, пожалуйста, предоставьте больше информации.

Другие советы

Подумайте об этом таким образом ... Если у вас есть файл, который содержит:

abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc

Файл по существу просто магазины abc times 18

С другой стороны, этот файл:

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

мог только хранить:

abcdefghijklmnopqrstuvwxyz times 2

Таким образом, второй файл сжимается как больший файл, чем первый, даже если он короче, чтобы начать с.

Сжатие работает, удаляя дубликаты в входных данных. Ваш файл 3.5GB становится гораздо меньше после сжатия, потому что он имеет много дубликатов данных, в то время как ваш меньший файл не сжимается так же, поскольку он не содержит столько дубликатов данных.

Если вы хотите понять, как работает компрессионные утилиты, то посмотрите на Википедию Лемпель-Зив-Уэлч Статья, которая является алгоритмом, на которой построены большинство этих алгоритмов.

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

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

Сжатие работает, удаляя избыточность в данных. Окончательное место для начала, вероятно, с Кодирование Хаффмана который является одним из первых семенных работ, непосредственно на проблему, но вы можете позаботьться о том, чтобы выкопать дальше обратно в оригинальные работы Шеннона на Теория информации.

Это не новые концепции - они впервые приобрели значительный интерес в 1940-х и 50-х годах, когда люди были эффективно заинтересованы в передаче данных по очень ограниченным каналам. Тема - это не только интерес для вычисления - есть несколько очень глубоких соединений с энтропией и другой фундаментальной физикой. Например, получается прекрасно сжатые данные неотличимы от белого шума.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top