Тверской государственный университет
Опубликован: 02.10.2014 | Доступ: свободный | Студентов: 1798 / 183 | Длительность: 10:03:00
Лекция 14:

Морзе, Брайль, Фано

< Лекция 1 || Лекция 14
Аннотация: Представление текста в виде различных кодов.

Смотреть на youtube || на ИНТУИТ в качестве: низком | среднем | высоком

Алфавит, состоящий из двух символов, используется не только в компьютерах. В разных вариациях он используется человечеством уже сотни лет. Рассмотрим два известных варианта применения такого алфавита – код Морзе и код Брайля. Код Морзе используется при передаче радиосигналов. И сегодня все морские суда используют рации, передающие сообщения кодом Морзе. При передаче используются сигналы разной длительности. Короткий сигнал принято называть точкой, более длинный сигнал – тире.

В компьютерах, как мы видели, символы алфавита кодируются словами одинаковой длины. В кодировке Unicode исходный текст, состоящий из n символов, будет представлен двоичным словом длины 16n. Такой способ представления информации удобен при работе с компьютерами, память которых огромна по человеческим меркам (10000 книг можно хранить в 8 Гб), скорость обработки информации превосходит пределы понимания. По этой причине при работе с компьютером удобство работы с произвольными текстами гораздо важнее избыточности кода и не самого экономичного способа хранения информации.

Совсем другое дело, когда кодированием и декодированием должен заниматься человек. В этом случае следует выбирать экономичный способ кодирования, стараясь уменьшить длину закодированного текста. Естественным решением этой проблемы является:

  • Использование при кодировании слов разной длины;
  • Кодирование часто используемых символов алфавита короткими словами, редко используемых – длинными словами.

Эти принципы используются в коде Морзе. Приведу кодировку нескольких символов латиницы и кириллицы в коде Морзе:


В английском символы E и T – наиболее часто используемые символы, поэтому они кодируются словами длины 1. Для русских текстов используется стандартное соответствие символов кириллицы и латиницы.

Задача: Закодируйте слово SOS кодом Морзе.

Решение:


Задача: Закодируйте слово "мама" кодом Морзе

Решение:


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

В коде Морзе используются слова длины от 1 до 5 (не учитывая разделителя, сопровождающего символ). Поэтому код позволяет кодировать алфавит из 63-х различных символов. Для кодирования этого алфавита словами фиксированной длины минимальная длина слова равна 6. Насколько эффективен код Морзе? Насколько сокращается длина передаваемого сообщения? Однозначного ответа нет – все зависит от самого передаваемого сообщения. В кодировке, где все символы кодируются словами длины 6, слово длины n ,будет иметь длину 6n, так слово "мама" в результате кодировки будет иметь длину 24. Это же слово "мама" в коде Морзе будет иметь длину -12, по два символа для букв "м" и "а" плюс разделители символов. Выигрыш составляет 50%. – длина слова уменьшилась в два раза. При передаче чисел такого эффекта не будет. В коде Морзе каждая цифра кодируется словом длины 5. Если прибавить разделитель, то на цифру потребуется те же 6 знаков, так что длина числа в коде Морзе совпадает с длиной числа, когда алфавит кодируется словами длины 6.

Конечно, текст в коде Морзе существенно короче того же текста в кодировке Unicode. Слово "мама" в кодировке Unicode будет иметь длину 64, а в коде Морзе – 12.

Можно ли обойтись без разделителей при кодировании символов словами разной длины?

Рассмотрим вначале пример неоднозначного кодирования. Пусть у нас есть алфавит из 3-х символов – А, М, П. Введем следующую кодировку: А – 0, М – 1, П – 10. Рассмотрим закодированный текст: 1010. Этому тексту при декодировании соответствуют два слова – МАМА и ПП. Как видите, введенная кодировка не обеспечивает однозначное декодирование.

Можно ли ввести ограничения на способ кодирования, гарантирующие однозначное декодирование? Ответ положителен.

Декодирование однозначно, если код удовлетворяет условию Фано.

Сформулируем это условие. Код называется префиксным, если существует пара символов, такая, что код одного символа является префиксом кода другого символа.

В нашем примере код является префиксным, поскольку для символов М и П код символа М является префиксом (началом) кода символа П.

Если код не является префиксным, то условие Фано выполняется,. Условие Фано является достаточным условием для однозначного декодирования. Оно не является необходимым условием.

