2.3.3.     КОДИРОВАНИЕ ПРИ ПЕРЕДАЧЕ И ХРАНЕНИИ

Информационный процесс кодирования информации встречается в нашей жизни на каждом шагу. Любое общение между людьми происходит именно благодаря тому, что они научились выражать образы, чувства и эмоции с помощью специально предназначенных для этого знаков и сигналов – звуков, жестов, букв и пр.

Одну и ту же информацию мы можем выразить разными способами.

Пример 1

Каким образом можно сообщить об опасности?

1. Если на вас напали, вы можете просто крикнуть «Караул!» (англичанин крикнет «Help me!»).

2. Если имеется прибор под высоким напряжением, то требуется оставить предупреждающий знак (рисунок черепа или молнии).

В каждом из этих примеров необходимо знать правило, по которому отображается информация, правило кодирования. Такое правило назовем кодом.

Код (фр. code – кодекс, свод законов). Начиная с середины XIX века это слово, помимо основного значения, означало книгу, в которой словам естественного языка сопоставлены группы цифр или букв.

Чаще всего кодирование – это процесс представления информации в виде знаков (поскольку дискретные сигналы воспринимать и обрабатывать проще, чем непрерывные).

Знак вместе с его смыслом называют символом.

Используемый для кодирования конечный набор отличных друг от друга знаков называется алфавитом. Существует множество алфавитов.

· алфавит кириллических букв {А, Б, В, Г, Д, Е, …};

· алфавит латинских букв {А, В, С, D, E, F, …};

· алфавит десятичных цифр {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

· алфавит знаков зодиака;

· набор знаков азбуки Брайля для слепых;

· набор китайских идеограмм;

· математическая символика;

· набор знаков генетического кода {А, Ц, Г, Т}.

Важнейшие технические коды для кодирования текстов, записанных на естественных языках, возникли с появлением электрического телеграфа, например:

· азбука Морзе;

· набор знаков второго международного телеграфного кода (телекс).

При кодировании информации для технических устройств особое значение имеют наборы, состоящие всего из двух знаков: {+, -}; {•, -}; {0, 1}; {да, нет}.

Алфавит, состоящий из двух знаков, называют двоичным, а каждый знак из этого алфавита – двоичным знаком.

Кодирование используется для представления информации в виде, удобном для хранения и передачи.

Передача сообщений всегда осуществляется во времени. Процесс кодирования также требует определенного количества времени, которым зачастую нельзя пренебрегать. При кодировании могут ставиться определенные цели и применяться различные методы. Наиболее распространенные цели кодирования:

· экономность (уменьшение избыточности сообщения, повышение скорости передачи или обработки);

· надежность (защита от случайных искажений);

· сохранность (защита от нежелательного доступа к информации);

· удобство физической реализации (двоичное кодирование информации в ЭВМ);

· удобство восприятия (схемы, таблицы).

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

· разговорные языки (русский, английский, хинди и др., всего более 2000);

· язык мимики и жестов;

· язык рисунков и чертежей;

· языки науки (языки математики, химии и т. д.);

· языки искусства (языки музыки, живописи, скульптуры);

· специальные языки (эсперанто, морской семафор, азбука Морзе, азбука Брайля для слепых и т. д.);

· языки программирования.

Для получения исходных символов по кодам символов применяют процедуру декодирования. При этом обязательно соблюдение условия: код должен быть однозначным, то есть одному исходному знаку должен соответствовать точно один код и наоборот.

Кодирование – это представление сигнала в определенной форме.

Декодирование –  это получение исходных символов по кодам символов.

Виды кодирования зависят от поставленной цели.

Кодирование по образцу – каждый знак дискретного сигнала представляется знаком или набором знаков того алфавита, в котором выполняется кодирование. Кодирование по образцу используется, например, для ввода информации в компьютер с целью ее внутреннего представления.

Пример 2

Для перевода символов, вводимых с клавиатуры, в числовой код, хранящийся в памяти компьютера, используется кодовая таблица ASCII (American Standard Code for Information Interchange – американский стандартный код для обмена информацией), в которой каждому символу алфавита, а также множеству специальных управляющих команд соответствует числовой код.

Криптографическое кодирование, или шифрование, используется тогда, когда нужно защитить информацию от несанкционированного доступа. Существует два основных широко применяющихся сегодня способа криптографического кодирования: симметричное кодирование с закрытым ключом и асимметричное кодирование с открытым ключом. При симметричном кодировании с закрытым ключом для кодирования и декодирования данных применяется один и тот же ключ. Этот ключ должен быть по безопасным каналам доставлен стороне, осуществляющей декодирование, что делает шифрование с симметричным ключом уязвимым. Напротив, при шифровании с асимметричным ключом сторона, осуществляющая декодирование, публикует так называемый открытый ключ (public key), который применяется для кодирования сообщений, а декодирование осуществляется другим – закрытым ключом (private key), известным только принимающей стороне. Такая схема делает асимметричный способ кодирования высоконадежным. По этой причине в последнее время он приобрел массовую популярность.

Пример 3

Во множестве шпионских фильмов-боевиков основным вопросом при захвате агента противника было получение ключей к шифрам. Получение ключа давало возможность прочесть все перехваченные ранее сообщения и сразу получить множество полезной информации. Но эта возможность достижима только тогда, когда речь идет о симметричных ключах. Получение публичного асимметричного ключа в этом смысле не дает никаких преимуществ, поскольку открытый ключ позволяет кодировать сообщения, но не может применяться для их декодирования.

Оптимальное кодирование служит для устранения избыточности данных путем снижения среднего числа символов кодового алфавита, предназначенных для представления одного исходного символа. Оптимальное кодирование обычно используется в архиваторах. В большинстве современных программ, предназначенных для оптимального кодирования (сжатия) данных, применяются одни и те же базовые алгоритмы.

Статистическое кодирование базируется на предварительном вычислении частоты повторения одних и тех же кодов в сообщении и составлении таблицы кодирования, позволяющей оптимальным образом расположить результирующий код. Таблица кодирования в этом случае должна стать неотъемлемой частью закодированных данных (методы Хаффмена, Шэннона-Фано, арифметическое кодирование).

Словарное кодирование основано на нахождении повторяющихся последовательностей символов в сообщении (слов) и замене каждого повторяющегося слова ссылкой на его первое вхождение.

В этом случае вместе с закодированным сообщением необходимо хранить (передавать) словарь. К алгоритмам словарного кодирования относятся LZ77, LZ78, LZSS, LZW.

Во многих современных программах-архиваторах применяется последовательное (двухшаговое) использование методов статистического и словарного кодирования, позволяющее достигнуть наилучшей степени сжатия данных.

Помехозащищенное кодирование служит для передачи данных по каналам связи и учитывает возможность возникновения помех и связанного с этим искажения или утраты части данных. При помехозащищенном кодировании избыточность не снижается, а, наоборот, увеличивается, тем самым обеспечивается возможность определения факта потери или искажения информации. Существует два основных типа помехозащищенного кодирования:

· кодирование с фиксацией ошибок обладает сравнительно небольшой избыточ¬ностью, позволяющей зафиксировать на приемной стороне факт появления в сообщении ошибки. В случае обнаружения ошибки сообщение передается повторно;

· кодирование с коррекцией ошибок еще более избыточно, что позволяет не только обнаружить возникшую при передаче по каналу связи ошибку, но и исправить ее. Недостатком этого вида кодирования является значительное (примерно в 3 раза) увеличение объема передаваемых данных. По этой причине оно используется гораздо реже, чем кодирование с фиксацией ошибок.