ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Однозначное кодирование и условие Фано.
| КЭС: | 2.1 Двоичное кодирование. Равномерные и неравномерные коды. Декодирование сообщений, записанных с помощью неравномерных кодов. Условие Фано. Построение однозначно декодируемых кодов с помощью дерева |
| Тип ответа: | Краткий ответ |
Ответ: 14
Известные коды: Р → 0101; Н → 011. Начальные нули являются частью кодового слова и не отбрасываются.
Условие Фано запрещает два случая: новый код является началом уже известного или известный код является началом нового. Изобразим возможные записи мысленно как двоичное дерево: ребро 0 ведёт влево, ребро 1 вправо. Известный код занимает вершину вместе со всеми её продолжениями; его предки также не могут стать кодами других букв.
После исключения занятых ветвей остаются свободные начала: 00, 0100, 1. Это самые короткие корни полностью свободных ветвей. Их можно получить обходом дерева: если текущая строка уже является известным кодом, её ветвь закрыта; если она не совпадает с началом ни одного известного кода, вся ветвь свободна; иначе проверяем два продолжения, добавляя 0 и 1. Такой обход охватывает все допустимые новые коды.
Кодируем слово КАНАДКА. Для неизвестных кодов частоты букв равны: А: 3, Д: 1, К: 2. Длина сообщения равна сумме произведений частоты буквы на длину её кода. Символы с частотой 0 всё равно должны иметь код: весь заданный алфавит обязан удовлетворять условию Фано.
Обозначим F(d, S) минимальную стоимость размещения набора букв S внутри полностью свободной ветви, начало которой имеет длину d. Стоимость — сумма «вес буквы × полная длина кода». Для пустого набора F(d, ∅) = 0; для единственной буквы a имеем F(d, {a}) = d · wₐ: ей отдаём корень свободной ветви.
Если букв две или больше, разделяем их на два непустых набора T и S ∖ T и добавляем к началу соответственно 0 и 1. Общая формула: F(d, S) = min [F(d + 1, T) + F(d + 1, S ∖ T)] по всем таким разделениям. Одну занятую дочернюю ветвь можно поднять к родителю, уменьшив длины, поэтому для поиска минимума достаточно этих разветвлений. Формула заканчивается на одноэлементных наборах и перебирает все существенные формы дерева.
Для нескольких свободных ветвей обозначим через Gⱼ(S) минимум после первых j ветвей. Изначально доступен только пустой набор со стоимостью 0. При добавлении ветви глубины d проверяем все T ⊆ S и выбираем минимум Gⱼ₋₁(S ∖ T) + F(d, T). Это учитывает и неиспользованную ветвь, когда T пуст. Порядок наборов в следующих строках: ∅, А, Д, АД, К, АК, ДК, АДК.
Таблица минимальной стоимости для каждого набора:
После ветви 00: 0, 6, 2, 12, 4, 15, 9, 21.
После ветви 0100: 0, 6, 2, 10, 4, 14, 8, 19.
После ветви 1: 0, 3, 1, 5, 2, 7, 4, 11.
Получен минимум для неизвестных кодов: 11. Он достижим, например, при назначении:
А: код 1, длина 1, вес 3; вклад = 3 · 1 = 3.
Д: код 0100, длина 4, вес 1; вклад = 1 · 4 = 4.
К: код 00, длина 2, вес 2; вклад = 2 · 2 = 4.
Вклад известных кодов: 0 · 4 + 1 · 3 = 3.
Код слова по буквам: 00 | 1 | 011 | 1 | 0100 | 00 | 1.
Искомая длина = 3 + 11 = 14.
Проверка: все назначенные слова лежат в свободных ветвях; внутри каждой ветви они являются разными листьями, поэтому условие Фано выполнено и между новыми кодами, и со старыми. Сумма вкладов соответствует найденному минимуму. Таблица перебрала все распределения между свободными ветвями, а рекурсия — все разветвления внутри них, поэтому меньшая стоимость невозможна.
Ответ: 14.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF5AD895.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.