Постройте дерево Хаффмана для одной из следующих фраз:
- МАМА МЫЛА РАМУ
- ШЛА САША ПО ШОССЕ
- ТКЁТ ТКАЧ ТКАНИ
- КАРЛ У КЛАРЫ УКРАЛ КОРАЛЛЫ
Берём фразу
Частоты:
| Символ | М | А | ␣ | Ы | Л | Р | У |
|---|---|---|---|---|---|---|---|
| Частота |
Проверка:
Построение дерева. Каждый раз объединяем два узла с наименьшими весами:
- Ы(
) + Л( ) → узел с весом . - Р(
) + У( ) → узел с весом . - ␣(
) + ( ) → узел с весом . ( ) + М( ) → узел с весом . - А(
) + ( ) → узел с весом . ( ) + ( ) → корень с весом .
Ветвь влево помечаем
Дерево (корень,
→ ( ): → М → ( ): → Р, → У
→ ( ): → А → ( ): → ␣ → ( ): → Ы, → Л
Коды:
| Символ | М | А | ␣ | Р | У | Ы | Л |
|---|---|---|---|---|---|---|---|
| Код |
Кодирование фразы:
Длина:
При равномерном коде по
Метод Хаффмана даёт префиксный код: чем чаще символ, тем короче его код. Ни один код не является началом другого, поэтому сообщение декодируется однозначно.
Коды: М —
Фраза «МАМА МЫЛА РАМУ» кодируется
Вспомните язык программирования высокого уровня, с которым вы познакомились в основной школе. Охарактеризуйте его алфавит, синтаксис и семантику.
Возьмём язык Python.
Алфавит — набор допустимых символов языка:
- буквы латинского алфавита (в строках и комментариях допустимы и русские буквы), знак подчёркивания;
- цифры
– ; - знаки операций:
, , , , , , , , , , и др.; - разделители и скобки: ( ), [ ], { }, запятая, двоеточие, точка;
- пробелы и переводы строки (отступы в Python важны).
Синтаксис — правила записи конструкций языка:
- имена переменных состоят из букв, цифр и подчёркивания и не начинаются с цифры; регистр важен (a и A — разные имена);
- служебные слова (if, else, while, for, def и т. д.) нельзя использовать как имена;
- блоки команд выделяются двоеточием и одинаковым отступом, например:
if a > b:и на следующей строке с отступомprint(a); - присваивание:
x =; ввод:a = int(input()); вывод:print(a); - нарушение правил даёт синтаксическую ошибку (SyntaxError), и программа не запускается.
Семантика — смысл конструкций, то есть то, что делает компьютер:
x = x +вычисляет правую часть и записывает результат в переменную x, то есть увеличивает x на; ifвыполняет блок только при истинном условии;whileповторяет блок, пока условие истинно;/даёт вещественное деление,//— целую часть,%— остаток;- тип переменной определяется значением (int, float, str, bool);
- смысловая ошибка (например, деление на ноль или неверная формула) не мешает запуску, но даёт неверный результат или сбой во время работы.
Алфавит определяет, из каких символов можно писать программу, синтаксис — как правильно из них составлять конструкции, семантика — какой смысл и действие имеет каждая корректно записанная конструкция.
Язык Python.
Алфавит: латинские буквы, цифры, знаки операций, скобки и разделители, пробелы и отступы.
Синтаксис: правила имён, служебные слова, блоки через двоеточие и отступ, формы команд присваивания, ввода и вывода.
Семантика: смысл команд, например присваивание, ветвление и циклы, типы данных, результат операций.
