ИнформатикаЗадание 4
ЕГЭ 2027 по информатике
Задание 4. Коды и условие Фано
- Первая часть
- краткий ответ: число или слово
- 1 первичный балл
- 14 задач в задачнике
Задачи проверяются сразу, ответ и разбор открываются после решения. Нужна бесплатная регистрация, урок этого номера открыт бесплатно.
Теория
Как узнать: буквы кодируются двоичными кодовыми словами разной длины, и код удовлетворяет условию Фано: никакое кодовое слово не является началом другого. Для части букв коды известны, нужно подобрать коды остальным: кратчайшие, или с наименьшей суммой длин, или с наименьшим числовым значением.
Зачем условие Фано
Если код А = 0, а Б = 01, то сообщение «01» непонятно: это Б или А, а потом что-то ещё? Условие Фано гарантирует, что сообщение читается однозначно: как только прочитано кодовое слово целиком, понятно, какая это буква.
Дерево кодов
Коды удобно рисовать деревом: от корня влево ветка 0, вправо ветка 1. Каждое кодовое слово это путь от корня. Условие Фано значит, что кодовые слова стоят только в листьях: ниже занятой вершины ничего ставить нельзя, и сама занятая вершина не может лежать на пути к другому слову.
Пример: известно А = 101, Б = 00. Свободные ветки: 01, 11 и 100. Трём новым буквам дадим 01, 11 и 100: сумма длин 2 + 2 + 3 = 7. Меньше нельзя: коротких свободных веток длины 1 нет.
Перебор программой
Когда букв больше или условие хитрое, переберём кандидатов программой. Сначала все двоичные слова длиной до 6, потом рекурсивно выбираем слова для оставшихся букв так, чтобы ни одно не было началом другого:
s.startswith(c)проверяет, начинается ли слово s с c. Проверяем в обе стороны.- Перебор начинается с
i + 1: так один и тот же набор слов не перебирается в разном порядке. - Остановка «уже хуже найденного» сильно ускоряет поиск.
Кратчайшее слово для одной буквы
Если нужен код только для одной буквы, а остальные известны, достаточно взять первое подходящее слово из списка кандидатов: они идут по длине, а внутри одной длины по возрастанию числового значения.
Примеры заданий
Пример 1. Условие Фано, вариант 1
Для кодирования букв А, Б, В, Г, Д, Е используется неравномерный двоичный код, удовлетворяющий условию Фано (никакое кодовое слово не является началом другого). Известны коды: А = 01, Б = 10, В = 11. Какова наименьшая возможная сумма длин кодовых слов букв Г, Д, Е?
Пример 2. Условие Фано, вариант 2
Для кодирования букв А, Б, В, Г, Д используется двоичный код, удовлетворяющий условию Фано. Известны коды: А = 00, Б = 1011, В = 1101, Г = 1110. Укажи кратчайшее кодовое слово для буквы Д. Если таких несколько, укажи слово с наименьшим числовым значением.
Пример 3. Условие Фано, вариант 3
Для кодирования букв А, Б, В, Г, Д используется двоичный код, удовлетворяющий условию Фано. Известны коды: А = 11, Б = 0000, В = 0111, Г = 010. Укажи кратчайшее кодовое слово для буквы Д. Если таких несколько, укажи слово с наименьшим числовым значением.