🔍 КАК ЭТО УСТРОЕНО

Почему файлы можно сжать — и есть ли предел

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

Ты кидаешь огромную папку в архиватор — и она вдруг становится в три раза легче. Файл не изменился: открой его обратно, и всё на месте, ни одной потерянной буквы. Куда же делись эти мегабайты? И почему нельзя ужать вообще что угодно до одного байта?

В файлах полно повторов

Главный секрет сжатия прост: в большинстве файлов очень много лишнего. Не в смысле «ненужного», а в смысле предсказуемого. Текст, картинки, музыка — почти всё, что мы храним, набито повторами и закономерностями.

Представь строчку: «ааааааааааа» — двенадцать букв «а» подряд. Зачем хранить двенадцать символов, если можно записать короче: «12 раз а»? Получилось четыре символа вместо двенадцати, а развернуть обратно — пара пустяков. Вот это и есть сжатие в чистом виде: ты не выбрасываешь информацию, ты записываешь её умнее.

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

Частые вещи — короткими значками

Есть и второй приём, не менее хитрый. Подумай, как мы сокращаем в жизни: самое частое слово получает самое короткое имя. «Мама» короче, чем «двоюродная тётя по отцовской линии», — и это удобно, потому что маму мы зовём чаще.

Компьютеры делают так же. Если в файле буква «о» встречается на каждом шагу, а «ъ» — раз в сто лет, нет смысла тратить на них одинаковое количество битов. Частым символам выдают короткий код, редким — длинный. В сумме файл худеет, хотя ни одна буква не потерялась.

Сжатие — это не магия и не «удаление воздуха». Это перевод информации на язык, где частое и предсказуемое записывается коротко, а редкое и неожиданное — длинно.

Именно поэтому идеально случайный файл сжать почти нельзя. Если в нём нет ни повторов, ни любимых символов, ни закономерностей — экономить не на чем. Хаос несжимаем.

Два вида сжатия: без потерь и с потерями

Тут важно различать два мира.

  • Сжатие без потерь — это ZIP, RAR, PNG, форматы для текста и программ. После распаковки файл совпадает с оригиналом до последнего бита. Иначе и нельзя: представь, что архиватор «слегка округлил» твой код или банковскую таблицу — катастрофа.
  • Сжатие с потерями — это JPEG для фото, MP3 для музыки, видео на твоём телефоне. Здесь файл намеренно упрощают: выбрасывают то, что человек всё равно почти не заметит.

Почему с потерями выходит ужать сильнее? Потому что наши глаза и уши несовершенны. Ты не различишь два чуть-чуть разных оттенка синего и не услышишь тихий звук рядом с громким. JPEG и MP3 этим пользуются нагло: они выкидывают детали, которые ты физически не способен заметить. Поэтому фотография ужимается в десятки раз, а текст — хорошо если в два-три. С текстом-то нельзя «слегка ошибиться».

А предел-то есть

Теперь главный вопрос: можно ли сжимать бесконечно? Нет. И это не лень программистов, а строгий закон.

Ещё в 1948 году математик Клод Шеннон придумал, как измерять количество информации. Он ввёл понятие энтропии — это, грубо говоря, мера непредсказуемости. Чем больше в данных неожиданности, тем больше в них настоящей информации и тем меньше их можно ужать. У каждого файла есть свой «информационный минимум»: размер, ниже которого его не сжать без потерь в принципе, какой бы гениальный алгоритм ты ни придумал.

Есть и простое доказательство «на пальцах». Допустим, нашёлся бы волшебный архиватор, который любой файл делает хоть на байт меньше. Тогда сжатый файл можно сжать ещё раз, и ещё, и так до одного байта. Но одним байтом можно записать всего 256 разных значений — а файлов на свете бесконечно много. Невозможно затолкать миллион разных вещей в 256 ящиков так, чтобы потом каждую достать обратно. Значит, какие-то файлы сжать просто нельзя — место для всех не найдётся.

Именно поэтому уже сжатый архив почти не сжимается второй раз, а JPEG, закинутый в ZIP, не худеет ни на грамм: всё лишнее из него уже выжали. Архиватор честно посмотрел на файл, не нашёл повторов и закономерностей — и развёл руками.

Так почему же файлы сжимаются

Если собрать всё вместе, ответ красивый. Файлы сжимаются потому, что в них полно предсказуемого: повторов, частых символов, плавных переходов цвета и звука. Сжатие — это умение увидеть эту предсказуемость и записать её коротко.

А предел есть потому, что в данных всегда остаётся ядро настоящей, неожиданной информации — её-то ужать уже не выйдет. Сжатие выдавливает воду, но не может выпарить сам смысл. И в этом, если вдуматься, есть что-то честное: компьютер может упаковать что угодно ровно до той точки, где начинается то, ради чего файл вообще существует.

#архивы#информация#как это устроено#сжатие#энтропия
Понравилась статья?
В Telegram-канале — лучшее из журнала и анонсы новых учебников.