Срочно нужна помощь! По каналу связи передаются сообщения, каждое из которых содержит 10 букв А, 5 букв Б, 20 букв В и 5 букв Г
Срочно нужна помощь! По каналу связи передаются сообщения, каждое из которых содержит 10 букв А, 5 букв Б, 20 букв В и 5 букв Г (других букв в сообщениях нет). Каждую букву кодируют двоичной последовательностью. При выборе кода учитывались два требования: а) ни одно кодовое слово не является началом другого (это нужно, чтобы код допускал однозначное декодирование); б) общая длина закодированного сообщения должна быть как можно меньше. Какой код из приведённых ниже следует выбрать для кодирования букв А, Б, В и Г? 1) А:1, Б:01, В:001, Г:111 2) А:00, Б:01, В:10, Г:11 3) А:0, Б:10, В:11, Г:111 4) А:10, Б:111, В:0, Г:110
4)</span> ✔ префиксный длина А: 2, длина Б: 3, длина В: 1, длина Г: 3 Длина сообщения: 10 * 2 + 5 * 3 + 20 * 1 + 5 * 3 = 20 + 15 + 20 + 15 = 70 бит
Наиболее оптимальный код 4).
Если бы нужно было бы найти какое-нибудь оптимальное префиксное кодирование, можно было бы построить код Хаффмана. Выписываем частоты символов, а затем объединяем наименее часто встречающиеся символы, почлучая кодовое дерево.
А - 10, Б - 5, В - 20, Г - 5 А - 10, (БГ) - 10, В - 20 (А(БГ)) - 20, В - 20 (В(А(БГ)) - 40
Если в этой записи есть (XY), то к коду любой буквы из X приписываем слева 0, для любого символа из Y - 1. Начинаем с пустых кодов: (БГ) -> Б: 0, Г: 1 (А(БГ)) -> А: 0, Б: 10, Г: 11 (В(А(БГ)) -> В: 0, А: 10, Б: 110, Г: 111.