Для решения этой задачи нам нужно применить условие Фано и минимизировать длину кодов для букв, которые еще не определены. Условие Фано означает, что ни одно кодовое слово не является началом другого кодового слова. Известные коды: В – 0001, К – 0111, Ф – 1101, С – 1111.
Оставшиеся буквы: А, И, Т, Р, О. Нам нужно назначить им коды так, чтобы общее количество знаков для кодирования слова АВИАКАТАСТРОФА было минимальным.
Слово АВИАКАТАСТРОФА состоит из следующих букв и их количества:
Буква A встречается чаще всего (4 раза), поэтому ей нужно назначить самый короткий код. Следующими по частоте идут остальные буквы, которые встречаются по одному разу.
Чтобы минимизировать длину кодирования, назначим коды следующим образом:
Теперь у нас есть коды для всех букв:
Закодируем слово АВИАКАТАСТРОФА:
А – 0 (4 раза)
В – 0001 (1 раз)
И – 0010 (1 раз)
К – 0111 (1 раз)
Т – 0011 (1 раз)
С – 1111 (1 раз)
Р – 0100 (1 раз)
О – 0101 (1 раз)
Ф – 1101 (1 раз)
Длина закодированного слова: 4 * 1 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 = 4 + 8 * 4 = 4 + 32 = 36
Проверим, что условие Фано выполняется. Ни один из добавленных кодов не является началом другого добавленного кода, и ни один из добавленных кодов не является началом существующих.
Вычислим общую длину закодированного сообщения:
А (4 раза) = 4 * 1 = 4
В (1 раз) = 1 * 4 = 4
И (1 раз) = 1 * 4 = 4
К (1 раз) = 1 * 4 = 4
Т (1 раз) = 1 * 4 = 4
С (1 раз) = 1 * 4 = 4
Р (1 раз) = 1 * 4 = 4
О (1 раз) = 1 * 4 = 4
Ф (1 раз) = 1 * 4 = 4
Общая длина = 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 = 36
Ответ: 36