Статья Автор: Деникина Н.В., Деникин А.В.

Код из нескольких частей

Когда код неоднородный

Бывает, что код собран из кусков: две буквы и восемь цифр, номер потока и номер в потоке, дата из трёх полей.

Условие тогда говорит отдельно: каждая часть кодируется своим минимальным числом бит.


Правило сложения

У каждой части своя мощность и своё число бит. Считаешь их по отдельности, а потом складываешь.

Складывай биты, байт бери в конце. Округлишь каждую часть отдельно — получишь лишние байты.

Числовое поле

Часть кода может быть числом. Число от 1 до N — это ровно N вариантов, и бит на него столько же, сколько на алфавит мощности N.

Число от 0 до N — уже N + 1 вариант. Границы читай медленно.

Когда байт берут дважды

Смотри, к чему в условии относится слово «байт». Целое число байт отведено на весь код — округляешь один раз, в самом конце.

Сказано про каждую часть отдельно — тогда и вверх до байта поднимается каждая часть, а складываются они уже байтами.


Пример: запись о дате

Запись хранит год (число от 1 до 2100), номер месяца (от 1 до 12) и номер дня (от 1 до 31). Каждое поле — отдельно, минимальным числом бит.

Год: 2¹¹ = 2048, этого мало для 2100. Значит 12 бит. Вот здесь и теряют балл.

Месяц: 12 вариантов, 4 бита. День: 31 вариант, 5 бит.

Каждое поле кодируется отдельно год: 12 бит месяц: 4 бита день: 5 бит 21 бит на одну запись

Сложили и получили 21 бит на запись.



Программа печатает:

12
4
5
21

Проверь себя


Сколько бит нужно на число от 1 до 1000?

Ловушки

  • Округлили до байта каждую часть, а не код целиком.
  • Для числа от 1 до 2100 взяли 11 бит: 2048 меньше 2100.
  • Забыли, что нумерация с нуля добавляет один вариант.
  • Посчитали части одним алфавитом, хотя в условии сказано «отдельно».
Печать