- •Информатика Информация, сигнал, сообщение
- •Собственная информация
- •Формула Шеннона
- •Формула Хартли
- •Единицы измерения информации
- •Свойства энтропии
- •Пример.
- •Пропускная способность канала связи
- •Дискретный канал без помех
- •Дискретный канал с помехами
- •Избыточность источника сообщений
- •Пример.
- •Кодирование информации
- •Равномерное кодирование
- •Эффективное кодирование
- •Основные принципы эффективного кодирования:
- •Метод Шеннона - Фано
- •Метод Хаффмана
- •Кодирование информации для канала с помехами
- •Контроль по четности
- •Элементы, образующие логический базис
- •Элемент «не»реализует операцию «логическое отрицание». Элемент имеет один вход и один выход. На выходе сигнал «1» имеет место в случае, если на входе будет сигнал «0».
Основные принципы эффективного кодирования:
Необходимо обеспечить минимальную среднюю длину кодового слова. Для этого избыточность должна быть сведена к минимуму, теоретически к нулю.
Эффективное кодирование являются неравномерными, т. е. для передачи разных символов используются кодовые комбинации разной длины. При этом наиболее вероятные символы кодируются самыми короткими кодовыми словами, вследствие чего средняя длина кодового слова в сообщении уменьшается.
Ни одна из кодовых комбинаций не должна получаться из другой, более короткой путем добавления новых символов. Коды, удовлетворяющие этому свойству, называются префиксными, т. к. ни одно кодовое слово не является начальной частью (префиксом) другого слова.
Пример. Пусть алфавит X содержит 6 букв, передаваемых независимо друг от друга, .
p(А) = 0.4
p(Б) = 0.3
p(В) = 0.1
p(Г) = 0.08
p(Д) = 0.07
p(Е) = 0.05
.
Чтобы закодировать буквы равномерным двоичным кодом необходимо затратить на каждую 3 символа. В соответствии с первой теоремой Шеннона эти буквы можно закодировать двоичными символами так, чтобы в среднем на каждую затрачивалось 2.16 бит. Попробуем сделать это, не задумываясь пока над однозначностью декодирования. Присвоим наиболее вероятным буквам самые короткие блоки в соответствии со 2-м принципом эффективного кодирования, делая код неравномерным.
Код
А 0
Б 1
В 00
Г 01
Д 10
Е 11
Таким образом, для передачи букв А и Б, имеющих суммарную вероятность 0.7, используется один символ. Для передачи остальных букв, имеющих суммарную вероятность 0.3, используется два символа. В результате средняя длина кодового слова равна:
= 0.7*1 + 0.3*2 = 1.3 < 2.16.
Получилось, что буквы закодированы еще более экономично, чем позволяет теореме Шеннона. Парадокс объясняется тем, что выбранный код не пригоден для передачи сообщений, т. к. он не обеспечивает однозначного декодирования. В самом деле, принятую последовательность: 00110100011110…, можно декодировать:
ААББАБАААБ…
ВЕГВАЕБД…
АГДБВГББД…
В принципе, используя предложенный код, можно обеспечить однозначность декодирования, если после каждой буквы передавать некоторый разделительный символ (запятую, маркер), разделяющий эти буквы. Тогда это будет не двоичный код, а троичный. Таким образом поступил, например, Морзе, в коде которого кроме точки и тире используется пробел.
Тем не менее, можно построить код и однозначно декодировать принимаемые сообщения без использования запятой.
Существует несколько алгоритмов построения неравномерных кодов с префиксным свойством. Среди них оптимальным (позволяющим лучше всего приблизиться к границе, определяемой энтропией) является метод Хаффмана. Более простым и несколько худшим является метод Шеннона - Фано.