1. Двоичное кодирование
Принцип: Любая информация представляется комбинациями 0 и 1.
Примеры:
| Информация | Двоичный код |
|---|---|
| Буква «А» | 11000000 (ASCII) |
| Число 5 | 101 |
| Чёрный пиксель | 00 (в 4-цветной палитре) |
2. Равномерные vs Неравномерные коды
| Параметр | Равномерный код | Неравномерный код |
|---|---|---|
| Длина слов | Одинаковая | Разная |
| Пример | ASCII (8 бит) | Код Морзе |
| Эффективность | Низкая | Высокая |
| Декодирование | Простое | Требует условий |
Неравномерный код: Частые символы → короткие коды (пример: А=0, Б=10, В=110, Г=111).
3. Условие Фано
Цель: Гарантировать однозначное декодирование.
Правила:
- Прямое условие: Ни одно кодовое слово не совпадает с началом другого.
- Обратное условие: Ни одно кодовое слово не является окончанием другого.
Проверка кода:
| Код | Соответствие | Почему? |
|---|---|---|
А=0, Б=1 | ✅ Да | Нет общих префиксов |
А=0, Б=01 | ❌ Нет | «0» — начало «01» |
4. Дерево кодирования
Принцип: Построение бинарного дерева для префиксного кода.
Пример для А, Б, В, Г:
graph TD ROOT[ ] -- 0 --> A[А] ROOT -- 1 --> N1[ ] N1 -- 0 --> B[Б] N1 -- 1 --> N2[ ] N2 -- 0 --> B1[В] N2 -- 1 --> B2[Г]
Полученные коды:
- А:
0 - Б:
10 - В:
110 - Г:
111
5. Декодирование сообщений
Алгоритм:
- Читать биты до совпадения с кодовым словом
- Записать символ и перейти к следующим битам
Пример:
Сообщение: 110100111
Код: А=0, Б=10, В=110, Г=111
110→ В (остаток:100111)10→ Б (остаток:0111)0→ А (остаток:111)111→ Г
Результат: ВБАГ
6. Построение оптимального кода
Шаги (метод Хаффмана):
- Составить таблицу частот
- Построить дерево (объединять символы с min частотой)
- Назначить коды: левая ветвь =
0, правая =1
Пример частот:
| Символ | Частота |
|---|---|
| А | 40% |
| Б | 30% |
| В | 20% |
| Г | 10% |
Дерево Хаффмана:
graph TD A[А:40] -->|0| ROOT[100%] BC[Б+В+Г:60] -->|1| ROOT B[Б:30] -->|0| BC C[В+Г:30] -->|1| BC V[В:20] -->|0| C G[Г:10] -->|1| C
Коды:
- А:
0 - Б:
10 - В:
110 - Г:
111