Почему разные текстовые файлы становятся разными по размеру после сжатия?
У меня есть файл с произвольным размером текста = 27 ГБ, и после сжатия он становится 40 МБ или около того.
И файл sql 3,5 ГБ становится 45 МБ после сжатия.
Но после сжатия текстовый файл размером 109 МБ становится 72 МБ, так что может быть с ним не так.
Почему так менее сжато, должно быть 10 мб или около того, или я что-то упустил.
Все файлы, как я вижу, только на английском языке и некоторые грамматические символы (/, . - = + и т. Д.)
Зачем?
Если нет, можете ли вы сказать, как я могу сжимать текстовый файл?
Я могу кодировать в PHP, нп в этом.
5 ответов
Степень сжатия файла зависит от его содержимого.
Большинство алгоритмов сжатия работают путем преобразования повторяющихся данных в одно повторение, определяя, сколько раз оно повторялось.
Например, файл, содержащий письмо a
1 000 000 раз можно сжать гораздо больше, чем файл с совершенно случайным содержимым.
Для получения дополнительной информации, пожалуйста, предоставьте больше информации.
Подумайте об этом так... если у вас есть файл, который содержит:
abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc
Файл по сути просто хранит abc times 18
С другой стороны, этот файл:
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
мог хранить только:
abcdefghijklmnopqrstuvwxyz times 2
Таким образом, второй файл сжимается как файл большего размера, чем первый, хотя он короче для начала.
Обычно уровень сжатия зависит от того, насколько сходство и шаблоны алгоритм может найти в файле. Если все файлы содержат текст на английском языке, цифры странные. Я сильно подозреваю, что файлы с экстремальной степенью сжатия содержат большие фрагменты повторяющихся текстовых сегментов.
Сжатие работает путем удаления дубликатов во входных данных. Ваш файл размером 3,5 ГБ становится намного меньше после сжатия, потому что в нем много дублирующих данных, в то время как файл меньшего размера не так сильно сжат, потому что он не содержит столько дублирующих данных.
Если вы хотите понять, как работает сжатие с большинством служебных программ, рассмотрите статью Wikipedia Lempel-Ziv-Welch, которая является алгоритмом, на котором построено большинство этих алгоритмов.
PHP, вероятно, является неправильным выбором для такого проекта, потому что он будет очень медленным на этом языке по сравнению с совершенно хорошими существующими библиотеками на C, которые уже являются частью самого PHP.
Сжатие работает путем удаления избыточности в данных. Определенным местом для начала, вероятно, является кодирование Хаффмана, которое является одной из первых основополагающих работ, непосредственно посвященных проблеме, но вы можете продолжить изучение оригинальных работ Шеннона по теории информации.
Это не новые концепции - они впервые приобрели значительный интерес еще в 1940–50-х годах, когда люди были заинтересованы в эффективной передаче данных по очень ограниченным каналам. Предмет не только интересует вычисления - есть некоторые очень глубокие связи с энтропией и другой фундаментальной физикой. Например, оказывается, что идеально сжатые данные неотличимы от белого шума.