- •Введение
- •1. Предмет информатики
- •1.1 Роль информации в современном обществе
- •1.2 Информационные барьеры в истории человечества
- •1.3 Предметная область информатики
- •2. Теория информации
- •2.1 Исходные понятия теории информации
- •2.2 Формы представления информации
- •2.3 Преобразование сообщений
- •3. Понятие информации в теории Шеннона
- •3.1 Понятие энтропии
- •3.2 Условная энтропия
- •3.3 Статистическое определение информации
- •3.4 Энтропия и информация
- •3.5 Информация и алфавит
- •4. Кодирование символьной информации
- •4.1 Постановка задачи кодирования. Первая теорема Шеннона
- •4.2 Алфавитное неравномерное двоичное кодирование сигналами равной длительности
- •4.2.1 Неравномерный код с разделителем
- •4.2.2 Префиксное неравномерное кодирование
- •4.3 Равномерное алфавитное двоичное кодирование. Байтовый код
- •4.4 Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
- •4.5 Блочное двоичное кодирование
- •5. Кодирование и представление чисел в компьютере
- •5.1 Системы счисления
- •5.2 Перевод чисел из одной системы счисления в другую
- •5.3 Перевод чисел между системами счисления с основанием 2k
- •5.4 Формы представления вещественных чисел
- •5.5 Кодирование целых чисел в компьютере
- •5.5.1 Кодирование в компьютере целых чисел без знака
- •5.5.2 Кодирование в компьютере целых чисел со знаком
- •5.6 Кодирование в компьютере вещественных чисел
- •5.7 Двоично-десятичные коды
- •5.7.1 Код (8421) – код прямого замещения
- •6. Обработка чисел в компьютере
- •6.1 Выполнение операций сложения
- •6.2 Сложение нормализованных чисел
- •6.3 Выполнение операции умножения
- •6.3.1 Общий алгоритм умножения
- •6.3.2 Особенности умножения в форме с плавающей запятой
- •6.4 Деление чисел
- •7. Кодирование графической и звуковой информации
- •7.1 Представление изображений
- •7.2 Представление звука
- •Список литературы
- •Родина Наталья Васильевна Информатика
- •Часть 1
- •107846, Москва, ул.Стромынка, 20
4.4 Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
В качестве примера использования данного варианта кодирования рассмотрим телеграфный код Морзе (Азбука Морзе). В нем каждой букве или цифре сопоставляется некоторая последовательность кратковременных импульсов – точек и тире, разделяемых паузами. Длительности импульсов и пауз различны: если продолжительность импульсов, соответствующую точке обозначим , то длительность тире – 3. Длительность паузы между точкой/тире – , пауза между буквами – 3, пауза между словами (пробел) – 6.
Таким образом, под знаками Морзе понимают:
– короткий импульс + короткая пауза;
– – длинный импульс + короткая пауза;
0 – длинная пауза;
т.е. код оказывается троичным.
Свой код Морзе разработал в 1838 году, то есть задолго до исследования относительной частоты появления различных букв в тексте. Однако им был правильно выбран принцип кодирования – буквы, которые встречаются чаще, должны иметь более короткие коды, чтобы сократить общее время передачи информации.
Относительные частоты букв английского языка он оценил простым подсчетом литер в ячейках типографской наборной машины. Поэтому самая распространенная английская буква Е получила код «точка».
При составлении кода Морзе для букв русского алфавита учет относительной частоты не производился, что, естественно, повысило его избыточность. Так, например, некоторые коды русских букв:
О – – – Ю – –
Е Щ
А Э
И Ф
Избыточность кода Морзе для русского алфавита – 0,233,
английского алфавита – 0,19.
Тем не менее, код Морзе имел весьма широкое распространение в ситуациях, когда источником и приемником сигналов являлся человек (не техническое устройство), и на первый план выдвигалась не экономичность кода, а удобство его восприятия человеком.
4.5 Блочное двоичное кодирование
Вернемся к проблеме оптимального кодирования. Пока что наилучший результат был получен при кодировании по методу Хаффмана – для русского алфавита избыточность оказалась менее 1%. При этом указывалось, что код Хаффмана улучшить невозможно.
На первый взгляд это противоречит первой теореме Шеннона, утверждающей, что всегда можно предложить способ кодирования, при котором избыточность будет сколь угодно малой величиной.
На самом деле это противоречие возникло из-за того, что до сих пор мы ограничивали себя алфавитным кодированием.
При алфавитном кодировании передаваемое сообщение представляет собой последовательность кодов отдельных символов первичного алфавита. Однако возможны варианты кодирования, при которых кодовый знак относится сразу к нескольким буквам первичного алфавита (такую комбинацию назовем блоком), или даже к целому слову первичного языка. Кодирование блоков понижает избыточность.
Пример 2. Пусть имеется словарь некоторого языка, содержащий n =16000 слов (это, безусловно, более чем солидный словарный запас!). Поставим каждому слову равномерный двоичный код. Очевидно, длина кода может быть найдена из соотношения К(А, 2) log2n 13,97 = 14.
Следовательно, каждое слово кодируется комбинацией из 14 нулей/единиц получаются своего рода двоичные иероглифы. Например, пусть следующим словам соответствуют коды:
информатика 10101010101010;
интересная 11100011100011;
наука 00000000000001.
Легко оценить, что при средней длине русского слова К(r) = 6.3 буквы (5.3 буквы + пробел), средняя информация на знак первичного алфавита при таком способе кодирования будет равна:
I(A) = K(A, 2)/ K(ru) = 14/6.3 =2.222 бит.
Это более чем в 2 раза меньше, чем 5 бит при равномерном алфавитном кодировании. Для английского языка такой метод кодирования дает 2.545 бит на знак.
Таким образом, кодирование слов оказывается более выгодным, чем алфавитное.
Еще более эффективным окажется кодирование в том случае, если сначала установить относительную частоту появления различных слов в текстах и затем использовать код Хаффмана. Подобные исследования провел в свое время Шеннон: по относительным частотам 8727 наиболее употребляемых в английском языке слов он установил, что средняя длина информации на знак первичного алфавита оказывается равной 2.15 бит.
Вместо слов можно кодировать сочетания букв - блоки. В принципе блоки можно считать словами равной длины, не имеющими, однако, смыслового содержания. Удлиняя блоки и применяя код Хаффмана теоретически можно добиться того, что средняя информация на знак кода будет сколь угодно приближаться к I.
Пример 3. Пусть первичный алфавит состоит из двух знаков а и b с вероятностями, соответственно 0.75 и 0.25. Сравнить избыточность кода Хаффмана при алфавитном и блочном кодировании.
При алфавитном кодировании
Знак р1 Код
а 0.75 0
b 0.25 1
I(A) ср = –0.75 log20.75 – 0.25 log20.25 = 0.915.
K(A, 2) = 1, Q = .
При блочном двухбуквенном кодировании (очевидно, что Pij = Pi Pj):
Знак рij Код
аа 0,562 0
ab 0,188 11
ba 0,188 100
bb 0,062 101
IA2 = – 0.562log2 0.562 – 0.1882log2 0.188 – 0.062log2 0.062 = 1.62.
(В пересчете на 1 знак - IA1=0,81).
К(А, 2) = 10.562 + 20.188 + 3(0.188 + 0.062) = 1.688. (в пересчете на 1 знак К=0.844).
Q(A, 2) = .
Таким образом, блочное кодирование обеспечивает построение более эффективного кода по сравнению с алфавитным. При использовании блоков большей длины (3-х буквенные и более) избыточность стремится к 0 в полном соответствии с 1-ой теоремой Шеннона.
Контрольные вопросы и задания.
1. Считая алфавит самостоятельным, определить количество информации на каждый символ выражения «МЫ НЕ РАБЫ, РАБЫ НЕМЫ». Определить среднее количество информации на знак.
2. Построить коды Шеннона - Фано и Хаффмана для задания 1. Определить среднюю длину кода и оценить избыточность.
3. Построить равномерный код для задания 1, оценить его избыточность.
4. Код Морзе для цифр следующий
0 5
1 6
2 7
3 8
4 9
Считая алфавит самостоятельным, а появление различных цифр – равновероятным, найти избыточность кода Морзе для цифрового алфавита
5. В лексиконе «людоедки» Эллочки Щукиной (И.Ильф, Петров «12 стульев») было 17 словосочетаний (Хо - хо! Ого! У вас спина белая! Шутишь, парниша! Блеск! и т.д.). Предложить свой вариант блочного кодирования, оценить избыточность кода.