Пример кодирования информации
Кодирование — это представление информации с помощью знаков выбранного алфавита по определённому правилу. В задачах важно правильно определить, какие символы кодируются, сколько знаков содержит алфавит и какова длина сообщения.
Основные понятия
Алфавит — конечное множество символов, которые используются для записи сообщений. Например, русский алфавит содержит 33 буквы, десятичный алфавит — 10 цифр, а двоичный алфавит — два символа: 0 и 1. С мощностью алфавита можно подробнее познакомиться на странице «Мощность алфавита».
Кодирование — переход от исходного представления информации к представлению с помощью другого алфавита. Код — правило, по которому исходным символам, словам или сообщениям ставятся в соответствие кодовые обозначения.
Если каждый символ сообщения заменяется кодом одинаковой длины, говорят о равномерном коде. Если длины кодов различаются, код называется неравномерным. Для неравномерных кодов важно проверить, можно ли однозначно восстановить исходное сообщение; этому посвящена страница «Однозначность декодирования».
Если мощность алфавита равна \(N\), а на один символ отводится \(i\) двоичных разрядов, то должно выполняться \(2^i\ge N\). Минимальная длина двоичного кода: \(i=\lceil\log_2N\rceil\).
Знак \(\lceil x\rceil\) означает округление вверх до ближайшего целого. Например, для алфавита из 5 символов одного двоичного разряда недостаточно: \(2^1=2\). Двух разрядов также мало: \(2^2=4\). Трёх разрядов достаточно: \(2^3=8\). Значит, минимальная длина кода равна 3.
Алгоритм решения задач
Большинство задач на кодирование удобно решать по одному плану. Сначала выпишите исходный алфавит и определите его мощность. Затем выясните, одинаковая ли длина кодов у всех символов. После этого найдите длину одного кода, число кодируемых символов и объём сообщения.
- Определите, какие объекты кодируются: буквы, цифры, команды, цвета, пиксели или другие символы.
- Найдите мощность алфавита \(N\) — количество различных символов.
- Определите длину кода одного символа. Для двоичного равномерного кода используйте \(i=\lceil\log_2N\rceil\).
- Посчитайте количество позиций в сообщении. Пробелы, знаки препинания и переносы строки учитываются, если они входят в условие как символы.
- Умножьте длину кода одного символа на число символов.
- Если требуется ответ в байтах, килобайтах или других единицах, переведите результат.
Здесь \(I\) — информационный объём сообщения в битах, \(K\) — число закодированных символов, \(i\) — число бит на один символ.
После вычисления проверьте результат здравым смыслом. Если в сообщении 100 символов, а каждый занимает 4 бита, объём не может быть меньше 400 бит. При равномерном коде число свободных кодовых комбинаций может быть больше числа символов — это нормально.
Какова минимальная длина двоичного равномерного кода для алфавита из 7 символов?
Разобранный пример: построение кода и объём сообщения
Для передачи сообщений используют 6 символов: А, Б, В, Г, Д и пробел. Каждый символ кодируется одинаковым минимальным количеством двоичных разрядов. Закодировано сообщение «АБ ВГ». Найдите длину кода, один возможный набор кодов и объём сообщения.
В сообщении есть пять буквенных символов и один пробел. Пробел нельзя потерять: он входит в заданный алфавит и занимает отдельную позицию.
Оставшиеся комбинации 110 и 111 не используются. Это не ошибка: при шести символах и трёх битах всего восемь возможных комбинаций, поэтому две комбинации остаются свободными.
Если объём требуется указать в целых байтах для хранения, обычно понадобится округление вверх: 2 байта. Но если спрашивается именно информационный объём, ответом остаются 15 бит. В условии всегда различайте «объём информации» и «объём памяти».
Единицы измерения и варианты кодов
Один двоичный разряд называется битом. Восемь бит образуют один байт. Поэтому для перевода битов в байты нужно разделить число на 8, а для обратного перевода — умножить на 8.
Если алфавит содержит 256 символов, равномерный двоичный код требует 8 бит, поскольку \(2^8=256\). Для 257 символов уже потребуется 9 бит, так как \(2^8<257\le2^9\). В задачах, где кодируют числа, отдельно учитывайте разрядность и способ представления; например, у двоичного кодирования чисел могут быть дополнительные ограничения.
Иногда в условии дано, что каждый символ занимает фиксированное число байт. Тогда вычислять \(\lceil\log_2N\rceil\) не нужно: используйте указанную разрядность. При сжатии или неравномерном кодировании общий объём может быть найден только по кодам отдельных символов или по частотам их появления. Такие методы рассматриваются, например, в кодировании Хаффмана.
| Величина | Обозначение | Что означает |
|---|---|---|
| Мощность алфавита | \(N\) | Количество различных символов |
| Длина кода | \(i\) | Число бит на один символ |
| Длина сообщения | \(K\) | Количество закодированных позиций |
| Объём сообщения | \(I\) | Общее количество бит |
1. Считают только буквы. Если пробел, цифры или знаки препинания входят в сообщение, они тоже занимают позиции. 2. Округляют логарифм вниз. Нужно округление вверх: для 5 символов требуется 3 бита, а не 2. 3. Путают число символов и мощность алфавита. В алфавите может быть 10 символов, а в конкретном сообщении — только 4 позиции. 4. Забывают единицы. 24 бита — это 3 байта, а не 24 байта. 5. Считают свободные коды ошибкой. Неиспользуемые комбинации допустимы при минимальном равномерном коде.
Как распознавать тип задачи
Фраза «используется алфавит из \(N\) символов» обычно означает, что нужно найти минимальную длину двоичного кода. Фраза «каждый символ записывается \(i\) битами» уже сообщает длину кода, поэтому достаточно умножить её на число символов. Если сказано, что код состоит из нулей и единиц и все слова имеют одинаковую длину, применяйте формулу \(I=K\cdot i\).
Если коды имеют разную длину, нельзя умножать число символов на одну общую длину. Нужно сложить длины кодов всех позиций сообщения. Если требуется построить дерево кодов, воспользуйтесь страницей «Дерево кодирования». А для задач о двоичных разрядах чисел полезно повторить «Двоичное кодирование».
Быстрая проверка
Проверьте себя
Главное
- Сначала определите алфавит и его мощность \(N\), затем число позиций \(K\) в сообщении.
- Для минимального двоичного равномерного кода используйте \(i=\lceil\log_2N\rceil\).
- Объём равномерно закодированного сообщения вычисляется по формуле \(I=K\cdot i\).
- Пробелы, цифры и знаки препинания учитываются, если они входят в алфавит или явно присутствуют в сообщении.
- При неравномерном коде длины кодов складываются, а не умножаются на одну общую длину.
- Не путайте биты и байты: \(1\) байт равен \(8\) битам.