ЕГЭ информатика 11 задание разбор, теория, как решать.
Задание №11 ЕГЭ по информатике — «Посимвольное кодирование»
Тип задания: задачи на вычисление мощности алфавита, длины кода, или объёма памяти при посимвольном кодировании.
1. Теория
Каждому изделию, пользователю или объекту в базе данных присваивается уникальный код, состоящий из символов некоторого алфавита.
Для кодирования таких символов используется посимвольное кодирование — все символы кодируются одинаковым количеством бит, которое выбирается минимально возможным, но целым.
Основные формулы:
- Определение количества бит на символ:
B = ceil(log₂(A)),
гдеA— мощность алфавита (число различных символов). - Количество бит на один код:
bits = L × B,
гдеL— длина кода в символах. - Количество байт на один код:
bytes = ceil(bits / 8) - Общий объём памяти:
V = bytes × N,
гдеN— количество записей (объектов, изделий, номеров и т.д.).
Переводы единиц:
- 1 байт = 8 бит
- 1 Кбайт = 1024 байт
- 1 Мбайт = 1024 × 1024 байт
Типовые вопросы:
- Найти минимальную длину кода (при ограничении на объём памяти).
- Найти мощность алфавита, если известны другие параметры.
- Найти объём памяти, требуемый для хранения заданного числа кодов.
- Найти максимальное число дополнительных символов (как в вариантах СтатГрад).
2. Пример 1 — Минимальная мощность алфавита
Задача (Демоверсия ЕГЭ 2026 №11):
На предприятии каждой изготовленной детали присваивают серийный номер длиной 2783 символа.
Известно, что хранится 3 845 627 таких номеров и требуется не менее 11 Гбайт памяти.
Определите минимально возможную мощность алфавита.
Решение:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from math import log2, ceil N = 3_845_627 L = 2783 limit = 11 * 1024**3 # 11 Гбайт → байты # Подбираем мощность алфавита A for A in range(2, 10_000): bits = ceil(log2(A)) bytes_per_code = ceil(L * bits / 8) total = bytes_per_code * N if total >= limit: print(A) break |
Ответ: 53
3. Пример 2 — Минимальная длина кода
Задача (Резервный день 19.06.2025 №11):
Серийный номер содержит десятичные цифры и символы из 17-символьного алфавита.
Известно, что хранится 7 564 230 номеров, объём > 31 Мбайт.
Определите минимально возможную длину номера.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from math import log2, ceil N = 7_564_230 A = 10 + 17 limit = 31 * 1024 * 1024 bits_per_char = ceil(log2(A)) for L in range(1, 100): bits_per_code = L * bits_per_char bytes_per_code = ceil(bits_per_code / 8) if N * bytes_per_code > limit: print(L) break |
Ответ: 7
4. Пример 3 — Минимальная длина при большом алфавите
Задача (Пересдача 03.07.2025 №11):
Алфавит: 10 цифр, 52 буквы (с учётом регистра), 500 спецсимволов.
Всего 45 877 кодов, требуется более 49 Мбайт.
Найти минимальную длину серийного номера.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from math import log2, ceil N = 45_877 alphabet = 10 + 52 + 500 limit = 49 * 1024 * 1024 bits = ceil(log2(alphabet)) for L in range(1, 2000): bytes_per_code = ceil((L * bits) / 8) total = bytes_per_code * N if total > limit: print(L) break |
Ответ: 896
5. Пример 4 — Минимальная мощность алфавита (StatGrad 23.10.2025)
Задача:
Серийный номер длиной 102 символа, всего 282 952 номеров, < 53 Мбайт.
Определить максимально возможную мощность алфавита.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from math import ceil N = 282_952 L = 102 limit = 53 * 1024 * 1024 for A in range(2, 2000): bits = ceil(log2(A)) bytes_per_code = ceil(L * bits / 8) if N * bytes_per_code <= limit: last_ok = A print(last_ok) |
Ответ: 2¹⁵ = 32768
6. Пример 5 — Максимальное число спецсимволов (StatGrad 24.10.2024)
Условие:
Код длиной 30 символов.
Каждый символ может быть цифрой (10), латинской буквой (52, с регистром) или спецсимволом из набора.
4700 кодов занимают не более 180 Кбайт.
Найти максимальное количество спецсимволов.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from math import log2, ceil limit = 180 * 1024 # 180 Кбайт codes = 4_700 L = 30 for n in range(1, 2000): A = 52 + 10 + n bits = ceil(log2(A)) bytes_per_code = ceil(L * bits / 8) total = bytes_per_code * codes if total <= limit: last_ok = n print(last_ok) |
Ответ: 962
7. Пример 6 — Определить объём памяти
Типовая формула:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
from math import log2, ceil A = 62 # цифры + латиница L = 50 N = 100_000 bits = ceil(log2(A)) bytes_per_code = ceil(L * bits / 8) total_MB = (bytes_per_code * N) / (1024**2) print(total_MB, "Мбайт") |
Так можно быстро посчитать объём при любых данных.
8. Основные типы задач и шаблоны Python
- Поиск длины — цикл
for L in range(...), пока объём не превышает лимит. - Поиск алфавита — цикл
for A in range(...). - Поиск числа спецсимволов — аналогично, с
A = базовые + n. - Обратная задача (найти объём) — прямой расчёт по формулам без цикла.
9. Итог
Для успешного решения заданий №11 нужно запомнить три шага:
- Определи мощность алфавита и вычисли
ceil(log₂(A))— число бит на символ. - Посчитай биты и байты на один элемент.
- Найди общий объём и сравни с условием (или подбери длину / мощность).
Python помогает не ошибиться в округлениях и быстро подобрать нужное значение, особенно когда требуется «минимальная длина» или «максимальное число символов».
Авторский комментарий:
Эти шаблоны полностью охватывают все типы 11-х заданий ЕГЭ — из Демоверсий, Основных волн, Пересдач и СтатГрадов.
Используя формулы и примеры выше, вы сможете решать любой вариант за 30–40 секунд.