- •Э.Н.Гордеев основы теории информации
- •Раздел 1. Информация и Алгоритм. Коды объектов. 12
- •Раздел 2. Сжатие информации. 30
- •Раздел 3. Передача информации. Защита от искажений. 56
- •Раздел 1. Информация и Алгоритм. Коды объектов. 10
- •Раздел 2. Сжатие информации. 29
- •Раздел 3. Передача информации. Защита от искажений. 55
- •12 Рекомендованная литература 122
- •Введение.
- •Алгоритм
- •Представление (кодирование) информации.
- •Примеры кодировок
- •Свойства кодировок
- •Способы представления (кодирования) информации.
- •Кодирование слов и поиск минимального кода
- •Признаковое кодирование.
- •Раздел 2. Сжатие информации.
- •Кодирование информации. Количество информации. Сжатие информации.
- •Сериальное кодирование
- •Алфавитное кодирование.
- •Неравенство Крафта.
- •Префиксные коды.
- •Кодирование натурального ряда.
- •Код Элайеса.
- •Код Левенштейна
- •Количество информации. Энтропия.
- •Энтропия по Хартли.
- •Энтропия по Шеннону.
- •Математическая модель: алфавитное кодирование случайного источника.
- •Энтропия по Шеннону
- •Энтропия по Шеннону и энтропия по Хартли.
- •Теорема Шеннона
- •Алгоритмы кодирования
- •Алгоритм Шеннона (Фано).
- •Алгоритм Хаффмана
- •Блочное кодирование Хаффмена.
- •Алгоритм арифметического кодирования
- •Блочное кодирование и теорема Шеннона.
- •Раздел 3. Передача информации. Защита от искажений.
- •Передача информации по каналу с шумом.
- •Модели каналов.
- •Необходимые определения.
- •Пример кода для канала с выпадением.
- •Передача информации по двоичному симметричному каналу с шумом
- •Принципы построения кодов, исправляющих ошибки.
- •Декодирование на основе таблицы декодирования.
- •Корректирующие способности кодов. Границы мощности.
- •Теорема Шеннона для канала с шумом.
- •Факты из теории вероятности.
- •XI → канал → y
- •Вторая теорема Шеннона.
- •Комбинаторное доказательство теоремы.
- •Примеры кодов, исправляющих ошибки. Линейные коды.
- •Линейные коды.
- •Спектр кода.
- •Код Хэмминга.
- •Вопросы для самопроверки.
- •Примеры билетов для контрольных работ.
- •Приложение.
- •Рекомендованная литература
Блочное кодирование Хаффмена.
Алгоритм Хаффмена применяется не к самим буквам а к их блокам Тогда теорема Шеннона распространяется уже не буквы, а на блоки. В качестве вероятности блока берется произведение вероятностей, входящих в него букв. Если стоимость блока поделить на количество букв в нем, то «получим стоимость кодирования на одну букву».
Пример.
Пусть случайный источник генерирует 0 с вероятностью 0,25 и единицу с вероятностью 0,75. Стоимость кодирования равна 1 при энтропии 0,81.
Если поток из 0 и 1 будем интерпретировать как пары (блоки из двух букв), то это будет равносильно необходимости передавать четыре буквы с вероятностями:
a |
00 |
1/16 |
000 |
b |
01 |
3/16 |
001 |
c |
10 |
3/16 |
01 |
d |
11 |
9/16 |
1 |
Применяем алгоритм Хаффмена:
(a, b, c, d) → ((a, b), c, d) → (a, b, c), d)
Стоимость на блок l (xx) = ∑ pi li = 3/16 + 9/16 + 6/16 + 9/16 = 27/16.
Стоимость на одну букву l(x) = 27/32 = 0, 844.
Если перейти теперь к блокам длины три, то получим:
a 000 1/64 00000
b 001 3/64 00001
c 010 3/64 00010
d 011 9/64 010
e 100 3/64 00011
f 101 9/64 001
g 110 9/64 001
h 111 27/64 1
Алгоритм Хаффмена:
(a, b, c, D, e, f, g, H) → ((a, b), c, D, e, f, g, H) → ((a, b), (c, e), D, f, g, H) → ((a, b, c, e), D, f, g, H) → ((a, b, c, e), (D, f), g, H) → ((a, b, c, e, g), (D, f), H) → ((a, b, c, D, e, f, g), H)
1
f
h
d
b
0
(a,b,c,d,e,f,g)
(d,f)
e
g
c
(a,b,c,e,g)
(c,e)
(a,b)
(a,b,c,e)
a
Стоимость кодирования на блок l(xxx) = 5/64 + 15/64 + 15/64 + 15/64 +28/64 + 15/64 +27/64 +27/64 +27/64 = 50/64 +108/64 = 158/64 = 2,46875.
В переводе на одну букву получаем l(x)=0,823.
Процесс можно продолжать.
Ниже будет показано, что при неограниченном росте длины блока стоимость кодирования на одну букву может быть сколь угодно близка к значению энтропии.
Алгоритм арифметического кодирования
Появление этого алгоритма было связано с попыткой обойти сложности кодирования (декодирования) блочного алгоритма. Однако сравнивать его с предыдущими алгоритмами математически некорректно. Дело в том, что блочное кодирование не дает префиксного кода и, вообще, оно не переводит двоичные слова в двоичные слова. В нем используется третий символ – разделитель (обозначим его *). Уже на канальном уровне приемник различает его от 0 и 1.
Поэтому сравнивать стоимость арифметического кода, например, в блочным кодом Хэмминга – некорректно, т.к. все зависит от стоимости разделителя. Очевидно, что, если его передача стоит много дороже передачи бита, то использование его нецелесообразно. Обратно, если его передача стоит много дешевле передачи бита, то математическая задача перешла в инженерную.
Единственная почва для сравнения – считать, что разделитель , с точки зрения стоимости, эквивалентен биту.
Принципы арифметического кодирования заключаются в следующем:
- кодовое слово. Ему ставится в соответствие
точка
Строится разбиение отрезка
на совокупность отрезков:
Длина отрезка
пропорциональна «вероятности» слова,
закодированной точкой этого отрезка.Точка
имеет вид
Кодовое слово имеет p разрядов и кодируется в двоичную запись числителя k. Таким образом, при одинаковых числителях слова будут различаться количеством разрадов.
Так как разбиение отрезка и точки на нем известны кодеру и декодеру, то алгоритм декодирования очевиден.
Декодирование.
Шаг 1: Определяем интервал, содержащий текущий код. По нему определяем 1 символ исходящего сообщения. Если этот маркер кодирование заканчивает.
Шаг 2: Из текущего кода вычитается нижняя граница содержащего его интервала, и полученная разность делится на длину интервала. Получаем новое число. Находим интервал для него и т.д.
