К содержанию

Задание 11

Информационный объём сообщения

Как посчитать память под пароли и записи — и как по объёму памяти найти длину, алфавит или размер сведений.

6 подтем · 48 задач + 6 дополнительных · повышенный · ≈ 3 мин

Подтема 1 из 6

Пароль в байтах

Как посчитать память под пароль: алфавит, биты на символ, целые байты — и много паролей сразу.

Как устроена тема

В задании 11 считают, сколько памяти занимают пароли, номера и другие сведения, — или, наоборот, по объёму памяти находят длину, алфавит или размер части. Вот задача, которую мы будем решать всю тему:

«Каждому пользователю компьютерной системы выдаётся пароль из 15 символов. Пароль может содержать десятичные цифры и латинские буквы, заглавные и строчные. Для каждого пароля отведено одинаковое и минимально возможное целое число байт, используется посимвольное кодирование, все символы кодируются одинаковым и минимально возможным количеством бит. Кроме пароля, для каждого пользователя хранятся дополнительные сведения, для которых отведено одинаковое целое число байт. Для хранения сведений о 40 пользователях потребовалось 1200 байт. Сколько байт выделено для хранения дополнительных сведений об одном пользователе?»

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

В условииЧто это значит
пароль из 15 символов: цифры, заглавные и строчные латинские буквыдлина 15, а разных символов 10 + 26 + 26 = 62
символы кодируются одинаковым и минимально возможным количеством биту всех символов код одной длины — самой короткой, какой хватит
для пароля — минимально возможное целое число байтбиты пароля округляют вверх до целых байт
сведения — одинаковое целое число байту всех пользователей сведения одного размера
40 пользователей — 1200 байт40 одинаковых записей «пароль + сведения»
сколько байт выделено для сведенийразмер сведений одного пользователя

Тема состоит из шести подтем — у каждой своя страница. Идём по ним по порядку:

  1. Пароль в байтах — ты сейчас здесь.
  2. Дополнительные сведения — ответ задачи темы: 18.
  3. Наибольшее значение: «не более» — наибольшие длина и алфавит, когда памяти не больше заданной.
  4. Наименьшее значение: «более» и «не менее» — наименьшие длина и алфавит.
  5. Составной код — пароль вместе с номером и другие коды из частей.
  6. Служебные данные, зависящие от размера — дополнительный урок для редких задач.

Почти везде задачу можно решить и вручную, и программой — выбирай вкладку «Вручную» или «Python». На экзамене подойдёт любой способ, а второй пригодится для проверки.

Алфавит

Из скольких разных символов составляют пароль задачи темы?

Мощность алфавита N — сколько разных символов разрешено использовать. Наборы символов складываются. Цифр 10, заглавных латинских букв 26, строчных ещё 26: N = 10 + 26 + 26 = 62. Каждый символ пароля — один из этих 62.

Длина пароля K = 15 — другая величина: это число позиций в пароле. Пароль aaaaaaaaaaaaaaa тоже имеет длину 15, и алфавит у него по-прежнему 62 символа. Выбери набор, чтобы увидеть его мощность:

цифры
десятичные цифры от 0 до 910
заглавные
заглавные латинские буквы26
заглавные и цифры
заглавные латинские буквы и десятичные цифры26 + 10 = 36
задача темы
цифры и латинские буквы обоих регистров10 + 26 + 26 = 62
16-ричные цифры
цифры шестнадцатеричной системы16: от 0 до 9 и от A до F
цифры и 2000 знаков
десятичные цифры и специальный алфавит из 2000 знаков10 + 2000 = 2010
Тонкости:что не меняет алфавит

Требования «хотя бы одна цифра» и «не менее одной буквы» алфавит не меняют: они говорят, какие пароли допустимы, а символ по-прежнему выбирают из всего набора.

Цифр системы счисления с основанием k ровно k: у семнадцатеричной системы 17. Если наборы пересекаются, общий символ считают один раз. Если в условии дан набор, например «12 разрешённых букв», в алфавите 12 букв, а не весь алфавит языка.

Код символа

