Дискретная математика:
логика, группы, графы, фракталы

Акимов О.Е.

3.3. Кодирование, автоматы и группы на графах

Типы и назначение кодирования

Кодирование производится с целью:
1) сокращения символьного текста при ограниченном количестве кодовых символов — оптимальное кодирование;
2) обнаружения и исправления ошибок при передаче и хранении информации — корректирующее кодирование;
3) защиты информации от несанкционированного доступа — секретное кодирование.

Редко когда все перечисленные задачи выступают отдельно; на практике чаще бывает совмещение двух или даже трех целей. Однако для лучшего понимания предмета разберем каждый пункт в отдельности, начиная с оптимального кодирования.

Предположим, нужно передать четыре сообщения — a1, a2, a3, a4. Эти сообщения можно закодировать так, как показано в табл. 3.10.

Таблица 3.10

Сообщения a1 a2 a3 a4
Коды 00 01 10 11

При таком кодировании вероятность появления сообщений не учитывалась или предполагалась одинаковой для всех четырех сообщений (p = 0.25). Между тем их появление в информационном тексте может происходить с различной частотой,например, такой: p1 = 0.5, p2 = 0.25, p3 = 0.125, p4 = 0.125. Фано, учитывая вероятность сообщений, предложил более оптимальное кодирование (табл. 3.11).

Таблица 3.11

Сообщения a1 a2 a3 a4
Коды 1 01 001 000

Показателем экономичности кода служит средняя длина кодового слова, которая определяется как

,

где li — длина кодового слова ai , pi — вероятность появления ai, n — число сообщений.

Для кодировки сообщений по табл. 3.10 средняя длина равна 2, а по табл. 3.11 — 1.75. Следовательно, закодированный по методике Фано информационный текст окажется короче.

На первый взгляд, кодирование по методу Фано кажется избыточным, поскольку коды, представленные табл. 3.11, можно сократить, например так, как это показано в табл. 3.12.

Таблица 3.12

Сообщения a1 a2 a3 a4
Коды 1 0 01 00

Теперь возьмем следующий закодированный текст: 00101000. Согласно табл. 3.12, данный текст не может быть однозначно дешифрован, так как непонятно, что, собственно, подразумевается: сообщения вида — a2, a3, a3, a4, a2; или — a4, a1, a3, a2, a2, a2; или — a2, a2, a1, a2, a1, a2, a4 и т.д. Расшифровка же текста по табл. 3.11 производится однозначно — a3, a2, a4. Из-за этого замечательного свойства код Фано называется префексным. Никакое кодовое слово префексного кода не является началом другого кодового слова. Наряду с методом Фано, существует префексное кодирование по методу Хаффмана, экономичность которого выше первого.

Для защиты передаваемых текстов от помех используются корректирующие коды, которые основываются на информационной избыточности. Самый простой способ создания избыточности достигается многократным дублированием передаваемых символов, т.е. образование символьных блоков: 0 → 000, 1 → 111. В случае сбоя, решение при дешифровке принимается по большинству оставшихся однотипных символов в блоке. Сами блоки могут включать большее (чем 3) число символов, тогда степень защищенности текста окажется выше. Если длину блока выбрать заранее достаточно большой, то практически любые ошибки можно исключить, правда, при этом скорость передачи информации упадет пропорционально количеству символов в блоке.

Существует очень простая, но эффективная защита информационного текста от одиночного сбоя, которая требует минимальной избыточности в один дополнительный символ. Это — проверка на четность. При шифровке к тексту добавляется 0 или 1 в зависимости от четности или нечетности суммы единиц в тексте. Если при дешифровке обнаружится нечетное число единиц, значит, текст был передан неверно; если четное — ошибки при передаче не было. Корректирующий код можно построить с помощью квадратной матрицы, которая не только обнаруживает одиночную ошибку, но и определяет ее местонахождение. Пусть требуется передать девятиразрядное информационное слово a = a11 ... a33. Тогда к нему прибавляют семиразрядное корректирующее слово a' = a41 ... a14, символы которого удовлетворяют совокупности проверочных соотношений:

A = ,

(суммирование осуществляется по mod (2)).

Предположим, получено следующее закодированное сообщение:

A = a a' = 011001011 1010000.

Размещаем его в матрице 4 ´ 4 и составляем проверочные равенства:

A = ,

Проверочные соотношения для a24, и a41 ошибочны; следовательно, вместо a21 = 0, нужно брать a21 = 1; исходная последовательность должна была выглядеть как 011101011 1010000.

Для засекречивания информации исходные сообщения могут кодироваться с помощью адресной матрицы. Дело в том, что любое сообщение хранится на информационном носителе по определенному адресу и считывается по определенному коммуникационному каналу. Пусть сообщение a хранится по адресу A, который выражается трехзначным числом — A0A1A2. Коммуникационные каналы обозначим как c1, c2, c3 и c4. Адресная матрица программируется так, чтобы на ней происходило смешивание адресов и коммуникационных каналов, например, в следующем конкретном виде:

c1' = c1A0A1A2 + c4A0A1A2 + c3A0A1A2 + c2A0A1A2,
c2' = c4A0A1A2 + c2A0A1A2 + c1A0A1A2 + c3A0A1A2,
c3' = c3A0A1A2 + c1A0A1A2 + c2A0A1A2 + c4A0A1A2,
c4' = c2A0A1A2 + c3A0A1A2 + c4A0A1A2 + c1A0A1A2.

Если информационное сообщение имеет адрес 100 (A0A1A2), то коммуникационный канал c1' подключается к каналу c1, канал c2' — к инверсному каналу c4, c3' — к инверсному c3 и, наконец, c4' — к c2; если идет сообщение с адресом 101 (A0A1A2), то осуществляется подключение канала c1' к инверсному c4 и т.д. В результате перемешивания каналов информационные сообщения попадают на чужие адресные места, так что несанкционированное считывание становится невозможным.


 
  


Hosted by uCoz