Введение

Система правил для преобразования информации в другую форму или представление.

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

Теория

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

является кодом, исходный алфавит которого – множество , а целевой алфавит – множество . Используя расширение кода, закодированную строку 0011001 можно разбить на кодовые слова: 0 011 0 01, которые, в свою очередь, можно декодировать в последовательность исходных символов acab. Используя термины теории формальных языков, точное математическое определение этой концепции следующее: пусть S и T – два конечных множества, называемые исходным и целевым алфавитами соответственно. Код – это функция, отображающая каждый символ из S в последовательность символов над T. Расширение кода является гомоморфизмом из в , который естественным образом отображает каждую последовательность исходных символов в последовательность целевых символов.

Коды переменной длины

В этом разделе мы рассматриваем коды, которые кодируют каждый символ исходного (открытого) текста кодовым словом из некоторого словаря, а конкатенация таких кодовых слов дает закодированную строку. Коды переменной длины особенно полезны, когда символы открытого текста имеют разные вероятности; см. также энтропийное кодирование. Код префикса – это код, обладающий "свойством префикса": в системе нет допустимого кодового слова, которое являлось бы префиксом (началом) любого другого допустимого кодового слова в наборе. Кодирование Хаффмана – наиболее известный алгоритм для построения кодов префиксов. Коды префиксов часто называют "кодами Хаффмана", даже если код не был получен с помощью алгоритма Хаффмана. Другими примерами кодов префиксов являются телефонные коды стран, части ISBN, обозначающие страну и издателя, а также коды вторичной синхронизации, используемые в стандарте беспроводной связи UMTS WCDMA 3G. Неравенство Крафта характеризует множества длин кодовых слов, которые возможны в коде префикса. Практически любой однозначно декодируемый код, отображающий один символ в несколько, не обязательно являющийся кодом префикса, должен удовлетворять неравенству Крафта.

Коды исправления ошибок

Коды также могут использоваться для представления данных способом, более устойчивым к ошибкам при передаче или хранении. Этот так называемый код, исправляющий ошибки, работает за счет включения тщательно продуманной избыточности в сохраняемые (или передаваемые) данные. Примеры включают коды Хэмминга, Рида — Соломона, Рида — Мюллера, Уолша — Адамара, Бозе — Чаудхури — Хоккенгема, турбо-коды, коды Голея, коды алгебраической геометрии, коды с контролем четности низкой плотности и коды пространства-времени. Коды обнаружения ошибок могут быть оптимизированы для обнаружения кратковременных (импульсных) или случайных ошибок.

Коды, используемые в сообщениях для краткости

Кабельный код заменяет слова (например, «корабль» или «счет-фактура») более короткими, позволяя передавать ту же информацию меньшим количеством символов, быстрее и дешевле. Коды могут использоваться для краткости. Когда телеграфные сообщения были передовым средством быстрой связи на большие расстояния, были разработаны сложные системы коммерческих кодов, кодировавших целые фразы в отдельные группы (обычно пятиминутные), так что телеграфисты стали знакомы с такими "словами", как BYOXO («Вы пытаетесь уклониться от нашей сделки?»), LIOUY («Почему вы не отвечаете на мой вопрос?»), BMULD («Ты подлец!») или AYYLU («Закодировано нечетко, повторите яснее»). Кодовые слова выбирались по разным причинам: длина, произносимость и т.д. Значения подбирались в соответствии с потребностями: коммерческие переговоры, военные термины для военных кодов, дипломатические термины для дипломатических кодов, любые и все вышеперечисленное для шпионских кодов. Кодовые книги и издательства кодовых книг получили широкое распространение, в том числе одно, использовавшееся как прикрытие для Американской Черной палаты под руководством Герберта Ярдли между Первой и Второй мировыми войнами. Основной целью большинства этих кодов была экономия на стоимости кабельной связи. Использование кодирования данных для сжатия данных предшествует компьютерной эре; ранним примером является телеграфный код Морзе, в котором более часто используемые символы имеют более короткие представления. Такие методы, как кодирование Хаффмана, теперь используются компьютерными алгоритмами для сжатия больших файлов данных в более компактный формат для хранения или передачи.

