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

Дополнительные сведения

В записи не только код

База хранит не голый идентификатор. Рядом лежат имя, дата, статус — в условии это называют дополнительными сведениями.

Их размер обычно дают готовым, сразу в байтах. Это подарок: округлять там нечего.


Запись из двух кусков

Сначала всё как раньше: алфавит, биты, байты на код.

Потом прибавляем дополнительные сведения — получается одна запись. И только её умножаем на количество.

Дополнительные сведения уже в байтах. Не переводи их в биты и не складывай с битами кода: округление съедет, ответ станет меньше настоящего.

Та же задача задом наперёд

Известен весь объём? Раздели его на количество записей — получишь одну запись.

Вычти из неё байты кода, и останутся дополнительные сведения.


Пример

Демоверсия 2021 года. Идентификатор — 15 символов из набора A, B, C, D, E, F, G, H. Дополнительные сведения — 24 байта на объект. Нужен объём для 20 объектов.

Символов в наборе 8, это ровно 2³, поэтому 3 бита на символ.

Идентификатор: 15 · 3 = 45 бит, вверх до байта — 6 байт.

Запись целиком: 6 + 24 = 30 байт. Двадцать записей — 600 байт.



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

3
45
6
30
600

Код занимает 9 байт, дополнительные сведения — 18 байт. Сколько байт в одной записи?

Ловушки

  • Сложили биты кода с байтами дополнительных сведений.
  • Округлили вверх всю запись, хотя округляется только код.
  • Решили, что дополнительные сведения хранятся один раз на всю базу.
  • В обратной задаче поделили объём на количество и оставили дробь.
Печать