Главная › ЕГЭ по информатике › Задание 11
ЕГЭ по информатике · задание №11

Задание 11: от алфавита к памяти и обратно

Разбираемся, когда искать объём, а когда минимальную или максимальную мощность алфавита. Проверяем биты, байты одного номера и точные ограничения памяти.

Установи направление решения

Что требуется найти в задании 11

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

KСимволов в алфавите
iБит на символ
BЦелых байт на номер
VОбщий объём памяти
ИзвестноСпрашиваютМаршрут
Алфавит K, длина L, число номеров nОбъём памятиK → i → B → B · n
Длина L, число n, нижнее ограничение памятиМинимальный алфавитПроверяем i по памяти → первый подходящий i → минимальное K
Длина L, число n, верхнее ограничение памятиМаксимальный алфавитПроверяем i по памяти → последний подходящий i → максимальное K
Остановись на той величине, которую спрашивают6 бит — это размер кода одного символа. Для алфавита, которому нужно ровно 6 бит, мощность может быть от 33 до 64. Поэтому ответом на вопрос о мощности не будет само число 6.

Как связаны алфавит и биты на символ

i бит дают 2ⁱ различных кодов. Для алфавита мощности K выбираем минимальное целое i с условием 2**i ≥ K. Если 4096 кодов уже заняты, ещё один символ требует дополнительного бита.

Биты iКакие мощности K требуют именно i битМаксимум кодов
517…3232
633…6464
765…128128
8129…256256
122049…40964096
134097…81928192

Для алфавитов с K ≥ 2 диапазон, соответствующий ровно i битам, задаётся так:

2i−1 < K ≤ 2i

Отсюда минимальное K = 2**(i−1) + 1, а максимальное K = 2**i. Эти формулы выбирают разные концы одного диапазона.

Где именно округлять байты

Номер длиной L при i битах на символ содержит L · i бит. Если под каждый номер выделяется целое количество байт, нужно округлить один номер вверх до байта, затем умножить на количество номеров.

B = ⌈L · i / 8⌉; общий объём V = B · n байт

Для положительных целых величин в Python это B = (L * i + 7) // 8. Если L · i делится на 8, лишний байт не прибавляется.

Пример: три номера по 9 бит

Память выделяется отдельно для каждого номераТри номера по 9 бит. Каждому выделено 2 байта: 9 бит данных и 7 неиспользованных бит. Всего 6 байт.Первый байтВторой байт№12 байта№22 байта№32 байта3 номера × 2 байта = 6 байт
Синие клетки — 9 бит данных номера. Светлые — 7 оставшихся бит в выделенных двух байтах. Место одного номера не передаётся другому.

Один номер: 9 / 8 = 1,125 байта → выделяем 2 байта. Три номера занимают 6 байт. Если сложить 27 бит всех номеров и округлить только один раз, получится 4 байта — такая общая упаковка не соответствует условию отдельного хранения.

В Мбайты переводим уже общий объём в байтах: V / 1024**2. Дополнительное округление Мбайтов делают только по требованию вопроса.

Потренируй чтение условия

Определи тип до вычислений

В этих шести вопросах не нужно подставлять числа. Выбери, что искать, какую связь использовать и как закончить решение.

Тип 1 · алфавит известен

Найти общий объём памяти

Идентификатор содержит 257 символов. Используются 17 цифр семнадцатеричной системы и 4080 других специальных символов. Каждый символ кодируется минимальным одинаковым числом бит, каждый номер хранится в минимальном целом числе байт. Всего 8 388 608 номеров. Найди общий объём в Мбайтах.

Шаг 1. Собери общий алфавит

В семнадцатеричной системе 17 разных цифр. Поэтому K = 17 + 4080 = 4097.

Шаг 2. Выбери число бит

2¹² = 4096 < 4097, а 2¹³ = 8192 ≥ 4097. Нужно i = 13 бит на символ.