Сколько битов нужно на один символ из 62?

Число битов на символ i — наименьшее, при котором 2ⁱ ≥ N: i битов дают 2ⁱ разных кодов, и их должно хватить на все символы. Это правило подробно разобрано в теме 7. «Одинаковое и минимально возможное количество бит» в условии означает именно его.

Степени двойки: 62 лежит между 32 и 64. Пяти битов хватает на 32 символа — мало, шести — на 64. Значит, i = 6.
Вручную

Удваивай, пока не перешагнёшь N: 2, 4, 8, 16, 32, 64. Число шагов — i. Для 62 символов i = 6, два кода из 64 останутся свободными — это нормально.

Python

Функция bits из темы 7 увеличивает i, пока 2ⁱ меньше N (). Она понадобится до конца темы:

def bits(n):    i = 0    while 2 ** i < n:        i += 1    return i  print(bits(62), bits(64), bits(65))
6 6 7

Число битов меняется только при переходе через степень двойки: и 33, и 62, и 64 символа — по 6 битов, а 65 — уже 7.

Целые байты

Сколько байт отведено на один пароль?

Код пароля — K · i бит. Целое число байт получают делением на 8 с округлением вверх. 15 символов по 6 бит — 90 бит. 90 / 8 = 11,25: одиннадцати байт мало (88 бит), поэтому пароль занимает 12 байт.

Пароль задачи темы: 15 кодов по 6 бит идут подряд и пересекают границы байтов. Получается 90 бит — 12 байт, 6 бит последнего байта пустуют.
Вручную

N = 62 → i = 6; 15 · 6 = 90 бит; 90 / 8 = 11,25 → 12 байт. Подписывай единицы у каждого числа: так не сложишь биты с байтами.

Python

Округление вверх делает из модуля math. Пройди всю цепочку по шагам:

from math import ceil  def bits(n):    i = 0    while 2 ** i < n:        i += 1    return i  i = bits(10 + 26 + 26)password = ceil(15 * i / 8)print(i, 15 * i, password)
6 90 12

Округляют только вверх, даже если дробная часть мала: 11,25 байта — это 12. Если же биты делятся на 8 нацело, ничего не прибавляют: пароль из 16 символов — 96 бит, ровно 12 байт.

Много паролей

Сколько байт займут пароли 40 пользователей?

Сначала округляют один пароль — ему выделены целые байты, — потом умножают на число паролей. 40 · 12 = 480 байт. Расчёт 40 · 90 / 8 = 450 байт неверен: он складывает пустые хвосты паролей в общие байты, а у каждого пароля байты свои.

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

С 2021 года числа в задачах крупные, а ответ просят в Кбайт или Мбайт: 1 Кбайт = 1024 байта, 1 Мбайт = 1024 Кбайт. Пусть идентификатор — 180 символов из 10 цифр и 2000 специальных знаков, а хранить нужно 50 000 идентификаторов. Сколько Кбайт потребуется?

Вручную

N = 2010: 1024 мало, 2048 хватает — i = 11. Идентификатор 180 · 11 = 1980 бит, 1980 / 8 = 247,5 → 248 байт. Все: 50 000 · 248 = 12 400 000 байт, в Кбайтах 12 400 000 / 1024 = 12 109,375. Целое число Кбайт, которого хватит, — 12 110.

Python

Функция bits — выше, её пишут в начале программы:

from math import ceilone = ceil(180 * bits(10 + 2000) / 8)total = 50000 * oneprint(one, total, total / 1024)
248 12400000 12109.375

Как округлять ответ, решает вопрос: «сколько Кбайт потребуется» — вверх, иначе данные не поместятся; «запиши целую часть» — просто отбрось дробь.

Тонкости:элементы и число паролей

Вместо символов бывают элементы, типы, состояния: «описание узора — 40 элементов, всего 150 видов». Расчёт тот же: 150 видов — 8 бит, 40 · 8 = 320 бит = 40 байт.

Сколько разных паролей можно составить — другой вопрос, о переборе слов из темы 8: 62¹⁵ вариантов. Память под один пароль считают посимвольно: 15 · 6 бит.

