Сжатие
Введено| English | Значение |
|---|---|
| compression/kəmˈpreʃn/ | сжатие |
| lossless/ˈlɒsləs/ | без потерь |
| lossy/ˈlɒsi/ | с потерями |
| bandwidth/ˈbændwɪdθ/ | полоса пропускания |
| run-length encoding/rʌn leŋθ enˈkəʊdɪŋ/ | кодирование длин серий |
| dictionary coding/ˈdɪkʃənəri ˈkəʊdɪŋ/ | словарное кодирование |
| Huffman coding/ˈhʌfmən ˈkəʊdɪŋ/ | кодинг Хаффмана |
| spatial/ˈspeɪʃl/ | пространственное |
| temporal/ˈtempərəl/ | временное |
Три буквы, сделавшие веб возможным
- В 1987 году программист по имени Фил Кейт написал программу сжатия и поместил формат файла в общественное достояние. Он назвал его ZIP. Ему было 24 года.
- Ничто из работы веб-технологий не возможно без этой концепции. Одна uncompressed секунда видео в HD занимает около 187 МБ; двухчасовой фильм составил бы 1.3 терабайт. Передача его через домашнее соединение арифметически невозможна.
- Фильмы, которые вы смотрите, весят, возможно, тысячную долю этого объёма, и всё равно выглядят правильно, потому что сжатие удаляет то, на что ваш глаз никогда не обратил бы внимания.
- Этот урок посвящён сжатию: двум семействам, трём методам без потерь и тому, как обосновать применение одного для конкретного файла.
Сжатие без потерь и с потерями
- Сжатие уменьшает размер файла, экономит место на диске и полосу пропускания при передаче, ускоряя загрузки и потоковую передачу.
- Безпотерянное сжатие — это сжатие, из которого исходные данные могут быть восстановлены точно. ZIP и PNG являются безпотерянными.
- Потерянное сжатие навсегда удаляет часть данных, поэтому исходные данные невозможно восстановить. JPEG, MP3 и потоковое видео используют потерное сжатие.

Восстановить точно или сократить сильнее
Бесс Lossless сжатие означает:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Бесс Lossless сжатие позволяет восстановить исходные данные точно — необходимо для текста, программ и ZIP/PNG.
Соотнесите каждый тип сжатия с его значением.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Бесс Lossless сохраняет все биты (необходимо для текста/кода); с потерями жертвует качеством ради размера (фото, аудио).
Бесс Lossless сжатие точно восстанавливает исходные данные (необходимо для текста и программ), тогда как сжатие с потерями навсегда удаляет часть данных для уменьшения файла (используется для фото и аудио).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Поэтому программу или ZIP-архив нужно сжимать бесс Lossless, а фото или песню можно сжимать с потерями.
Решенный пример: обоснуйте выбор
- Компания архивирует свои бухгалтерские таблицы. Какой вид сжатия подходит и почему? Безпотерянное, поскольку таблицу необходимо восстановить точно; любое изменённое значение сделает отчёт неверным.
- Фотограф загружает отпускные снимки в галерею телефона. Потерянное, так как фотографии просматриваются на маленьком экране, где потерянные детали не заметны, а меньший размер файлов обеспечивает более быструю загрузку и экономит место.
- Назовите вид сжатия, затем дайте объяснение из описанной ситуации. Фраза «потерянное сжатие даёт меньший размер» сама по себе не является обоснованием.
Какой файл следует сжимать бесс Lossless?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Исходный код должен быть восстановлен точно — одна измененная буква может нарушить его работу — поэтому требуется бесс Lossless сжатие.
Длиннокодовая кодировка (RLE)
- Длиннокодовая кодировка (RLE) заменяет последовательность повторяющихся значений одним значением и счётчиком: вместо восьми одинаковых белых пикселей сохраняется «8, белый».
- Она отлично работает с данными, содержащими длинные серии повторов, такими как иконки, диаграммы, чёрно-белые сканы и области сплошного цвета.
- Она бесполезна и может сделать файл больше на шумных данных, таких как фотография, где почти нет двух соседних равных значений.

