Помогите решить перфиксный код.

0 голосов
22 просмотров

Помогите решить перфиксный код.


image

Информатика (78 баллов) | 22 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Префиксное кодирование означает, что ни одно кодовое слово не является началом (префиксом) другого кодового слова.

В строке BADECDACBEDADCEB 3 буквы A, 3 буквы B, 3 буквы C, 4 буквы D, 3 буквы E. На кодирование букв B и C отводится по 2 бита, на букву E - 3 бита. Тогда всего на эти буквы ушло 3 * 2 + 3 * 2 + 3 * 3 = 21 бит, значит, на буквы A и D отводится 38 - 21 = 17 бит.

Пусть на кодирование буквы A уходит A бит, длина кодового слова для буквы D равна D. Тогда 3A + 4D = 17.

4D - четное число, чтобы сумма 3A + 4D была нечетной, A должно быть нечётным. A не может быть равно 1 или 5, тогда D не целое. Если A = 3, то D = 2. Если A >= 7, то D < 0. Значит, A = 3 и D = 2.

Кодов из двух битов есть 4: 00, 01, 10, 11. Второй и третий не подходят, так как это коды для других букв, первый - префикс для кода E. Остается один незанятый вариант для D - это 11.

Коды из трёх символов не могут начинаться с 01, 10 и 11 - это занятые коды. Значит, код для А начинается с 00. 000 уже занято, поэтому единственный вариант - 001.

Ответ. A: 001, D: 11.

(148k баллов)