"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Свертывание информации уменьшает объём данных, устраняя повторы, закономерности и другие избыточные элементы. Оно используется при архивации файлов, хранении изображений, звука и видео. Одни методы позволяют полностью восстановить исходные данные, другие удаляют малозаметные детали. Главное — выбрать способ, соответствующий типу информации и требуемой точности восстановления.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Избыточность информации — наличие в сообщении повторов и закономерностей, которые можно использовать для уменьшения объёма записи. Например, длинную серию одинаковых символов не всегда нужно хранить посимвольно. Поиск избыточности помогает понять, какой способ свертывания даст результат.
Сжатие без потерь — свертывание информации, при котором исходные данные полностью восстанавливаются. После распаковки текст, программа или таблица должны совпадать с исходными данными. Такой способ нужен там, где изменение хотя бы одного символа недопустимо.
Сжатие с потерями — свертывание, при котором часть исходной информации удаляется ради значительного уменьшения объёма. Обычно убирают детали, которые человек воспринимает хуже или почти не замечает. Этот подход позволяет экономить место, но не даёт точной обратной реконструкции.
Коэффициент сжатия — отношение объёма исходного сообщения к объёму сжатого: K = Vисх / Vсж. Чем больше K, тем сильнее уменьшен файл. При K = 1 объём не изменился, а значение меньше единицы означает, что служебные сведения сделали запись больше.
Повторяемость создаёт возможность записать данные короче: вместо множества одинаковых элементов можно сохранить один элемент и число его повторений. Предсказуемость тоже уменьшает объём, потому что часть данных можно восстановить по правилу или уже известному фрагменту. Неравномерное распределение символов означает, что одни символы встречаются намного чаще других, поэтому всем символам невыгодно выделять коды одинаковой длины.
При кодировании повторяющихся последовательностей программа ищет серии одинаковых элементов и заменяет каждую компактным описанием, например символом и длиной серии. Для строки AAAAA можно записать A5, если формат записи заранее определён. Метод особенно эффективен при длинных сериях, поскольку одно описание заменяет много одинаковых символов. Если серии короткие, числа и разделители могут съесть выгоду.
Частотное кодирование сначала подсчитывает, как часто встречается каждый символ. Частым символам назначают короткие двоичные коды, а редким — более длинные, поэтому средняя длина сообщения уменьшается. Чтобы последовательность кодов можно было разделить обратно, коды составляют с учётом однозначного декодирования, например так, чтобы один код не являлся началом другого.
Для сжатия без потерь декодер должен для каждого сжатого сообщения однозначно получать единственный исходный вариант. Поэтому вместе с данными хранят таблицу кодов, словарь или описание правил, по которым выполняется распаковка. Проверить обратимость можно мысленно или программно: закодировать данные, декодировать их и сравнить результат с исходной последовательностью. Даже одна ошибка в коде или границе символов нарушает восстановление.
Сжатие с потерями применяют к изображениям, звуку и видео, потому что эти данные содержат детали, малозаметные человеку или маскируемые соседними элементами. У изображения могут удаляться тонкие цветовые различия, в звуке — плохо слышимые частоты, а в видео — некоторые повторяющиеся изменения. После этого файл становится намного меньше, но исходное содержимое уже не возвращается точно. Для программ и текстовых документов такой подход неприемлем: небольшая потеря может изменить команду, число или смысл.
| Метод | Основная идея | Можно ли полностью восстановить исходные данные | Типичные области применения | Преимущества и ограничения |
|---|---|---|---|---|
| Кодирование повторов | Замена серии символом и числом повторений | Да | Изображения с большими одноцветными областями, простые последовательности | Просто и быстро; плохо работает при коротких и редких сериях |
| Частотное кодирование | Короткие коды частым символам, длинные — редким | Да | Тексты, сообщения, двоичные последовательности | Учитывает статистику; требует таблицы кодов и однозначного декодирования |
| Словарное кодирование | Замена повторяющихся фрагментов ссылками на словарь | Да | Тексты, документы, архивы | Хорошо использует повторяющиеся фразы; словарь занимает дополнительное место |
| Сжатие с потерями | Удаление малозаметных деталей | Нет | Фотографии, музыка, видео | Даёт большой выигрыш; качество зависит от степени потерь |
| Архивация данных | Объединение файлов и их обратное сжатие | Обычно да | Резервные копии, передача и хранение документов | Сохраняет точность; результат зависит от исходной избыточности |
Таблицу удобно использовать в два этапа: сначала определить, допустимы ли потери, а затем сравнить структуру данных с основной идеей метода. Отдельно учитывайте служебные сведения — таблицы кодов, словари и описания серий, поскольку они влияют на реальный коэффициент сжатия.
Нужно свернуть без потерь строку AAAAAABBBCCAAAA записью повторов и определить коэффициент сжатия. Будем считать, что серия записывается как символ и число повторений, а исходный объём измеряется количеством символов.
Ответ: свернутая запись — A6B3C2A4, коэффициент сжатия равен 1,875. В реальном файле нужно было бы дополнительно учесть формат чисел и разделители.
Пусть сообщение имеет частоты: A — 8, B — 4, C — 2, D — 1. Требуется составить таблицу частот, назначить короткие коды и показать, почему сообщение можно декодировать.
Ответ: таблица может иметь вид A — 0, B — 10, C — 110, D — 111. Принцип сжатия состоит в том, что многочисленные появления A занимают по одному биту, а редкие символы получают более длинные записи.
Нужно выбрать метод для текстового документа, фотографии и музыкальной записи. Главный вопрос — можно ли изменить данные и всё равно сохранить их назначение.
Ответ: документ — без потерь, фотография — чаще с потерями, музыкальная запись — чаще с потерями. Окончательный выбор зависит от цели хранения и допустимого ухудшения качества.
Любое уменьшение считают сжатием без потерь. Маленький файл может быть получен удалением данных, поэтому исходный объект не восстановится. Проверьте себя распаковкой и сравнением исходного и восстановленного файлов.
Не учитывают служебную информацию. Таблица кодов, словарь и длины серий тоже занимают место, поэтому простое сравнение записанных символов бывает неверным. При вычислении коэффициента включайте в объём весь сжатый файл.
Короткие коды дают редким символам. Тогда частые символы занимают много места и главное преимущество метода теряется. Сначала составьте таблицу частот и убедитесь, что средняя длина кодов уменьшилась.
Сжатие с потерями применяют к тексту или программе. Ошибку допускают, перенося опыт с фотографий на данные, где важен каждый бит. Проверьте назначение файла: если изменение символа или команды недопустимо, используйте только обратимый метод.
До изучения темы нужны двоичное кодирование, понятие объёма информации и способы представления текста, изображения и звука в компьютере. Эти знания объясняют, что именно занимает место в файле.
Дальше методы свертывания помогут понять работу архиваторов и форматов ZIP, PNG, JPEG, MP3 и MPEG. Одни из них сохраняют данные точно, другие используют особенности восприятия человека.
Тема связана с вероятностными методами, алгоритмами кодирования, передачей данных по сетям и оценкой эффективности алгоритмов. Везде приходится сопоставлять объём, скорость, качество и надёжность восстановления.
Почему нельзя одинаково хорошо сжать любой файл?
Файлы имеют разную структуру и разную степень избыточности. Если в данных почти нет повторов и закономерностей, обратное сжатие даст небольшой результат или вообще увеличит объём из-за служебной информации.
Чем сжатие без потерь отличается от сжатия с потерями?
При сжатии без потерь исходные данные восстанавливаются побитно. При сжатии с потерями часть информации удаляется, поэтому восстановленный объект отличается от исходного.
Почему архивирование уже сжатого файла почти не уменьшает его размер?
Эффективное сжатие уже убрало большую часть повторов и закономерностей. Повторная обработка не находит достаточно избыточности, а служебные данные нового архива могут даже немного увеличить размер.
Как понять, какой метод свертывания подходит для конкретного типа данных?
Нужно определить, допустима ли потеря информации, и оценить структуру данных. Для программ и документов выбирают методы без потерь, а для фотографий, звука и видео иногда применяют сжатие с потерями.
Можно ли восстановить исходное изображение после сжатия с потерями?
Точно восстановить исходное изображение нельзя: удалённые детали уже не хранятся. Можно получить только изображение, похожее на исходное, причём степень отличия зависит от выбранных настроек.
§ 5. Методы свертывания информации