"Информатика (в 2 частях)", Павлов Д.И., Полежаева О.А., Коробкова Л.Н. и др./ Под ред. Горячева А.В.
Кодирование помогает представить сообщение в форме, удобной для хранения, передачи или обработки. Для этого символам назначают кодовые обозначения, например двоичные комбинации из нулей и единиц. Чтобы вернуть исходное сообщение, код декодируют по тому же правилу. Длина кода зависит от числа символов алфавита и выбранного способа записи. Главное требование к коду — возможность однозначно восстановить сообщение.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Кодирование — преобразование сообщения в форму, удобную для хранения, передачи или обработки. Например, буквы можно заменить числами или комбинациями нулей и единиц. Такой способ нужен, когда исходное представление неудобно для устройства или канала связи. Правило замены должно быть известно тому, кто будет читать результат.
Декодирование — восстановление исходного сообщения по его коду. При этом кодовые обозначения заменяют исходными символами, пользуясь тем же правилом, что и при кодировании. Это нужно, чтобы получатель мог прочитать сообщение в привычном виде. Если правило применить неверно, результат может отличаться от исходного.
Кодовая таблица — правило соответствия символов исходного сообщения и кодовых обозначений. В ней напротив каждого символа записан его код, например букве «А» может соответствовать 00. Таблица нужна, чтобы кодировать и декодировать сообщения одинаково. При работе важно смотреть, в каком направлении выполняется замена.
Двоичный код — запись сообщения с помощью двух знаков, обычно 0 и 1. Из этих знаков составляют комбинации разной или одинаковой длины. Двоичная запись удобна компьютерам, потому что электронным устройствам легко различать два состояния. Поэтому двоичные коды широко применяются для представления данных.
Одно сообщение можно представить разными кодами, потому что задачи передачи, хранения и обработки отличаются. Для передачи важно, чтобы сообщение надёжно проходило по каналу, а для обработки компьютером — чтобы данные можно было удобно представить внутри устройства. Иногда короткий код экономит место, а иногда выбирают код, который проще читать или проверять. Следовательно, способ кодирования выбирают с учётом цели и условий работы.
Чтобы закодировать сообщение по таблице, каждому его символу сопоставляют кодовую комбинацию. Затем коды записывают в том же порядке, в каком идут символы исходного сообщения. Такой порядок сохраняет последовательность букв и позволяет получить целое закодированное сообщение. Таблица задаёт правило заранее, поэтому одинаковый символ при одинаковых условиях получает один и тот же код.
Кодирование и декодирование взаимно обратны, поскольку первое заменяет символы кодами, а второе выполняет соответствующие замены в обратную сторону. Если таблица и границы кодов известны, после декодирования можно получить исходную последовательность символов. Это работает только при точном соблюдении одного правила на обоих этапах. Иначе часть кодов может быть понята неправильно, и сообщение изменится.
Каждый двоичный разряд может принимать два значения: 0 или 1. Поэтому один разряд даёт 2 комбинации, два разряда — 4, три — 8; при n разрядах их число равно 2ⁿ. Чтобы выбрать длину равномерного кода для алфавита, сравнивают число его символов с числом доступных комбинаций. Берут наименьшее n, при котором комбинаций хватает на все символы.
Код должен позволять однозначно восстановить исходное сообщение, иначе одна и та же последовательность кодов может читаться по-разному. Например, при кодах разной длины начало одного кода может совпасть с другим целым кодом, и границы символов станут неясны. Тогда даже правильная таблица не поможет однозначно прочитать запись. Поэтому при выборе кода проверяют не только число комбинаций, но и возможность определить, где заканчивается каждый код.
| Характеристика | Равномерный код | Неравномерный код |
|---|---|---|
| Длина кодовых комбинаций | Одинаковая для всех символов | Может различаться |
| Возможность однозначного декодирования | При известной длине границы кодов легко определить | Нужно отдельно обеспечить однозначность чтения |
| Преимущество | Простое разделение последовательности на коды | Частым символам можно назначить короткие коды |
| Ограничение | Редкие и частые символы занимают одинаковое число разрядов | Без подходящего правила границы кодов могут быть неясны |
| Пример применения | Кодирование символов алфавита комбинациями фиксированной длины | Коды, в которых длина обозначения зависит от символа |
Сравнивайте сначала длину комбинаций, а затем выясняйте, как получатель определяет границы кодов. Равномерный код удобно читать по группам одинакового размера, тогда как для неравномерного требуется правило, исключающее двусмысленность. Преимущество каждого способа проявляется в зависимости от задачи.
Условие: в таблице А = 00, Б = 01, В = 10, Г = 11. Закодируйте слово «БАГ». Слово состоит из трёх символов, и для каждого нужно найти отдельную комбинацию. Коды в результате следует записать в исходном порядке.
Ответ: слову «БАГ» соответствует последовательность 010011. При проверке можно разделить запись на группы по два разряда и сопоставить их таблице в обратном направлении. Так восстанавливается исходное слово.
Условие: нужно закодировать алфавит из 10 символов равномерным двоичным кодом. Требуется найти минимальное число разрядов на один символ. Для n разрядов доступно 2ⁿ разных комбинаций, поэтому проверяем длины по возрастанию.
Ответ: каждому символу нужно назначить четырёхразрядный код. Шесть комбинаций останутся свободными, но это не мешает кодированию алфавита. Проверка состоит в сравнении числа символов с 2ⁿ.
Условие: кодовая таблица задаёт А = 0, Б = 10, В = 11. Декодируйте последовательность 01011 и объясните, почему иной вариант невозможен. Здесь длины кодов различаются, поэтому нельзя просто разбить запись на одинаковые группы. Нужно последовательно проверить, какой код начинается с очередного разряда.
Ответ: последовательность декодируется как «АБВ». Другой вариант невозможен, потому что ни один код не начинается с 0, кроме кода А, а после него остаток также однозначно делится на 10 и 11. Если бы кодовая таблица допускала несколько разбиений, однозначно восстановить сообщение было бы нельзя.
Кодирование путают с шифрованием, потому что в обоих случаях запись сообщения меняется. Но кодирование выполняют по правилу, которое предназначено для преобразования формы, а шифрование скрывает содержание. Проверить себя можно вопросом: нужно ли скрыть смысл от посторонних или лишь представить данные иначе? Во втором случае речь идёт о кодировании.
Двоичную последовательность иногда читают слева направо, не учитывая границы кодовых комбинаций. Это происходит, если забыть, что в кодах разной длины символы занимают разное число разрядов. Нужно сверяться с таблицей и после каждого найденного кода отмечать, какие разряды уже использованы. Если возможны разные разбиения, последовательность нельзя однозначно прочитать по этому правилу.
Некоторые считают, что n двоичных разрядов дают n вариантов. Ошибка возникает из-за смешения числа разрядов с числом комбинаций: каждый разряд имеет два значения, поэтому комбинации образуются всеми сочетаниями нулей и единиц. Проверка — посчитать их для первых случаев: 1 разряд даёт 2, 2 — 4, 3 — 8. Общая формула — 2ⁿ.
При декодировании иногда используют таблицу в обратном направлении неправильно и записывают код вместо исходного символа. Причина — невнимательное чтение столбцов или строк, особенно когда таблица небольшая. Перед работой уточните, что дано: символы для кодирования или комбинации для декодирования. В первом случае заменяют символ кодом, во втором — код соответствующим символом.
Для понимания кодирования нужны понятия информации, сообщения, алфавита, символа и двоичной записи: именно из символов складывается сообщение, которое преобразуют по правилу. Позже эти идеи помогут разобраться, как компьютер представляет текст, числа и изображения. В практике кодирование позволяет хранить данные и передавать их по компьютерным сетям. Поэтому выбор понятного и однозначного кода важен не только в учебных задачах, но и при обмене цифровой информацией.
Чем кодирование отличается от шифрования?
При кодировании сообщение переводят в другую форму по известному правилу, чтобы его было удобнее хранить, передавать или обрабатывать. При шифровании содержание скрывают от тех, у кого нет ключа.
Почему компьютер использует именно двоичный код?
Электронным устройствам удобно различать два устойчивых состояния, например наличие и отсутствие электрического сигнала. Их можно обозначить цифрами 1 и 0, а из таких знаков составлять кодовые комбинации.
Как узнать, сколько разрядов нужно для кодирования алфавита?
Нужно найти наименьшее целое n, для которого 2ⁿ не меньше числа символов алфавита. Тогда n двоичных разрядов хватит, чтобы назначить каждому символу отдельную комбинацию равной длины.
Можно ли закодировать один символ несколькими разными комбинациями?
Да, разные кодовые таблицы могут назначать одному символу разные комбинации. Но в пределах одной таблицы символу обычно соответствует определённый код, иначе кодирование и декодирование станут неоднозначными.
Как понять, что двоичную последовательность можно декодировать только одним способом?
Нужно проверить, что последовательность можно разделить на кодовые комбинации лишь одним способом. Равная длина всех кодов облегчает такую проверку; при кодах разной длины границы тоже должны однозначно определяться.
26. Продолжаем кодировать