Задание №4 — Префиксные коды, условие Фано
По каналу связи передаются сообщения, содержащие только буквы из набора: Д, И, К, Л, Я. Для передачи используется двоичный код, удовлетворяющий условию Фано. Это условие обеспечивает возможность однозначной расшифровки закодированных сообщений. Кодовые слова для некоторых букв известны: Д — 1, Я — 011. Для трёх оставшихся букв И, К и Л кодовые слова неизвестны. Какое количество двоичных знаков потребуется для кодирования слова ИДИЛЛИЯ, если известно, что оно закодировано минимально возможным количеством двоичных знаков?
Правильный ответ
18
Пояснение
Решение:
Известно: Д — 1, Я — 011.
Кодовое слово Д — 1 занимает всю ветвь, начинающуюся с единицы, поэтому буквы И, К и Л кодируются словами, начинающимися с 0. В этой ветви слово 011 занято буквой Я, свободны вершины 00 и 010. Свободных мест два, а букв три, поэтому одну вершину придётся разбить надвое.
В слове ИДИЛЛИЯ буква И встречается 3 раза, Л — 2 раза, Д — 1 раз, Я — 1 раз, а буква К не встречается ни разу, значит именно ей выгодно отдать длинное слово.
Самую короткую свободную вершину 00 отдаём самой частой букве И, а вершину 010 разбиваем на 0100 и 0101 для букв Л и К:
| Буква | Кодовое слово | Длина | Сколько раз | Всего знаков |
|---|---|---|---|---|
| И | 00 | 2 | 3 | 6 |
| Д | 1 | 1 | 1 | 1 |
| Л | 0100 | 4 | 2 | 8 |
| Я | 011 | 3 | 1 | 3 |
| К | 0101 | 4 | 0 | 0 |
Суммарно двоичных знаков.
Если разбить вместо этого вершину 00 (И — 000, К — 001, Л — 010), получится знаков — хуже.
Ответ: 18