Кодирование — это представление информации в виде последовательности символов (сигналов). В компьютерах информация кодируется с помощью двоичного кода — последовательности нулей и единиц.
Каждому символу (букве, цифре, знаку) ставится в соответствие уникальный код — последовательность из 0 и 1.
| Буква | А | Б | В | Г |
|---|---|---|---|---|
| Код | 00 | 01 | 10 | 11 |
Слово ВАГА будет закодировано как
10 00 11 00 или 10001100.
При равномерном кодировании все символы кодируются кодами одинаковой длины.
| Буква | А | Б | В | Г |
|---|---|---|---|---|
| Код | 000 | 001 | 010 | 011 |
Все коды имеют длину 3. Расшифровка однозначна: разбиваем сообщение на группы по 3 символа.
При неравномерном кодировании разные символы могут кодироваться кодами разной длины. Часто встречающиеся символы кодируются короткими кодами, редкие — длинными.
| Буква | А | Б | В | Г |
|---|---|---|---|---|
| Код | 0 | 10 | 110 | 111 |
Коды имеют разную длину: от 1 до 3 символов. Но как понять, где заканчивается один код и начинается другой?
Ни одно кодовое слово не является началом другого кодового слова.
Это гарантирует, что сообщение можно расшифровать однозначно, читая его слева направо.
| Буква | А | Б | В | Г |
|---|---|---|---|---|
| Код | 0 | 10 | 110 | 111 |
✓ Код 0 не является началом кодов 10,
110, 111
✓ Код 10 не является началом кодов 110,
111
✓ Код 110 не является началом кода 111
| Буква | А | Б | В |
|---|---|---|---|
| Код | 0 | 01 | 10 |
✗ Код 0 является началом кода 01 — условие
Фано нарушено!
Сообщение 01 можно расшифровать как
АБ или как В — неоднозначно!
Ни одно кодовое слово не является окончанием другого кодового слова.
Это гарантирует, что сообщение можно расшифровать однозначно, читая его справа налево.
| Буква | А | Б | В | Г |
|---|---|---|---|---|
| Код | 0 | 01 | 011 | 111 |
✓ Код 0 не является окончанием кодов 01,
011, 111
✓ Код 01 не является окончанием кодов 011,
111
✓ Код 011 не является окончанием кода 111
Условие Фано можно проверить с помощью двоичного дерева. Если все кодовые слова находятся в листьях дерева (на концах веток), то условие Фано выполняется.
Все буквы находятся в листьях — условие Фано выполняется. Если бы какая-то буква была во внутренней вершине, условие было бы нарушено.
Условие: От разведчика было получено сообщение:
Таблица кодов:
| Буква | А | Б | В | З | К | У | Я |
|---|---|---|---|---|---|---|---|
| Код | 00 | 01 | 1011 | 1100 | 1101 | 1110 | 1111 |
Условие: Расшифруйте сообщение
01100101000110111
| Буква | А | Е | И | Н | С | Т | Ц |
|---|---|---|---|---|---|---|---|
| Код | 11 | 000 | 001 | 010 | 011 | 100 | 101 |
0, ищите коды,
начинающиеся с 0
1, ищите коды,
начинающиеся с 1