Задание 4.
Все заглавные буквы русского алфавита закодированы неравномерным двоичным кодом, в котором никакое кодовое слово не является началом другого кодового слова. Это условие обеспечивает возможность однозначной расшифровки закодированных сообщений. Кодовые слова для некоторых букв известны:
И – 00010, Н – 100, Ф – 11, О – 001, Р – 0000, М – 1010, А – 011, Т – 1011, К – 010.
Укажите возможный код минимальной длины для буквы Ю. Если таких кодов несколько, укажите тот из них, который имеет наименьшее числовое значение.
Главной особенностью этого задание является
"все заглавные буквы". Значит нужно оставить "
окошко" для этих букв (обозначим *)
Подсчитаем, сколько 5-ти буквенных обозначений "
закрывают" известные буквы.
Для пояснения заполним таблицу:
буква |
обозначение |
закрывают |
пояснение |
И |
00010 |
1 |
|
Н |
100 |
4 |
10000,10001,10010,10011 |
Ф |
11 |
8 |
11000,11001,11010,11011,
11100,11101,11110,11111 |
О |
001 |
4 |
|
Р |
0000 |
2 |
|
М |
1010 |
2 |
|
А |
011 |
4 |
|
Т |
1011 |
2 |
|
К |
010 |
4 |
|
всего |
|
31 |
|
Значит для продолжения есть только ОДНО пятибуквенное значение...
Легко видеть, что это 00011, которое требуется "раздвоить" на 000110 и 000111
Для Ю выберем наименьшее 000110, а для
"окошка" 000111
Такой способ не требует рисования дерева, что экономит время