Кодирование информации · Блок 2§5
SilverTests.ru · Подготовка к ИТМОТеория + паттерны + задания
Объём информации
Формулы, типы задач и олимпиадные паттерны ИТМО
1Фундамент: формула Хартли
Центральная формула всей темы. Если есть N равновероятных вариантов, минимальное число бит для кодирования одного варианта:
Ловушка «на единицу»: при N = 64 ответ K = 6, НЕ 7. Потому что log₂(64) = 6 — целое. Потолок от целого числа — оно само. Максимум различных кодов при i бит = 2i.
примеры
N = 2 → i = 1 бит // да/нет
N = 5 → i = 3 бита // ⌈2.32⌉ = 3
N = 256 → i = 8 бит // ровно 1 байт
N = 3232 → i = 12 бит // ⌈11.66⌉ = 12
На ИТМО чаще записывают I = log₂(N), подразумевая потолок при хранении кода.
2Кодирование текста
Что нужно помнить
| Параметр |
Типичные значения |
| Мощность алфавита |
ASCII — 256 (8 бит), Unicode — 65536 (16 бит = 2 байта) |
| Перевод единиц |
1 байт = 8 бит, 1 КБ = 1024 Б, 1 МБ = 1024 КБ |
| «Минимально возможное одинаковое кол-во бит» |
= ⌈log₂(A)⌉ — стандартная формулировка ИТМО |
Паттерн ИТМО: кодовая таблица + коды
Часто файл состоит из двух частей:
структура
V_файл = V_таблица + V_коды
V_таблица = M × 16 бит // M символов, каждый — 2-байтный Unicode
V_коды = L × ⌈log₂(M)⌉ бит // L символов текста
Типовая задача финала ИТМО: «Петя и Вася используют одинаковый метод, но у Пети алфавит 4M, а у Васи — M. Разница — X байт. Найти M.»
3Кодирование изображений
Типовые глубины цвета
| i (бит) |
Цветов |
Название |
| 1 |
2 |
Ч/Б |
| 4 |
16 |
EGA |
| 8 |
256 |
Индексированный |
| 16 |
65536 |
High Color |
| 24 |
16 777 216 |
True Color (RGB по 8 бит) |
Паттерн ИТМО: метод А vs метод Б (блочный код)
финал 2023
// Ч/Б изображение 1024 × 768
Метод А: 1 бит на пиксель
V_A = 1024 × 768 × 1 = 786 432 бит
Метод Б: блоки 4×4, в каждом ровно 8 чёрных
Число блоков: (1024/4) × (768/4) = 256 × 192 = 49 152
Различных блоков 4×4 с 8 чёрными: C(16,8) = 12870
Бит на блок: ⌈log₂(12870)⌉ = 14
V_Б = 49 152 × 14 = 688 128 бит
Экономия: 786432 − 688128 = 98 304 бит = 12 288 байт
Ключ: комбинаторный подсчёт числа состояний блока → потолок логарифма. Это «визитная карточка» задачи 2 финала ИТМО.
4Кодирование звука
| Параметр |
Типичные значения |
| Частота дискретизации f |
8000, 22050, 44100, 48000 Гц |
| Глубина кодирования b |
8, 16, 24 бит |
| Каналы k |
1 (моно), 2 (стерео), 4 (квадро), 8 |
пример
// Стерео, 48 кГц, 16 бит, 2 мин
V = 48000 × 16 × 120 × 2 = 184 320 000 бит
= 23 040 000 байт ≈ 21,97 МБ
На ИТМО звук встречается реже. Главное — не перепутать кГц и Гц, не забыть каналы.
5Комбинаторный подсчёт (ключевая идея ИТМО)
На ИТМО не просто дают число цветов — его нужно вычислить через комбинаторику.
Формулы, которые нужны
формулы
// Сочетания (без повторений, порядок не важен)
C(n,k) = n! / (k! × (n−k)!)
// Размещения (порядок важен)
A(n,k) = n! / (n−k)!
// Перестановки
P(n) = n!
// Размещения с повторениями
nk // k позиций, n вариантов на каждую
Типовые сюжеты ИТМО
| Сюжет |
Формула подсчёта |
Затем |
| Блок 4×4 с 8 чёрными из 16 |
C(16,8) = 12870 |
⌈log₂(12870)⌉ = 14 бит |
| Блок 3×3, не менее 5 чёрных |
C(9,5)+C(9,6)+C(9,7)+C(9,8)+C(9,9) |
⌈log₂(…)⌉ |
| Слово длины L из алфавита A |
AL |
⌈log₂(AL)⌉ = L × ⌈log₂(A)⌉ |
| Палитра из N цветов, RGB по r бит |
(2r)³ = 23r |
i = ⌈log₂(N)⌉ на пиксель |
Лайфхак: C(n,k) для маленьких n считай через треугольник Паскаля (держи в голове до n=16).
6Паттерн ИТМО: «Петя vs Вася»
Это стержневой паттерн задачи 2 финала и отбора:
структура задачи
1. Дан объект (текст, изображение, звук)
2. Петя кодирует методом А → объём V_A
3. Вася кодирует методом Б → объём V_Б
4. Дана разница: V_A − V_Б = Δ байт (или бит)
5. Найти: параметр (мощность алфавита, размер блока…)
Алгоритм решения
метод
Шаг 1. Записать V_A через параметры.
Шаг 2. Записать V_Б через параметры (здесь «фишка»).
Шаг 3. Подставить V_A − V_Б = Δ.
Шаг 4. Решить уравнение (часто с ⌈log₂(x)⌉ — перебор по x).
Шаг 5. Проверить единицы: бит/байт/КБ.
Главная ловушка: ⌈log₂(x)⌉ — кусочно-постоянная функция. Уравнение с ней НЕ решается алгебраически — нужно подбирать x. Приём: перебери k = 1,2,3,… — это число бит. При каждом k определи диапазон x: 2k−1 < x ≤ 2k. Подставь и проверь.
7RLE и блочное кодирование
RLE (Run-Length Encoding)
Текст разбивается на серии одинаковых символов. Каждая серия — пара (длина, символ):
формула
V_RLE = S × (b_len + b_sym) бит
// S — количество серий в тексте
// b_sym = ⌈log₂(A)⌉ — бит на код символа
// b_len = ⌈log₂(M)⌉ — бит на длину серии
// M — максимальная длина серии
Тонкость ИТМО: два варианта b_len
финал 2022
// Вася: b_len по максимальной длине серии M
b_len = ⌈log₂(M)⌉
// Таня: b_len по числу РАЗЛИЧНЫХ длин D
b_len = ⌈log₂(D)⌉
// D может быть намного меньше M
// → два разных объёма → система из двух уравнений
Блочное кодирование
формула
V_блок = (W/n × H/n) × ⌈log₂(D)⌉ бит
// D — число различных допустимых блоков
// Без ограничений: D = 2^(n²)
// С ограничением «ровно k чёрных»: D = C(n², k)
8Энтропия Шеннона (теоретический предел)
Формула Хартли работает, когда все N вариантов равновероятны. Если символы встречаются с разной частотой, минимальная средняя длина кода определяется энтропией Шеннона:
Что даёт эта формула
H — это нижняя граница средней длины кода. Ни один код (даже Хаффман) не может дать среднюю длину меньше H. При этом Хаффман всегда укладывается в H + 1.
пример
// Частоты: A = 1/2, B = 1/4, C = 1/8, D = 1/8
H = −(1/2·log₂(1/2) + 1/4·log₂(1/4) + 1/8·log₂(1/8) + 1/8·log₂(1/8))
= −(1/2·(−1) + 1/4·(−2) + 1/8·(−3) + 1/8·(−3))
= −(−0.5 − 0.5 − 0.375 − 0.375)
= 1.75 бит/символ
// Хаффман для этих частот даёт ровно 1.75 — совпадение!
// Так бывает, когда все pᵢ — степени двойки.
когда не совпадает
// Частоты: A = 1/3, B = 1/3, C = 1/3
H = −3 × (1/3 · log₂(1/3)) = log₂(3) ≈ 1.585 бит/символ
// Хаффман: A=0, B=10, C=11 → средняя длина:
// 1/3·1 + 1/3·2 + 1/3·2 = 5/3 ≈ 1.667
// 1.667 > 1.585, но 1.667 < 1.585 + 1 ✓
Частные случаи
| Распределение |
H |
Комментарий |
| Все N равновероятны: p = 1/N |
log₂ N |
Совпадает с Хартли |
| Один символ p = 1 |
0 |
Нет неопределённости |
| Два символа: p, 1−p |
−p log₂ p − (1−p) log₂(1−p) |
Макс. при p = 1/2 → H = 1 |
На ИТМО: Шеннон появляется в задачах вида «оценить минимальный средний объём на символ» или «доказать, что код Хаффмана оптимален». Считать H обычно не просят — но понимание нужно, чтобы не путать Хартли (равновероятные) и Шеннона (произвольные частоты).
9Чек-лист формул
| Что кодируем |
Формула |
| Бит на символ |
K = ⌈log₂(A)⌉ |
| Текст |
V = L × ⌈log₂(A)⌉ |
| Текст + кодовая таблица |
V = M × 16 + L × ⌈log₂(M)⌉ |
| Растровое изображение |
V = W × H × ⌈log₂(Colors)⌉ |
| Изображение блоками |
V = (W/n × H/n) × ⌈log₂(D)⌉ |
| Звук |
V = f × b × t × k |
| RLE |
V = S × (⌈log₂(M)⌉ + ⌈log₂(A)⌉) |
| Энтропия Шеннона |
H = −∑ pᵢ log₂ pᵢ (нижняя граница ср. длины) |
| Сочетания |
C(n,k) = n! / (k!(n−k)!) |
| Единицы |
1 Б = 8 бит, 1 КБ = 1024 Б, 1 МБ = 1024 КБ |
Проверь себя8 заданий
1 / 8