Рассмотрим несколько задач, решение которых предполагает использование условия Фано.

Задача 13:

Для трехбуквенного алфавита {А, М, П} используется кодировка А – 01, М – 10, П – 001. Какой код минимальной длины следует задать для кодировки буквы Т, добавляемой в алфавит?

Ответ: Т – 11.

Решение: Используемая кодировка удовлетворяет условию Фано, - ни один код не является префиксом другого кода, что гарантирует однозначность декодирования. Для нового символа, добавляемого в алфавит, нельзя использовать код, состоящий из одного символа, поскольку будет нарушено условие Фано. Для кода, состоящего из двух символов, возможен только один вариант, удовлетворяющий условию Фано, - Т – 11.

Задача 14:

Для четырехбуквенного алфавита {А, М, П, Т} используется кодировка А – 01, М – 10, П – 001, Т - 11. Можно ли уменьшить длину кода одного из символов, сохраняя однозначность декодирования?

Ответ: Можно. П – 00.

Решение: Используемая кодировка удовлетворяет условию Фано, - ни один код не является префиксом другого кода, что гарантирует однозначность декодирования. Не нарушая условия Фано, для кодирования буквы П можно использовать код 00. Заметьте, в этом случае все символы кодируются словами постоянной длины. Для такой кодировки условие Фано выполняется автоматически, поскольку все слова различны и имеют одинаковую длину, так что ни одно из них не может быть префиксом другого слова. Можно, если на код наложить дополнительное ограничение, называемое условием Фано. Напомним, префиксом слова называется начальный отрезок слова. Код называется префиксным, если существует такая пара символов алфавита s1 и s2, что код s1 является префиксом кода s2. Условие Фано говорит, что для однозначного декодирования текста достаточно, чтобы код не был префиксным, то есть ни один код символа не был префиксом кода другого символа.

Задача:

Рассмотрим алфавит, состоящий из 6-и символов {А, Б, В, Г, Д, Е}. Рассмотрим код, удовлетворяющий условию Фано: А – 00, Б – 10, В – 010, Г – 011, Д -110, Е - 111. Закодируйте текст БАГГАВ и запишите его в шестнадцатеричной системе:

Решение: В двоичной системе текст выглядит так: 100001101100010, в шестнадцатеричной системе: 4362

Задача:

Дан закодированный текст, записанный цифрами шестнадцатеричной системы АВ12:

Декодируйте текст, используя кодировку, предложенную в предыдущей задаче

АВ12 = 1010101100010010 = БББДАБВ

Задача:

Рассмотрим алфавит, состоящий из 4-х символов {А, Б, В, Г}. Рассмотрим код, удовлетворяющий условию Фано: А – 00, Б – 10, В – 010, Г – 011. Можно ли, сохранив условие Фано, улучшить кодировку, уменьшив длину слова некоторых символов.

Решение: Длину кода символа А уменьшить нельзя, иначе код станет префиксным. Длину кода символа Б можно уменьшить, положив Б – 1. После этого нельзя уменьшить длину В и Г. Решение не единственно. Можно оставить код Б без изменения, и уменьшить код для Г - 11

Код Брайля помогает читать тексты людям, лишенным зрения и слабовидящим. Алфавит также состоит из двух символов и разделителя, позволяющего отделять символы. Символы алфавита являются выпуклые и невыпуклые точки, распознаваемые на ощупь. В коде Брайля минимизация длины кода не имеет особого значения. Более важно удобство записи и распознавания текста. Поэтому используется кодировка символов алфавита словами длины 6. Алфавит кодируемого текста, следовательно, содержит 64 символа. Каждый символ в коде Брайля записывается из 6 точек, расположенных в два столбца по три точки в столбце. Поэтому для записи символа достаточно указать положение только выпуклых точек, - есть выпуклость – символ 1, нет выпуклости – символ 0. Вот как выглядит текст "мама", записанный кодом Брайля:


< Лекция 1 || Лекция 14
Дмитрий Анисимов
Дмитрий Анисимов

Подскажите - где публиковать решения самостоятельных заданий которые Вы задали 

Михаил Жуков
Михаил Жуков

Мне вот реально интересно, не проще было сказать сразу, что есть такая штука - "полином разложения", и привести формулу? Слишком много воды в теме о системах счисления имхо.