Как закодировать текст короче — и так, чтобы его можно было прочитать обратно. 11 класс, углублённый уровень — пара вторая.
Продолжаем тему «Алгоритмы сжатия данных». На прошлой паре было RLE — сжатие серий. Сегодня — коды, где частые буквы получают короткие кодовые слова, а редкие — длинные.
Это же — задание 4 ЕГЭ: кодирование и декодирование, условие Фано. Здесь хвост пары по программе и подготовка к экзамену совпадают.
У всех букв кодовые слова одной длины. Какая длина нужна на n букв?
Нужно наименьшее i, при котором 2i ≥ n. Пример: 5 букв.
Плюс равномерного кода — читать просто: режь поток по i бит. Минус — частая буква «А» стоит столько же, сколько редкая «Ъ».
Дадим частым буквам короткие слова: А = , Б =
,
В =
. Пришло
. Что это?
Код с условием Фано называют префиксным. Его поток читается слева направо однозначно, без разделителей.
Какое слово ещё можно добавить к А = , Б =
?
Перебираем слова по длине:
А = , Б =
, В =
, Г =
. Пришло
.
Строит префиксный код, при котором сообщение выходит самым коротким. Частоты: А — 5, Б — 2, В — 1, Г — 1.
Каждое слияние — новый уровень дерева: всем буквам под ним код удлиняется на один бит. Вес слияния — сколько раз эти буквы встречаются, то есть сколько бит добавилось ко всему сообщению.
Проверка по кодам того же дерева:
| буква | раз | код | бит |
|---|---|---|---|
| А | 5 | 5 · 1 = 5 | |
| Б | 2 | 2 · 2 = 4 | |
| В | 1 | 1 · 3 = 3 | |
| Г | 1 | 1 · 3 = 3 | |
| всего | 15 | ||
Тот же пример: 4 буквы, в сообщении 5 + 2 + 1 + 1 = 9 букв.
K — букв в сообщении, i — длина равномерного кода. Если частоты близки, дерево выходит ровным и выигрыша нет: Хаффман помогает там, где буквы встречаются по-разному часто.
Ошибся — сразу виден разбор, а «Новые числа» дают ту же задачу с другими данными. Отметка: закрыто 6 из 6 — «5», 5 — «4», 3 или 4 — «3».
Практикум «Код Хаффмана и условие Фано» — в общей папке и на сайте. Не успел на уроке — пройди дома: вариант будет другой, сдаётся тем же кодом.
Карточку в тетрадь можно взять с собой: на ней равномерный код, алгоритм Хаффмана, условие Фано, декодирование и формула выигрыша.