Шаг 3. Округли один номер до байта

257 · 13 = 3341 бит. Делим на 8: 417,625 байта → 418 байт на номер.

Шаг 4. Посчитай все номера

V = 418 · 8 388 608 / 1024² = 3344 Мбайт

Число номеров равно 8 · 1024², поэтому после перевода в Мбайты остаётся 418 · 8.

Ответ: 3344Алфавит → биты → целые байты одного номера → весь объём.
Python · окончательный ответ
alphabet = 17 + 4080
bits = 0
while 2 ** bits < alphabet:
    bits += 1
bytes_per_id = (257 * bits + 7) // 8
total_bytes = bytes_per_id * 8388608
print(total_bytes // (1024 ** 2))  # здесь результат — целое число Мбайт
Тип 2 · нижнее ограничение памяти

Найти минимальную мощность алфавита

Длина номера — 204 символа, номеров 94 523. На их хранение потребовалось не менее 12 Мбайт. Кодирование минимальное, под каждый номер выделено целое число байт. Найди минимальную мощность алфавита.

Шаг 1. Запиши ограничение на всю память

⌈204 · i / 8⌉ · 94 523 ≥ 12 · 1024²

Ищем первые целые i бит, при которых это неравенство выполнено. В шпаргалке деление 12 · 1024² · 8 / 94 523 / 204 ≈ 5,222 даёт ориентир. Окончательно проверяем хранение в целых байтах.

iБиты одного номераЦелые байты одного номераВесь объёмПодходит?
5102012812 098 944 байта ≈ 11,538 МбайтНет: меньше 12 Мбайт
6122415314 462 019 байт ≈ 13,792 МбайтДа: не менее 12 Мбайт

Шаг 2. Возьми минимальный алфавит для 6 бит

Пять бит вмещают 32 символа. Чтобы понадобился шестой бит, нужен хотя бы 33-й символ.

Kmin = 2⁵ + 1 = 33
Ответ: 336 — промежуточное число бит. 64 — верхняя граница алфавита для этих битов. Вопрос требует нижнюю границу: 33.
Python · окончательный ответ
length = 204
count = 94523
limit_bytes = 12 * 1024 ** 2
bits = 1
while ((length * bits + 7) // 8) * count < limit_bytes:
    bits += 1
min_alphabet = 2 ** (bits - 1) + 1
print(min_alphabet)

Цикл в коде продолжается, пока объём ещё меньше 12 Мбайт. Он заканчивается на первых битах, для которых условие «не менее» уже выполнено.

Тип 3 · верхнее ограничение памяти

Найти максимальную мощность алфавита

Длина номера — 124 символа, номеров 124 587. Для хранения отведено менее 15 Мбайт. При тех же правилах кодирования найди максимальную мощность алфавита.

Шаг 1. Сохрани строгое неравенство

⌈124 · i / 8⌉ · 124 587 < 15 · 1024²

Ориентир из деления — примерно 8,145 бита. Проверяем 8 и 9 с округлением каждого номера до байта:

iБиты одного номераЦелые байты одного номераВесь объёмПодходит?
899212415 448 788 байт ≈ 14,733 МбайтДа: меньше 15 Мбайт
9111614017 442 180 байт ≈ 16,634 МбайтНет: больше предела

Шаг 2. Возьми верхний конец допустимого алфавита

Последняя подходящая глубина i = 8. При ней можно использовать до 2⁸ символов.

Kmax = 2⁸ = 256
Ответ: 256Минимальное K для 8 бит равно 129, но задача требует максимальное. Слово «менее» также запрещает равенство объёма пределу.
Python · окончательный ответ
length = 124
count = 124587
limit_bytes = 15 * 1024 ** 2
bits = 0
while ((length * (bits + 1) + 7) // 8) * count < limit_bytes:
    bits += 1
max_alphabet = 2 ** bits
print(max_alphabet)
Проверка, которая работает и на коротких номерах

Почему одной дробной оценки бит недостаточно

Деление общего лимита битов на число символов удобно для оценки. Но оно не учитывает свободные биты в округлённых байтах каждого номера. Поэтому общий объём нужно проверять по точной формуле ((L * i + 7) // 8) * n.

Возьмём два номера длиной по 3 символа. Посмотрим, сколько они занимают при разных i:

i бит/символБит в одном номереБайт на номерБайт на два номера
2612
3924
41224
51524
61836

Теперь одна таблица даёт три разных ответа:

Что сказано о памятиВопросВыбор iМощность алфавита
Не менее 4 байт: V ≥ 4Минимальный алфавитПервый подходящий i = 32² + 1 = 5
Менее 4 байт: V < 4Максимальный алфавитПоследний подходящий i = 22² = 4
Не более 4 байт: V ≤ 4Максимальный алфавитПоследний подходящий i = 52⁵ = 32
Равенство и байтовое округление меняют результатОбъём 4 байта может соответствовать сразу 3, 4 или 5 битам на символ. Поэтому нельзя автоматически получить i только округлением дроби 4 · 8 / (2 · 3).
Проверь целые биты

Подбери i и выбери нужную границу алфавита

Выбери условие и меняй число бит на символ. Смотри, сколько байт выделяется на номер, выполняется ли ограничение и какой диапазон алфавита соответствует этим битам. Затем введи итоговую мощность алфавита.

Двенадцать упражнений на память и алфавит

Проверяй, где округлить байты и какой конец диапазона алфавита нужен. После ошибки можно изменить ответ.

Решено: 0 из 12

1. Вместимость кода

Сколько различных символов можно закодировать 12 битами?

2. На один символ больше

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

3. Один номер

Идентификатор содержит 9 бит данных. Сколько целых байт минимально выделят под него?

4. Три отдельных номера

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

5. Минимальный алфавит

Для символа требуется ровно 6 бит при минимальном кодировании. Какова минимальная мощность алфавита?

6. Максимальный алфавит

При тех же 6 битах какова максимальная мощность алфавита?

7. Байты большого номера

Длина 257 символов, на каждый по 13 бит. Сколько целых байт минимально выделяется под один номер?

8. Объём всей базы

Один номер занимает 418 байт, номеров 8 · 1024². Сколько Мбайт требуется?

9. «Не менее»

Допустимо ли равенство V = 12 Мбайт, если требуется «не менее 12 Мбайт»? Ответь «да» или «нет».

10. «Менее»

Допустимо ли равенство V = 15 Мбайт, если требуется «менее 15 Мбайт»? Ответь «да» или «нет».

11. Короткие номера: минимум

Два номера по 3 символа занимают не менее 4 байт при отдельном минимальном хранении. Найди минимальную мощность алфавита.

12. Короткие номера: максимум

Те же два номера по 3 символа должны занимать не более 4 байт. Найди максимальную мощность алфавита.

Проверка перед ответом

  • Мощность алфавита включает все разные символы, в том числе цифры указанной системы счисления.
  • Для i бит выполнено 2ⁱ ≥ K, а меньшего числа бит недостаточно.
  • Байты округлены вверх отдельно для каждого номера.
  • Количество номеров применено после округления одного номера.
  • Слова «менее», «не более», «больше», «не менее» переведены в точные знаки сравнения.
  • При обратном поиске проверены подходящее и соседнее неподходящее число бит.
  • Если спрашивают алфавит, в ответе записано K, а не i.
  • Для минимума выбран 2**(i−1)+1, для максимума — 2**i.

Программы с точным байтовым подсчётом

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

Скачать программы Python
Видеоразбор

Видео по заданию №11

Видео скоро выйдет.

Продолжи подготовку в учебнике

Теория и полный разбор задания 11 ЕГЭ доступны в учебнике. В практике решай новые условия: сначала определи направление поиска, затем проверь точную память по целым байтам.