- •Часть I
- •Введение
- •Раздел I. Информация
- •1.1. Предмет и структура информатики
- •1.2. Информация и физический мир
- •Понятие информации
- •1.3. Непрерывная и дискретная информация
- •Раздел III. Представление информации
- •3.1. Язык как способ представления информации. Кодирование информации
- •3.2. Позиционные и непозиционные системы счисления
- •3.3. Перевод чисел из одной системы счисления в другую
- •3.4. Арифметические операции в позиционных системах счисления
- •3.5. Кодирование информации
- •3.6. Кодирование целых чисел
- •3.6.1.Кодирование и обработка в компьютере целых чисел без знака
- •3.6.2. Кодирование и обработка в компьютере целых чисел со знаком
- •3.7. Кодирование символьной информации. Алфавитное неравномерное двоичное кодирование. Префиксный код. Код Хаффмана
- •3.7.1. Равномерное алфавитное двоичное кодирование. Байтовый код
- •3.7.2. Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
- •3.7.3. Блочное двоичное кодирование
- •Раздел IV. Элементы математической логики
- •4.1. Искусство логического мышления
- •Методы мышления
- •4.2. Основные понятия формальной логики
- •4.3. Логические выражения и логические операции
- •4.4. Построение таблиц истинности для логических функций
- •4.5. Логические функции и их преобразования. Законы логики
- •Раздел V. Логические элементы. Электронная реализация логического элемента.
- •5.1. Построение логических схем
- •5.2. Логическая реализация типовых устройств компьютера
- •Вопросы для самоконтроля
3.7.2. Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
В
качестве примера использования данного
варианта кодирования рассмотрим
телеграфный код Морзе («азбука
Морзе»). В
нем каждой букве или цифре сопоставляется
некоторая последовательность
кратковременных импульсов – точек и
тире, разделяемых паузами. Длительности
импульсов и пауз различны: если
продолжительность импульса, соответствующего
точке, обозначить , то длительность
импульса тире составляет 3
,
длительность паузы между точкой и тире
,
пауза между буквами слова 3
,
пауза между словами (пробел) – 6
.
Таким образом, под знаками кода Морзе
следует понимать: «
»
– «короткий
импульс + короткая пауза»,
«
»
– «длинный
импульс + короткая пауза»,
«0»
– «длинная
пауза», т.е.
код оказывается троичным.
Свой код Морзе разработал в 1838 г., т.е. задолго до исследований относительной частоты появления различных букв в текстах. Однако им был правильно выбран принцип кодирования – буквы, которые встречаются чаще, должны иметь более короткие коды, чтобы сократить общее время передачи. Относительные частоты букв английского алфавита он оценил простым подсчетом литер в ячейках типографской наборной машины. Поэтому самая распространенная английская буква «E» получила код «точка». При составлении кодов Морзе для букв русского алфавита учет относительной частоты букв не производился, что, естественно, повысило его избыточность. Как и в рассмотренных ранее вариантах кодирования, произведем оценку избыточности. По-прежнему для удобства сопоставления данные представим в формате табл. 3.1. Признак конца буквы («0») в их кодах не отображается, но учтен в величине ki – длине кода буквы i.
Среднее значение длины кода K(3) = 3,361. Полагая появление знаков вторичного алфавита равновероятным, получаем среднюю информацию на знак равной I(2) = log23 = 1,585 бит. Подставляя эти данные, а также для русского алфавита I1(1) = 4,356 бит, получаем:
Q(r) = 1 – 4,356/(3,361 – 1,585) 0,182
т.е. избыточность составляет около 18% (для английского языка 15%). Тем не менее, код Морзе имел в недалеком прошлом весьма широкое распространение в ситуациях, когда источником и приемником сигналов являлся человек (не техническое устройство) и на первый план выдвигалась не экономичность кода, а удобство его восприятия человеком.
3.7.3. Блочное двоичное кодирование
Вернемся к проблеме оптимального кодирования. Пока что наилучший результат (наименьшая избыточность) был получен при кодировании по методу Хаффмана – для русского алфавита избыточность оказалась менее 1%. При этом указывалось, что код Хаффмана улучшить невозможно. На первый взгляд это противоречит первой теореме Шеннона, утверждающей, что всегда можно предложить способ кодирования, при котором избыточность будет сколь угодно малой величиной. На самом деле это противоречие возникло из-за того, что до сих пор мы ограничивали себя алфавитным кодированием. При алфавитном кодировании передаваемое сообщение представляет собой последовательность кодов отдельных знаков первичного алфавита. Однако возможны варианты кодирования, при которых кодовый знак относится сразу к нескольким буквам первичного алфавита (будем называть такую комбинацию блоком) или даже к целому слову первичного языка. Кодирование блоков понижает избыточность. В этом легко убедиться на простом примере.
Пусть имеется словарь некоторого языка, содержащий n = 16000 слов (это, безусловно, более чем солидный словарный запас!). Поставим в соответствие каждому слову равномерный двоичный код. Очевидно, длина кода может быть найдена из соотношения K(2) log2n 13,97 = 14. Следовательно, каждому слову будет поставлена в соответствие комбинация из 14 нулей и единиц – получатся своего рода двоичные иероглифы. Например, пусть слову «ИНФОРМАТИКА» соответствует код 10101011100110, слову «НАУКА» – 00000000000001, а слову «ИНТЕРЕСНАЯ» – 00100000000010; тогда последовательность:
000000000000110101011100110000000000000001,
очевидно, будет означать «ИНФОРМАТИКА ИНТЕРЕСНАЯ НАУКА».
Легко оценить, что при средней длине русского слова K(r) = 6,3 буквы (5,3 буквы + пробел между словами) средняя информация на знак первичного алфавита оказывается равной I (2) = K (2) / K (r) = 14/6,3 = 2,222 бит, что почти в 2 раза меньше, чем 4,395 бит при алфавитном кодировании. Для английского языка такой метод кодирования дает 2,545 бит на знак. Таким образом, кодирование слов оказывается более выгодным, чем алфавитное.
Еще более эффективным окажется кодирование в том случае, если сначала установить относительную частоту появления различных слов в текстах и затем использовать код Хаффмана. Подобные исследования провел в свое время Шеннон: по относительным частотам 8727 наиболее употребительных в английском языке слов он установил, что средняя информация на знак первичного алфавита оказывается равной 2,15 бит.
Вместо
слов можно кодировать сочетания букв
– блоки. В принципе блоки можно считать
словами равной длины, не имеющими,
однако, смыслового содержания. Удлиняя
блоки и применяя код Хаффмана теоретически
можно добиться того, что средняя
информация на знак кода будет сколь
угодно приближаться к
.
Однако, несмотря на кажущиеся преимущества, применение блочного и словесного метода кодирования имеет свои недостатки. Во-первых, необходимо хранить огромную кодовую таблицу и постоянно к ней обращаться при кодировании и декодировании, что замедлит работу и потребует значительных ресурсов памяти. Во-вторых, помимо основных слов разговорный язык содержит много производных от них, например, падежи существительных в русском языке или глагольные формы в английском; в данном способе кодирования им всем нужно присвоить свои коды, что приведет к увеличению кодовой таблицы еще в несколько раз. В-третьих, возникает проблема согласования (стандартизации) этих громадных таблиц, что непросто. Наконец, в-четвертых, алфавитное кодирование имеет то преимущество, что буквами можно закодировать любое слово, а при кодировании слов – можно использовать только имеющийся словарный запас. По указанным причинам блочное и словесное кодирование представляет лишь теоретический интерес, на практике же применяется кодирование алфавитное.