Каждая строка преобразуется в пары счётчиков и цветов
Кодирование длин серий лучше всего работает на данных, которые имеют:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
RLE заменяет серию одинаковых значений счетчиком и значением, поэтому он эффективен на однородных участках и бесполезен на шумных данных.
Разобранный пример: кодирование строки с помощью RLE
- Строка 8-пиксельного чёрно-белого изображения содержит: белый белый белый чёрный чёрный белый белый белый. Закодируйте её с помощью RLE.
- Три белых, два чёрных, три белых, то есть
3W 2B 3W, или в виде пар(3, 0) (2, 1) (3, 0), если белый обозначен как 0. - Восемь значений превратились в три пары. Теперь закодируйте
W B W B W B W B. Восемь серий по одному элементу:1W 1B 1W 1B 1W 1B 1W 1B, что занимает больше места, чем оригинал. Именно поэтому RLE не используется для фотографий.
Кодирование длин серий (бесс Lossless метод)
Кодирование длин серий заменяет серию повторяющихся значений одним значением и счетчиком. Это бесс Lossless — исходные данные восстанавливаются точно — но оно уменьшает только данные с длинными сериями.
Закодотируйте строку пикселей W W W B B W W W с помощью кодирования длин серий, используя формат 3W 2B 3W.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Три белых, два черных, три белых. Восемь значений превращаются в три пары, но чередующаяся строка стала бы восемью парами и увеличилась.
Кодирование длин серий всегда делает файл меньше.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
На данных без серий, таких как фотография или чередующийся узор, каждая серия имеет длину один, и кодирование хранит больше, чем оригинал.
Словарное кодирование и кодирование Хаффмана
- Словарное кодирование, используемое в ZIP и PNG, создаёт словарь повторяющихся последовательностей байтов и заменяет каждое вхождение коротким индексом. Оно подходит для текста и программного кода, где слова и паттерны повторяются.
- Кодирование Хаффмана присваивает короткие коды часто встречающимся символам и длинные коды редким, снижая среднюю длину кода. В слове "BANANA" буква A встречается чаще всего и получает самый короткий код.
- Оба метода безпотерянные: декодер восстанавливает исходные данные байт за байтом.
Код Хаффмана уменьшает размер путем:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Код Хаффмана присваивает самые короткие коды наиболее частым символам, снижая среднюю длину кода.
Соотнесите каждый метод без потерь с принципом его работы.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Все три метода являются без потерь: декодер восстанавливает исходные байты один к одному.
Потерянные методы
- Изображения (JPEG): убираются мелкие детали и различия в цвете, которые глаз едва замечает.
- Звук (MP3, AAC): убираются тона, которые мы плохо слышим, а также тихие звуки, маскируемые громкими в тот же момент времени.
- Видео: пространственное сжатие работает внутри каждого кадра, подобно JPEG, а временное сжатие хранит большинство кадров как лишь различия с предыдущим кадром, поскольку последовательные кадры практически идентичны.
Временная компрессия видео работает следующим образом:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Временная компрессия сохраняет, чем каждый кадр отличается от предыдущего, поскольку большая часть изображения остается неизменной между кадрами. (Пространственная компрессия обрабатывает детали внутри кадра.)
Разобранный пример: как сжимается каждый тип файла
- Текстовый файл: словарное кодирование и кодирование Хаффмана превращают повторяющиеся слова и часто встречающиеся символы в короткие коды. Он должен оставаться безпотерянным, поскольку изменение одного символа меняет смысл.
- Растровое изображение: RLE для серий одинаковых пикселей в иконках и диаграммах; потерное JPEG для фотографий; либо снижение глубины цвета или разрешения, что также является потерным методом.
- Векторная графика: список объектов рисования уже мал. Удалите ненужные объекты рисования, уменьшите количество десятичных знаков в координатах или примените безпотерянный метод, такой как ZIP, к файлу.
- Аудиофайл: потерное MP3 или AAC удаляет то, что ухо не слышит; снижение частоты дискретизации или разрядности также является потерным методом; безпотерянные форматы сохраняют каждый образец и сжимают значительно меньше.
Как можно уменьшить размер файла векторной графики? Выберите все подходящие варианты.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Векторный файл — это список объектов рисования, а не пикселей, поэтому у него нет глубины цвета. Глубина цвета относится к растровым изображениям.
Почему стриминг должен быть потерным
- Исходное HD-видео весит гигабайты в минуту, а домашнее соединение передаёт несколько мегабит в секунду.
- Безпотерянное сжатие видео даёт коэффициент около двух, чего недостаточно, поэтому изображение будет постоянно прерываться на буферизацию.
- Потерное сжатие даёт коэффициент сто и более за счёт удаления деталей, которые зритель не замечает при нормальном воспроизведении. Обоснование указывает на полосу пропускания и скорость передачи данных, а не просто на «меньший размер».
Почему для потокового вещания видео в реальном времени используется компрессия с потерями?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Сырое HD-видео занимает гигабайты в минуту; только компрессия с потерями уменьшает его достаточно для потоковой передачи в реальном времени без зависаний.
Потерянные баллы
- Безпотерянное означает точное восстановление исходных данных; потерное означает, что это невозможно. Формулировка «потерное снижает качество» упускает суть: данные исчезают навсегда.
- RLE может сделать шумный файл больше. Укажите, где он работает, а где нет.
- Сжатие видео является пространственным и временным; временное сохраняет различия между кадрами.
- Ответ типа «обосновать» связывает метод с назначением файла: точность для счетов и медицинских снимков, размер для стриминга и галерей телефонов.
Вы поняли
- Сжатие экономит место хранения и полосу пропускания; безпотерянное восстанавливает исходники точно, потерянное навсегда удаляет данные
- Методы безпотерянного сжатия: RLE (значение и счётчик, хорошо для серий, плохо для шума), словарное кодирование (повторяющиеся последовательности заменяются короткими индексами), кодирование Хаффмана (короткие коды для частых символов)
- Потерные методы удаляют то, что видит или слышит человек; видео добавляет пространственное сжатие внутри кадра и временное между кадрами
- Обосновывать через использование: точные данные требуют безпотерянного сжатия, ограниченная полоса пропускания при стриминге требует потерного