Кодировки символов

Кодировки символов — это представления текстовых данных. Определенная кодировка символов может быть связана с конкретным набором символов (совокупностью символов, которые она может представлять), хотя некоторые наборы символов имеют несколько кодировок, и наоборот. Кодировки символов можно широко классифицировать по количеству байтов, необходимых для представления одного символа: существуют однобайтовые кодировки, многобайтовые (также называемые широкими) кодировки и кодировки переменной ширины (также называемые переменной длины). Самые ранние кодировки символов были однобайтовыми, наиболее известным примером которой является ASCII. ASCII до сих пор используется, например, в заголовках HTTP. Однако однобайтовые кодировки не могут отображать наборы символов, содержащие более 256 символов. Скрипты, требующие больших наборов символов, такие как китайский, японский и корейский, должны быть представлены с помощью многобайтовых кодировок. Ранние многобайтовые кодировки имели фиксированную длину, то есть, хотя каждый символ был представлен более чем одним байтом, все символы использовали одинаковое количество байтов ("длина слова"), что делало их удобными для декодирования с помощью таблицы соответствий. Кодировки переменной ширины — это подмножество многобайтовых кодировок. Они используют более сложную логику кодирования и декодирования для эффективного представления больших наборов символов, при этом сохраняя более короткие представления для наиболее часто используемых символов или обеспечивая обратную совместимость. К этой группе относится UTF-8, кодировка набора символов Unicode; UTF-8 является наиболее распространенной кодировкой текстовых данных в Интернете.

Генетический код

Биологические организмы содержат генетический материал, который используется для контроля их функционирования и развития. Этот материал – ДНК, содержащая единицы, называемые генами, из которых образуется матричная РНК (мРНК). мРНК, в свою очередь, служит для синтеза белков посредством генетического кода, в котором последовательность из трех нуклеотидов (кодон) из четырех возможных может кодировать одну из двадцати аминокислот. Последовательность кодонов определяет соответствующую последовательность аминокислот, формирующих молекулу белка; специальный тип кодона, называемый стоп-кодоном, сигнализирует об окончании синтеза.

Код Гёделя

В математике код Гёделя лег в основу доказательства теоремы Гёделя о неполноте. Суть заключалась в том, чтобы сопоставить математическую запись натуральному числу (используя нумерацию Гёделя).

Другое

Существуют коды, использующие цвета, такие как светофоры, цветовая маркировка номиналов электрических резисторов или цветовой код мусорных баков, предназначенных для определенных видов отходов (бумага, стекло, органические отходы и т.д.). В маркетинге купонные коды могут использоваться для получения финансовой скидки или возврата средств при покупке товара у (обычно интернет-)магазина. В военной сфере определенные звуковые сигналы с использованием горна применяются для различных целей: для обозначения времени суток, для подачи команд пехоте на поле боя и т.д. Системы коммуникации для людей с нарушениями чувств, такие как язык жестов для глухих и шрифт Брайля для слепых, основаны на кодах движения или тактильных кодах. Музыкальные ноты – наиболее распространенный способ кодирования музыки. Определенные игры имеют собственные системы кодирования для записи матчей, например, шахматная нотация.

Криптография

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

Коды и аббревиатуры

Акронимы и аббревиатуры можно считать кодами, и в некотором смысле все языки и системы письма являются кодами для человеческой мысли. Коды аэропортов Международной ассоциации воздушного транспорта – это трехбуквенные коды, используемые для обозначения аэропортов и для багажных бирок. Коды станций аналогичным образом используются на железных дорогах, но обычно являются национальными, поэтому один и тот же код может применяться к разным станциям, если они находятся в разных странах. Иногда кодовое слово обретает самостоятельное существование (и значение), в то время как исходное эквивалентное выражение забывается или, по крайней мере, больше не сохраняет точного смысла, приписываемого кодовому слову. Например, число «30» широко использовалось в журналистике для обозначения «конец сообщения», а также применялось в других контекстах для обозначения «конец».