К содержанию

Подтема 2 из 6

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

Запись пользователя — пароль и сведения: как найти размер сведений, и ответ задачи темы.

Запись пользователя

Сведения о 40 пользователях заняли 1200 байт. Сколько байт приходится на дополнительные сведения одного пользователя?

Запись пользователя — его пароль и его сведения. Записи одинаковые, поэтому общий объём делят на число пользователей, а из одной записи вычитают пароль. 1200 / 40 = 30 байт на пользователя, пароль — 12 байт из подтемы 1, на сведения остаётся 30 − 12 = 18 байт. Ответ задачи темы: 18.

1200 байт — 40 одинаковых записей по 30 байт. В каждой 12 байт пароля и 18 байт сведений.
Вручную

Пароль: 15 · 6 = 90 бит → 12 байт. Запись: 1200 / 40 = 30 байт. Сведения: 30 − 12 = 18 байт. Если общий объём дан в Кбайтах, сначала переведи его в байты: 15 Кбайт = 15 · 1024 = 15 360 байт.

Python

Деление нацело даёт целое число, без «.0» в конце:

from math import ceilpassword = ceil(15 * bits(10 + 26 + 26) / 8)record = 1200 // 40print(password, record, record - password)
12 30 18

Нельзя делить на 8 общий объём или вычитать пароль в битах: 30 байт записи — это 12 байт пароля целиком плюс сведения.

Объём записей

Обратный ход: сведения — 18 байт. Сколько байт займут 40 записей?

Объём всех записей — число записей, умноженное на пароль в целых байтах плюс сведения. 40 · (12 + 18) = 1200 байт — получился объём из условия, значит, ответ 18 найден верно. Такая подстановка — быстрая проверка любой задачи на сведения.

Если сведения даны в целых байтах, неважно, выделяют целые байты паролю или всей записи: 18 целых байт не меняют пустой хвост пароля.

Тонкости:общий заголовок

Иногда в файле есть заголовок, общий для всей базы, например 64 байта. Его прибавляют один раз: 40 · 30 + 64 = 1264 байта, а не 40 · (30 + 64).

Части в битах

Пусть сведения заданы в битах — 20 бит. Сколько байт займёт запись?

Если целые байты выделяют всей записи, сначала складывают биты частей, потом округляют. Если каждой части — округляют каждую. Всей записи: 90 + 20 = 110 бит → 14 байт. Каждой части: 12 + 3 = 15 байт.

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

В обратной задаче так же: запись в 14 байт — 112 бит, пароль не округляют отдельно, на сведения остаётся 112 − 90 = 22 бита. Если округлить пароль до 12 байт, получилось бы (14 − 12) · 8 = 16 бит — неверно.

Итого

  • Записьпароль в целых байтах + сведения
  • Сведенияобщий объём / число записей − пароль
  • Все записичисло записей · запись
  • Кбайтсначала перевести в байты: · 1024
  • Части в битахбайты всей записи — сложить биты, потом округлить
  • Заголовокобщий для базы — прибавить один раз

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Пароль — 10 заглавных латинских букв, сведения — 20 байт на пользователя. Сколько байт нужно для 64 пользователей?
ОтветСкрыть ответ
Ответ
1728: по 5 бит, 50 бит — 7 байт, запись 27 байт, 64 · 27.
Вопрос 2
Пароль — 13 символов из алфавита в 40 символов. Записи 256 пользователей заняли 6 Кбайт. Сколько байт сведений у одного пользователя?
ОтветСкрыть ответ
Ответ
14: пароль 13 · 6 = 78 бит — 10 байт, запись 6 · 1024 / 256 = 24 байта, 24 − 10.
Вопрос 3
Пароль задачи темы и 18 байт сведений. Сколько Кбайт займут записи 512 пользователей?
ОтветСкрыть ответ
Ответ
15: 512 · 30 = 15 360 байт, 15 360 / 1024 = 15.
Вопрос 4
Пароль занимает 90 бит, сведения — 20 бит, целые байты выделяют всей записи. Сколько байт в записи?
ОтветСкрыть ответ
Ответ
14: 90 + 20 = 110 бит, 110 / 8 = 13,75 — вверх до 14.
Вопрос 5
База — 200 записей по 30 байт и один общий заголовок 64 байта. Сколько байт в базе?
ОтветСкрыть ответ
Ответ
6064: 200 · 30 + 64 — заголовок один на всю базу.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Сведения на пользователя

Пароль содержит 13 символов из алфавита мощностью 40. Для 256 одинаковых по объёму пользовательских записей потребовалось 6 Кбайт. Дополнительные сведения занимают целое число байтов. Сколько байтов дополнительных сведений приходится на пользователя?

Введите число.

Сведения при 1080 байтах

Пароль содержит 14 символов из алфавита мощностью 30, каждому паролю — минимальное целое число байтов. Для 30 пользователей потребовалось 1080 байтов. Сколько байтов дополнительных сведений приходится на пользователя?

Введите число.

Сведения при 300 Кбайт

Пароль из 60 символов составляют из заглавных и строчных латинских букв, десятичных цифр и знаков @, #, $, &. Каждому паролю отведено одинаковое минимально возможное целое число байтов, кодирование посимвольное, все символы кодируются одинаковым минимальным числом битов. Кроме пароля, для каждого пользователя хранятся дополнительные сведения, для чего выделено одинаковое целое число байтов. Для хранения сведений о 4096 пользователях потребовалось 300 Кбайт. Сколько байтов выделено для дополнительных сведений об одном пользователе?

Введите число.

64 пользователя

Пароль содержит 10 заглавных латинских букв; на дополнительные сведения выделено 20 байтов на пользователя. Каждому паролю — минимальное целое число байтов. Сколько байтов нужно для 64 пользователей?

Введите число.

128 пользователей

Пароль содержит 15 символов из алфавита мощностью 12. Дополнительные сведения занимают 9 байтов на пользователя. Сколько байтов потребуется для 128 пользователей?

Введите число.

Данные о 500 объектах

Код объекта состоит из 25 символов: заглавные латинские буквы, десятичные цифры, дефис и точка. Каждому коду отведено одинаковое минимально возможное целое число байтов, кодирование посимвольное, все символы кодируются одинаковым минимальным числом битов. Кроме кода, для каждого объекта выделено 30 байтов содержательной информации. Сколько байтов потребуется для хранения данных о 500 объектах?

Введите число.

База с общим заголовком

Пароль из 8 символов алфавита мощностью 12 и 12 байтов сведений образуют запись; каждому паролю — минимальное целое число байтов. База содержит 200 записей и один общий заголовок в 64 байта. Сколько байтов занимает база?

Введите число.

Пароль и сведения подряд

Пароль содержит 11 символов алфавита мощностью 5, дополнительные сведения — 25 битов. Пароль и сведения записаны подряд, целое число байтов выделяется всей записи. Сколько байтов займёт запись?

Введите число.

Сведения в битах

Вся пользовательская запись занимает 12 байтов. Пароль содержит 9 символов из алфавита мощностью 9. Пароль записывается без отдельного округления до байтов; вся остальная часть записи выделена дополнительным сведениям. Сколько это битов?

Введите число.