Итого

  • Алфавит Nчисло разных символов; наборы складываются
  • Длина Kчисло позиций в пароле, не алфавит
  • Биты iнаименьшее i, при котором 2ⁱ ≥ N
  • ПарольK · i бит, делить на 8 и округлить вверх
  • n паролейn · байты одного пароля
  • Pythonceil(K * bits(N) / 8)

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

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

Вопрос 1
Сколько битов нужно на символ алфавита из 33 символов?
ОтветСкрыть ответ
Ответ
6: 2⁵ = 32 мало, 2⁶ = 64 хватает.
Вопрос 2
Пароль из 9 символов составлен из заглавных латинских букв и десятичных цифр. Сколько байт занимает один пароль?
ОтветСкрыть ответ
Ответ
7: алфавит 26 + 10 = 36, по 6 бит, 9 · 6 = 54 бита, 54 / 8 = 6,75 — вверх до 7.
Вопрос 3
Пароль из 16 символов алфавита задачи темы. Сколько байт он занимает?
ОтветСкрыть ответ
Ответ
12: 16 · 6 = 96 бит — ровно 12 байт, лишний байт не нужен.
Вопрос 4
Пароль — 13 символов из алфавита в 9 символов, каждому паролю целое число байт. Сколько байт займут 200 паролей?
ОтветСкрыть ответ
Ответ
1400: по 4 бита, 52 бита — 7 байт на пароль, 200 · 7 = 1400.
Вопрос 5
В условии добавили: «пароль обязан содержать хотя бы одну цифру». Меняется ли мощность алфавита?
ОтветСкрыть ответ
Ответ
Нет: каждый символ по-прежнему выбирают из всего набора, N = 62.

Практика

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

Требования «хотя бы один»

Пароль из 12 символов может содержать заглавные и строчные латинские буквы, десятичные цифры и знаки !, ?, #, %. Каждый пароль обязан содержать хотя бы одну цифру и хотя бы один знак. Символы кодируются посимвольно одинаковым минимальным числом битов, каждому паролю — минимальное целое число байтов. Сколько байтов нужно для 40 паролей?

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

Биты для 33 символов

Сколько битов нужно на символ алфавита мощностью 33?

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

Пароль из 9 символов

Пароль состоит из 9 символов. Разрешены заглавные латинские буквы и десятичные цифры. Сколько байтов минимально необходимо для одного пароля?

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

200 паролей

Пароль содержит 13 символов из алфавита мощностью 9. Каждый пароль занимает минимальное целое число байтов. Сколько байтов нужно для 200 паролей?

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

Байты всей последовательности

Каждый из 15 кодов состоит из 11 символов алфавита мощностью 6. Все коды записаны подряд, и целое число байтов выделяется всей последовательности. Сколько байтов займут все коды?

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

Сколько битов, а не сколько паролей

Пароли длиной 6 составляют из алфавита в 4 символа. Сколько битов занимает один пароль при посимвольном кодировании?

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

Описания узоров

Описание узора — последовательность из 40 элементов; всего существует 150 видов элементов, каждый кодируется одинаковым минимальным числом битов, описанию выделяется минимальное целое число байтов. Сколько Кбайт займут 1024 описания?

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

Идентификаторы в Мбайтах

При регистрации каждому объекту присваивается идентификатор из 180 символов; символы — цифры шестнадцатеричной системы и знаки из специального алфавита в 2000 символов. Для каждого идентификатора отведено одинаковое минимально возможное целое число байтов, кодирование посимвольное, все символы кодируются одинаковым минимальным числом битов. Определи объём памяти в Мбайт для хранения 524 288 идентификаторов.

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

Наименьшее целое число Кбайт

Номер детали состоит из 95 символов: десятичные цифры, заглавные латинские буквы и знаки специального набора из 1200 символов. Каждый номер занимает одинаковое минимально возможное целое число байтов, кодирование посимвольное, все символы кодируются одинаковым минимальным числом битов. Определи наименьшее целое число Кбайт, достаточное для хранения 12 000 номеров.

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