Бит, байт и формула Хартли
Бит — наименьшая единица информации: одна двоичная цифра, 0 или 1. Цепочкой из $i$ бит можно закодировать $2^i$ разных значений.
Если $N$ не степень двойки, округляем вверх: $i = \lceil \log_2 N \rceil$.
| Единица | Сколько |
|---|---|
| 1 байт | 8 бит = $2^3$ бит |
| 1 Кбайт | 1024 байт = $2^{10}$ байт = $2^{13}$ бит |
| 1 Мбайт | 1024 Кбайт = $2^{20}$ байт |
| 1 Гбайт | 1024 Мбайт = $2^{30}$ байт |
Пример. Алфавит из 33 букв. $2^5 = 32 \lt 33 \le 64 = 2^6$, значит на букву нужно 6 бит: пяти бит хватает только на 32 символа.
Проверь себя. Сколько бит нужно на один символ при равномерном кодировании алфавита из 50 символов?
Ответ: 6
Объём текста (ОГЭ-1)
Кодировки: КОИ-8, Windows-1251 — 8 бит (1 байт) на символ; UTF-16 (одна из кодировок Unicode) — 16 бит (2 байта).
Пример. Реферат: 8 страниц, на странице 40 строк по 64 символа, кодировка — 16 бит на символ.
$I = 8 \cdot 40 \cdot 64 \cdot 2\text{ байт} = 40\,960\text{ байт} = 40\text{ Кбайт}$.
ОГЭ-1 обычно устроено так: дано предложение-перечисление, из него вычеркнули одно слово вместе с лишней запятой и пробелом, и размер уменьшился на X байт. Нужно найти слово.
Схема. Кодировка 16 бит = 2 байта на символ. Предложение уменьшилось на 20 байт → удалено 10 символов. Из них 2 — запятая и пробел, значит в слове 8 букв.
Изображение и звук (ЕГЭ-7)
Звук: $I = f \cdot i \cdot k \cdot t$, где $f$ — частота дискретизации (Гц), $i$ — разрешение (бит), $k$ — число каналов (моно 1, стерео 2, квадро 4), $t$ — время (с).
Пример 1. Картинка 1024 × 768 пикселей, 256 цветов. $i = 8$ бит = 1 байт на пиксель. $I = 1024 \cdot 768$ байт $= 768$ Кбайт.
Пример 2. Под изображение 640 × 480 отведено 225 Кбайт. Бит на пиксель: $\dfrac{225 \cdot 2^{13}}{640 \cdot 480} = 6$, значит максимум $2^6 = 64$ цвета.
Неравномерный код и условие Фано (ОГЭ-2, ЕГЭ-4)
В неравномерном коде у букв коды разной длины: частым буквам дают короткие коды — сообщение получается короче. Но декодировать его можно, только если код однозначен.
Пример. Коды: А — 0, Б — 10, В — 110. Сообщение 0101100 читаем слева: 0 → А, 10 → Б, 110 → В, 0 → А. Ответ: АБВА.
Кодовое дерево. Каждый код — путь от корня: 0 — влево, 1 — вправо. Код Фано — это когда все буквы стоят в листьях дерева. Свободные ветки показывают, какие коды ещё можно выдать.
ЕГЭ-4. Известны коды А — 0, Б — 100, В — 101. Нужны коды ещё для трёх букв с наименьшей суммарной длиной.
Заняты ветки 0 и 10*. Свободна только ветка 11. Трём буквам в ней нужно три листа: 110, 1110, 1111. Сумма длин $3 + 4 + 4 = 11$.
Пароли и номера (ЕГЭ-11)
Схема задания: пароль или номер из $L$ символов, алфавит из $N$ символов. Каждый символ кодируется одинаковым минимальным числом бит, а весь пароль — минимальным целым числом байт.
2) пароль: $L \cdot i$ бит → округлить вверх до целых байт;
3) умножить на число пользователей (и прибавить дополнительные сведения, если есть).
Пример. Пароль из 11 символов; алфавит — 26 латинских заглавных букв и 10 цифр, всего 36 символов. $i = 6$ бит ($2^5 = 32 \lt 36$). $11 \cdot 6 = 66$ бит → 9 байт (8 байт = 64 бита мало).
from math import ceil, log2
N, L = 36, 11
i = ceil(log2(N)) # 6 бит на символ
b = ceil(L * i / 8) # 9 байт на пароль
print(i, b)