• азбука Морзе;
• набор знаков второго международного телеграфного кода (телекс).
При кодировании информации для технических устройств особенно важное значение имеют наборы, состоящиевсего из двух знаков:{+, -}; {•, -}; {0, 1}; {да, нет}.
Алфавит, состоящий из двух знаков, называют двоичным, а каждый знак из этого алфавита — двоичным знаком.
Кодирование используется для представления информации в виде, удобном для хранения и передачи. Рассмотрим простейшие задачи кодирования и декодирования.
Пример. Попробуем закодировать числа от 0 до 100, не используя арабских или римских цифр.
Прежде всего необходимо придумать алфавит или выбрать какой-либо из известных.
Можно ли использовать в качестве «букв» алфавита знаки
или гласные буквы русского алфавита?Да, можно выбрать любой набор отличающихся друг от друга знаков.
Каждому числу, которое нужно закодировать, поставим в соответствие одну «букву» выбранного нами алфавита. Например:
Во всех трех случаях из приведённого примера мы не решили поставленной задачи. Мы не смогли закодировать числа от 0 до 100, используя предложенные алфавиты. Получается, что наш алфавит обязательно должен состоять из 101 знака? Но с помощью всего десяти арабских цифр вы можете записать любое число. А римских цифр для кодирования первых 101 числа требуется всего пять: I, V, X, L, С.
Нужен другой подход, другое правило.
Покажем, что используя всего три символа, например
, можно закодировать (зашифровать, представить) любое число. Для этого каждое число будем представлять не одним, а несколькими символами из нашего алфавита.В нашем правиле кодирования появляется понятие «длина кода».
Длинойкоданазовем количествознаков, которое используется для представления кодируемого числа (или слова).
То есть термин «код» используется в двух смыслах — как правило кодирования и как набор знаков для кодирования некоторого символа.
Количество знаков в алфавите кодирования и длина кода — совершенно разные вещи. Например, в русском алфавите 33 буквы, а слова могут быть длиной в 1, 2, 3, ... буквы.
Посмотрим, сколько чисел мы можем закодировать, если длина кода составляет не более 2 знаков.
Воспользуемся правилом, схематично представленным на рис. 2.
Рис. 2. Схематичное представление правила кодирования
Если посмотреть на схему, то видно, что на первое место в каждом коде ставится код предыдущего уровня, а к нему дописываются по одному все знаки алфавита в заданном алфавитном порядке. Такое правило кодирования позволяет перебрать все возможные коды и никогда не повториться.
Из таблицы (справа от рис. 2) видно, что при длине кода не более 2 знаков всего можно закодировать 12 (3 + 9) разных чисел. Чтобы закодировать числа 12, 13, ..., следует увеличить длину кода.
Пример.
Рассмотрим задачу, обратную к задаче кодирования из предыдущего примера. Есть закодированная информация:
. Коды вам известны. Длина кода — не более 2 знаков. Определите исходное число. Так как длина кода может быть 1 или 2, то• могли быть закодированы три числа — 1, 2, 0;
• могли быть закодированы два числа — 1, 9;
• могли быть закодированы два числа — 8, 0.
Все три решения справедливы. Как вы думаете, почему? Есть ли способ, который приведет нас к однозначному решению поставленной задачи?
Коды переменной (непостоянной) длины в технике встречаются довольно редко. Исключением является лишь код Морзе.
Пример. Взгляните на международную азбуку Морзе:
Для отправителя приведенная таблица выглядит вполне логично, ибо буквы в ней расположены в алфавитном порядке. Но для человека, получающего сообщения, она неудобна.
В каком же порядке следует расположить знак азбуки Морзе, чтобы получив сигнал, мы могли, не теряя времени, определить, какой букве он соответствует. Представим азбуку Морзе в виде дерева:
При получении сигнала — это либо точка, либо тире — записываем букву и спускаемся по дереву: если точка — влево от текущей вершины, если тире — вправо, если пауза — записываем букву текущей вершины, если длинная пауза — записываем букву и отмечаем конец слова.
По общепринятому правилу радистов продолжительность передачи точки равна продолжительности паузы, продолжительность передачи тире равна продолжительности передачи трех точек, продолжительность передачи пропуска (между буквами) равна продолжительности трех пауз.
Азбука Морзе — это пример троичногокодас набором знаков «точка», «тире», «пауза». Паузу в качестве разделителя между буквами и словами необходимо использовать, так как длина кода непостоянна.
В кодах с постоянной длиной закодированные символы могут следовать друг за другом непосредственно, без всяких разделителей. Местоположение этих символов устанавливается с помощью отсчета. И таким образом сообщение может быть раскодировано однозначно.
Наиболее простым для кодирования является двоичный алфавит. Чем меньше знаков в алфавите, тем проще должна быть устроена «машина» для распознавания (дешифровки) информационного сообщения. Однако чем меньше знаков в алфавите, тем большее их количество (большая длина кода) требуется для кодирования информации.
Вернемся к примеру с кодированием чисел. Будем использовать для представления (кодирования) чисел от 0 до 100 алфавит
и код постоянной длины. Какова должна быть длина кода?В случае, когда длина кода равна п, с помощью алфавита, состоящего из 3 знаков, можно закодировать 3n различных состояний (чисел, букв, комбинаций). Приведем одно из возможных объяснений. В каждой из п позиций может стоять один из 3-х знаков алфавита. Для первой позиции существует 3 возможности. Для каждой из этих возможностей рассмотрим 3 возможности для второй позиции — всего будем иметь 3*3 = 9 возможностей. Рассуждая далее аналогично для остальных позиций, получим
возможностей (комбинаций, состояний) расположения 3-х знаков в п позициях. Знаками двоичного алфавита можно закодировать 2n различных состояний; если имеется алфавит, состоящий из k знаков, то можно закодировать knразличных состояний.Итак, если алфавит состоит из kзнаков и используется код с постоянной длиной п, то можно закодировать
различных состояний.Пример.
Определим, какой длины должен быть код, чтобы, используя разные алфавиты, закодировать 10, 33, 100, 200, 1000 различных символов.
Проанализируйте таблицу:
Итак, для кодирования М различных символов кодом постоянной длины с помощью алфавита из kзнаков, требуется длина кода (с учетом того, что длина кода — это целое число), равная
В вычислительной технике для кодирования информации используется двоичный алфавит {0,1}. Это позволяет использовать достаточно простые устройства для представления и автоматического распознавания (дешифровки, декодирования) программ и данных. Конструкция декодирующего устройства максимально упрощается, ведь оно должно уметь различать всего два состояния (например, 1 — есть ток в цепи, 0 — тока в цепи нет). По этой причине двоичная система и нашла такое широкое применение.
В вычислительной технике в настоящее время широко используется двоичное кодирование с алфавитом {0,1}. Наиболее распространенными кодами являются ASCII (Americanstandardcodeforinformationinterchange — американский стандартный код для обмена информацией), ДКОИ-8, Win1251.
Передача сообщений всегда осуществляется во времени. Процесс кодирования также требует определенного количества времени, которым зачастую нельзя пренебрегать. При кодировании могут ставиться определенные цели и применяться различные методы. Наиболее распространенные цели кодирования:
• экономность (уменьшение избыточности сообщения, повышение скорости передачи или обработки);
• надежность (защита от случайных искажений);
• сохранность (защита от нежелательного доступа к информации);
• удобство физической реализации (двоичное кодирование информации в ЭВМ);
• удобство восприятия (схемы, таблицы).
Одно и то же сообщение можно закодировать разными способами, то есть выразить на разных языках. В процессе развития человеческого общества люди выработали большое число языков кодирования.
К ним относятся:
• разговорные языки (русский, английский, хинди и др., всего более 2000);
• язык мимики и жестов;
• язык рисунков и чертежей;
• языки науки (языки математики, химии и т. д.);
• языки искусства (языки музыки, живописи, скульптуры);
• специальные языки (эсперанто, морской семафор, азбука Морзе, азбука Брайля для слепых и т. д.);
Среди специальных языков особо выделим языкипрограммирования.