Олимпиада по информатике
Ваня недавно открыл для себя азбуку Морзе, где каждую букву можно представить в виде двух сигналов длинного (тире) и короткого (точка). Но его беспокоит, что без использования разделителя между отдельными буквами одно и то же сообщение можно расшифровать несколькими способами, поэтому Ваня начал размышлять, как можно усовершенствовать данную систему кодировки букв.
Ваня узнал, что для однозначной расшифровки сообщения нужно, чтобы ни одна последовательность точек и тире для одной буквы не была началом другой последовательности для другой буквы. Вооружившись этой идеей и подсчитав, сколько раз каждый символ встречается в тексте, Ваня задумался: как придумать такие кодовые слова для символов, чтобы закодировать текст с минимальным количеством точек и тире? В таблице показано, сколько букв в тексте насчитал Ваня.
Помогите ему придумать для каждой буквы такую последовательность точек и тире, чтобы их суммарное количество, необходимое для кодирования текста, было минимальным. Обратите внимание: Ваня хочет, чтобы в дальнейшем данный текст можно было однозначно расшифровать.
а-100
б-90
в-25
г-11
о-10
у-5
п-9
р-15
Такие коды, у которых ни одно кодовое слово не является началом другого, называются префиксными. Способом нахождения таких кодов является алгоритм Хаффмана, пояндекси.
---------------
10/25/24