Информационный объём текста
При регистрации в компьютерной системе каждому объекту присваивается идентификатор, состоящий из 60 символов и содержащий только десятичные цифры и символы из 250-символьного специального алфавита. В базе данных для хранения каждого идентификатора отведено одинаковое и минимально возможное целое число байт. При этом используется посимвольное кодирование идентификаторов, все символы кодируются одинаковым и минимально возможным количеством бит.
Определите объём памяти (в Кбайтах), необходимый для хранения 65 536 идентификаторов.
Анализ условия
- Для получения ответа нужно узнать объём памяти I, который требуется для хранения одного идентификатора, и умножить его на 65 536.
- Поскольку используется равномерное кодирование (все символы идентификатора кодируются одинаковым количеством бит), для определения размера одного идентификатора нужно найти количество бит i, выделяемое на один символ, и умножить его на количество символов — 60.
- Количество бит i, которые нужно выделить для хранения кода одного символа, определяется мощностью алфавита M и должно удовлетворять неравенству: 2i ≥ M Здесь 2i — количество двоичных кодов длины i. Это значит, что с помощью i бит можно закодировать 2i различных вариантов (кодов символов).
Решение
Вычислим мощность алфавита M, т. е. количество символов, которые используются при составлении идентификаторов: M = 10 + 250.
print( M )
Теперь определим, сколько битов нужно выделить для хранения кода одного символа. Для этого найдём минимальное целое значение i, при котором выполняется неравенство 2i ≥ M.
Учитывая, что логарифмическая функция — возрастающая, получаем:
i ≥ log2 Mfrom math import log2, ceil i = ceil( log2(M) ) print( i )
Идентификатор длиной 60 символов занимает в памяти 60·i битов. Для перевода в байты нужно разделить это значение на 8:
I = ceil( 60*i/8 ) print( I )
Теперь остаётся определить объём памяти для 65 536 идентификаторов и перевести его в килобайты, разделив на 1024:
V = 65536*I / 1024 print( V )
Итоговая программа:
from math import log2, ceil M = 10 + 250 print( M ) i = ceil( log2(M) ) print( i ) I = ceil( 60*i/8 ) print( I ) V = 65536*I / 1024 print( V )
После выполнения этого фрагмента получим:
Разбор по шагам
| Шаг | Формула | Значение |
|---|---|---|
| Мощность алфавита | M = 10 + 250 | 260 |
| Бит на символ | i = ⌈log₂ 260⌉ | 9 (2⁸ = 256 < 260, 2⁹ = 512 ≥ 260) |
| Бит на идентификатор | 60 · 9 | 540 бит |
| Байт на идентификатор | I = ⌈540 / 8⌉ | 68 байт (67,5 → округление вверх) |
| Всего байт | 65536 · 68 | 4 456 448 байт |
| Объём в Кбайтах | 4 456 448 / 1024 | 4352 Кбайт |
🧮 Интерактивный расчёт
Измените параметры задачи и нажмите «Рассчитать» — калькулятор пошагово покажет все промежуточные значения.
По умолчанию подставлены параметры из условия задачи.
Page 1 of 1









