1) Слово МАГИЯ состоит из 5 букв. Используем известные коды и дополним для остальных букв, чтобы получить наименьшую длину:
- М
- А (010)
- Г (100)
- И
- Я
Для букв М, И, Я нам нужно подобрать коды. По условию, у нас есть 7 букв: А, Б, Г, И, М, Р, Я. Известные коды: А — 010, Б — 011, Г — 100. Это означает, что для остальных букв нужно выбрать коды, которые не будут началом уже существующих кодов (это называется условием Фано).
Известные префиксы: 010, 011, 100.
Нам нужно закодировать 4 оставшиеся буквы (И, М, Р, Я). Можно использовать коды длиной 2, например:
- Р = 00
- М = 10
- И = 11
- Я = 01
Но для слова МАГИЯ нужны только М, А, Г, И, Я. Код для Р не нужен. Так как в условии не сказано, что все 7 букв должны иметь коды, а только для слова МАГИЯ, будем использовать свободные коды. Мы можем использовать короткие коды для букв, которые встречаются в слове МАГИЯ.
Если считать, что нам нужно использовать существующие коды и дополнить остальные:
Свободные ветви: 00, 11, 101, 01.
Коды, которые уже используются: А (010), Б (011), Г (100).
Мы можем взять коды для И, М, Я из свободных, самых коротких, соблюдая условие Фано:
- М = 00 (длина 2)
- И = 11 (длина 2)
- Я = 101 (длина 3, так как 10 уже занято префиксом 100)
Тогда коды для слова МАГИЯ:
М — 00
А — 010
Г — 100
И — 11
Я — 101
Длина слова МАГИЯ: $2 + 3 + 3 + 2 + 3 = 13$
2) Слово ВОДОВОРОТ состоит из 9 букв. Буквы: В, О, Д, О, В, О, Р, О, Т.
Используемые буквы: В, О, Д, Р, Т.
Известные коды: Б — 01, Д — 001, Р — 100.
Всего букв в алфавите: А, Б, В, Д, О, Р, Т.
Свободные ветви: 000, 101, 11.
Нам нужно закодировать 4 оставшиеся буквы (А, В, О, Т), соблюдая условие Фано, используя свободные коды:
- А = 000
- В = 101
- О = 110
- Т = 111
Коды для слова ВОДОВОРОТ:
В — 101
О — 110
Д — 001
О — 110
В — 101
О — 110
Р — 100
О — 110
Т — 111
Длина слова ВОДОВОРОТ: $3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 = 27$ (каждый символ по 3 бита, 9 символов)
3) Слово КАСАТКА состоит из 7 букв: К, А, С, А, Т, К, А.
Используемые буквы: К, А, С, Т.
Известные коды: Н — 11, С — 101.
Всего букв: А, Т, К, С, Н.
Допущение: Так как для букв А, Т, К коды неизвестны, а для Н, С известны, то мы должны их подобрать из свободных, чтобы минимизировать общую длину. Буквы А, Т, К должны иметь коды, не начинающиеся с 11 и 101.
Для букв А, Т, К можем использовать:
- А = 0
- Т = 100
- К = 110
Но нам нужно минимизировать длину, поэтому используем самые короткие доступные коды:
- А = 0 (длина 1)
- Т = 100 (длина 3)
- К = 10 (длина 2)
Коды для слова КАСАТКА:
К — 10 (2)
А — 0 (1)
С — 101 (3)
А — 0 (1)
Т — 100 (3)
К — 10 (2)
А — 0 (1)
Длина слова КАСАТКА: $2 + 1 + 3 + 1 + 3 + 2 + 1 = 13$
4) Всего 6 букв: А, В, С, D, Е, F. Известные коды: А — 11, В — 101, С — 0.
Для D, E, F нужно подобрать коды.
Свободные ветви: 100, 110, 111.
Нам нужно минимизировать суммарную длину. Для D, E, F можем использовать:
- D = 100 (3)
- E = 110 (3)
- F = 111 (3)
Суммарная длина всех кодовых слов: $2 + 3 + 1 + 3 + 3 + 3 = 15$
5) Всего 10 букв: А, Б, Е, И, К, Л, Р, С, Т, У.
Известные коды: А — 00, Е — 010, И — 011, К — 1111, Л — 1101, Р — 1010, С — 1110, Т — 1011, У — 100.
Для буквы Б нужно найти кратчайшее кодовое слово. Используем дерево кодов.
Известные префиксы: 00, 010, 011, 1111, 1101, 1010, 1110, 1011, 100.
Свободные ветви:
0
00
01
010
011
1
10
100
101
1010
1011
11
110
1101
1110
1111
Наиболее короткие свободные префиксы для ветви 1:
- 101
- 1100
Из ветви 0:
- Нет свободных кодов, так как 00, 010, 011 уже заняты.
Рассмотрим все свободные префиксы:
- 101 (длина 3)
**Ответ:**
1) **13**
2) **27**
3) **13**
4) **15**
5) **101**