Теория Информации Кудряшов Борис Давидович Часть 2. Кодирование дискретных источников Санкт-Петербург 2009 Неравномерное кодирование Однозначно декодируемый Кодовые слова A B C D 00 01 10 11 ? 1 01 001 000 ? 1 10 100 000 ? 0 1 01 10 ? ? Код должен быть однозначно декодируемым! (Последовательность слов должна однозначно разбиваться на отдельные слова) 2 Неравномерное кодирование Однозначно декодируемый Кодовые слова A B C D 00 01 10 11 ДА 1 01 001 000 ДА 1 10 100 000 ? 0 1 01 10 НЕТ Префиксные коды однозначно декодируемы! Префиксность достаточное но не необходмое условие ? 3 Древовидные коды Древовидные коды – префиксные. A 0 B 100 C 101 D 11 0 1 A Декодируйте: D 10101000101 B C 4 Задача построения кода Средняя длина кодовых слов M l M[li ] pi l i i 1 должна быть минимально возможной. Теорема Крафта: Префиксный код существует если и только если M 2 li 1 i 1 (Все слова не могут быть короткими). 5 Необходимость неравенства Крафта Число вершин на ярусе L: 6 Достаточность неравенства Крафта 7 Теоремы побуквенного кодирования Прямая теорема: Пусть l H 1 Следовательно, код существует. Затраты на передачу (хранение) = Н. Если кодировать буквы по одной, то потери не превысят 1 бит на букву. Это немного, если Н=1000000. Это много, если Н =0.000001 8 Теоремы побуквенного кодирования Обратная теорема: l H (Неравенство Крафта) 9 Следствие l H Тогда и только тогда когда все вероятности являются числами вида pi 2 li 10 Свойства оптимального кода 1. Меньше вероятность длиннее слово 2. Самых длинных слов не меньше двух 3. Два самых длинных слова имеют общего родителя 11 Свойство 4 кода Хаффмена Пусть - общая часть 12 Свойство 4 кода Хаффмена 13 Алгоритм Хаффмена 14 Пример кода Хаффмена a b c d 0.35 0.20 0.15 0.10 e 0.10 f 0.10 15 Пример кода Хаффмена a b c d 0.35 0.20 0.15 0.10 e 0.10 f 0.10 0.20 16 Пример кода Хаффмена a b c d 0.35 0.20 0.15 0.10 0.25 e 0.10 f 0.10 0.20 17 Пример кода Хаффмена a b c d 0.35 0.20 0.15 0.10 0.25 0.40 e 0.10 f 0.10 0.20 18 Пример кода Хаффмена a b c d 0.35 0.20 0.15 0.10 0.60 0.25 0.40 e 0.10 f 0.10 0.20 19 Пример кода Хаффмена a b c d 0.35 0.20 0.15 0.10 0.60 0.25 0.40 e 0.10 f 0.10 1 0.20 20 Пример кода Хаффмена a b c d 0 0.35 0.20 0.15 0.10 0.60 f 0.10 1 0.25 0.40 e 0.10 1 0.20 a b c d e f 00 10 010 011 110 111 l 2.45 H 2.40 21 Код Шеннона Потребуем Положим p1 p2 ... pM q1 0 q2 p1 , qM i1 pi M 1 Слово = lm log pm разрядов числа qm 22 Свойства кода Шеннона Префиксность: Средняя длина слова: 23 Пример кода Шеннона Буква p a b c d e f 0,35 q Длина Запись Слово 0,20 0,15 0,10 0,10 0,10 24 Пример кода Шеннона Буква p q a b c d e f 0,35 0,00 0,20 0,35 0,15 0,55 0,10 0,70 0,10 0,80 0,10 0,90 Длина Запись Слово 25 Пример кода Шеннона Буква p q Длина a b c d e f 0,35 0,00 2 0,20 0,35 3 0,15 0,55 3 0,10 0,70 4 0,10 0,80 4 0,10 0,90 4 Запись Слово 26 Пример кода Шеннона Буква p q Длина Запись a b c d e f 0,35 0,00 2 0,00… 0,20 0,35 3 0,0101… 0,15 0,55 3 0,10001… 0,10 0,70 4 0,10110… 0,10 0,80 4 0,11001… 0,10 0,90 4 0,11100… Слово 27 Пример кода Шеннона Буква p q Длина Запись Слово a b c d e f 0,35 0,00 2 0,00… 00 0,20 0,35 3 0,0101… 010 0,15 0,55 3 0,10001… 100 0,10 0,70 4 0,10110… 1011 0,10 0,80 4 0,11001… 1100 0,10 0,90 4 0,11100… 1110 l H 1; l 2.95 2.40 1 28 Кодовое дерево a 0 b c d 1 e f Что хорошо и что плохо в коде Шеннона? 29 Графическая интерпретация p1 0.6; p2 0.3; p3 0.1 q2 0.6; l2 2; c 01 30 Сложность кода Шеннона Вопросы: • Для чего нужна упорядоченность? • Какова сложность упорядочения? • Нельзя ли подправить кодирование, чтобы требование упорядоченности не было обязательным? 31 Подсказка Код Шеннона работает p' q p p' > p Интервал неопределенности Код Шеннона не работает q p' p p' < p Интервал неопределенности Исправляем код Шеннона q p Интервал неопределенности 32 Код Гилберта-Мура q1 0 q2 p1 , qM i1 pi , M 1 pm Слово = lm log 2 pm m qm 2 разрядов числа m 33 Свойства кода ГМ Префиксность Средняя длина кодового слова 34 Пример x p q A 0.1 0,0= 0,00000… B 0.6 0,1= 0,00011… C 0.3 0,7= 0,10110… l Кодовое Слово Код Шеннона 35 Пример q x p A 0.1 B 0.6 0,1= 0,00011… 0,40= 0,01100… C 0.3 0,7= 0,10110… 0,85= 0,11011… l Кодовое Слово Код Шеннона 0,0= 0,05= 0,00000… 0,00001… 36 Пример q x p A 0.1 B 0.6 0,1= 0,00011… 0,40= 0,01100… 2 C 0.3 0,7= 0,10110… 0,85= 0,11011… 3 0,0= 0,05= 0,00000… 0,00001… l Кодовое Слово Код Шеннона 5 37 Пример x p q A 0.1 B 0.6 0,1= 0,00011… C 0.3 0,7= 0,10110… l Кодовое Слово 5 00001 0,40= 0,01100… 2 01 0,85= 0,11011… 3 110 0,0= 0,05= 0,00000… 0,00001… l H 2 l 2.6 Код Шеннона H 1, 296 38 Пример x p q A 0.1 B 0.6 0,1= 0,00011… C 0.3 0,7= 0,10110… l Кодовое Слово Код Шеннона 5 00001 0000 0,40= 0,01100… 2 01 0 0,85= 0,11011… 3 110 10 0,0= 0,05= 0,00000… 0,00001… l H 2 l 2.6 H 1, 296 39 Кодирование стационарных последовательностей Теорема об энтропии на букву: n H(X ) lim n n H lim H ( X n | X 1 X 2 ... X n1 ) n 40 Обратная теорема кодирования Доказательство: 41 Прямая теорема кодирования Для любого Н и Доказательство: При достаточно большом n 2/ 42 Оптимальное кодирование – это просто! Достаточно кодировать длинные блоки Проблема сложности: Пусть |X|=256. Тогда при n=2,3,4,5,… | X | 2 ,2 ,2 ,2 ,... n 16 24 32 40 К таким алфавитам невозможно применить код Хаффмена! Наши буквы теперь – целые файлы. Чтобы кодировать такие огромные алфавиты нужны по-настоящему простые методы. Мы не можем разрешить хранить код. Кодовые слова должны вычисляться в процессе кодирования и декодирования 43 Арифметическое кодирование Закодируем как одну «букву» кодом ГМ текст (файл) x ( x1 , x2 ,..., xn ) Для этого нужно вычислить ( x) q ( x) p ( x) / 2 Сначала надо условиться о порядке на множестве последовательностей х. Лексикографический порядок: 44 Арифметическое кодирование 45 Арифметическое кодирование Результат: n1 1 n1 1 q(x ) q(x ) p(x )q( xn ), n 1 n1 1 p(x ) p(x ) p( xn ). n 1 46 Алгоритм 47 Алгоритм • Инициализация. Даны { p1 ,..., pM } Вычисляем {q1,..., qM }; i 1,..., n F F q( xi )G, F 0; G 1 • Для • Слово = log G 1 G p( xi )G. разрядов числа ( F G / 2) 48 Пример pb 0,6 pa 0,1 , x (bcbab) pc 0,3 Шаг х p q F=F+qG G=pG 0 - - - 0,0000 1,0000 49 Пример pb 0,6 pa 0,1 , x (bcbab) pc 0,3 Шаг х p q F=F+qG G=pG 0 - - - 0,0000 1,0000 1 B 0,6 0,1 0,1000 0,6000 50 Пример pb 0,6 pa 0,1 , x (bcbab) pc 0,3 Шаг х p q F=F+qG G=pG 0 - - - 0,0000 1,0000 1 B 0,6 0,1 0,1000 0,6000 2 C 0,3 0,7 0,5200 0,1800 51 Пример pb 0,6 pa 0,1 , x (bcbab) pc 0,3 Шаг х p q F=F+qG G=pG 0 - - - 0,0000 1,0000 1 B 0,6 0,1 0,1000 0,6000 2 C 0,3 0,7 0,5200 0,1800 3 B 0,6 0,1 0,5380 0,1080 52 Пример pb 0,6 pa 0,1 , x (bcbab) pc 0,3 Шаг х p q F=F+qG G=pG 0 - - - 0,0000 1,0000 1 B 0,6 0,1 0,1000 0,6000 2 C 0,3 0,7 0,5200 0,1800 3 B 0,6 0,1 0,5380 0,1080 4 A 0,1 0,0 0,5380 0,0108 F G / 2 0,5423... F̂ 0,541 53 Пример pb 0,6 pa 0,1 , x (bcbab) pc 0,3 Шаг х p q F=F+qG G=pG 0 - - - 0,0000 1,0000 1 B 0,6 0,1 0,1000 0,6000 2 C 0,3 0,7 0,5200 0,1800 3 B 0,6 0,1 0,5380 0,1080 4 A 0,1 0,0 0,5380 0,0108 5 B 0,6 0,1 0,5391 0,0065 6 Длина кодового слова Кодовое слово 9 100010101 F G / 2 0,5423... F̂ 0,541 54 55 Декодирование 56 57 58 59 60 61 Проблемы реализации Всего 2 умножения и 1 сложение на букву! Но все не так просто: • С каждым шагом все длиннее числа • Чтобы сформировать результат, нужно закодировать всю последовательность • Задержка? • Память? • Переполнения? 62 Кодирование при неизвестной статистике Класс моделей Избыточность Универсальное кодирование: Кодирование с задержкой (off-line) и без задержки (мгновенное, on-line) 63 Пример 2-проходного кодирования 64 Анализ 2-проходного кодирования Скорость стремится к скорости кодирования при известных вероятностях букв 65 Нумерационное кодирование Последовательность Композиция Пример: х=(0010001) =(5,2) Кодовое слово = (номер композиции, номер последовательности в списке последовательностей с заданной композицией) Пример: с=(2, 3) =(010 00011) 66 Анализ нумерационного кодирования Число композиций Число позиций с заданной композицией 67 Анализ нумерационного кодирования 68 Адаптивное кодирование Вероятности оцениваются «по прошлому» и следующей буква кодируется по коду, построенному по оцененным вероятностям. Осталось выбрать • Длину «окна» • Формулы для оценок вероятностей • Способ кодирования Будем использовать арифметическое кодирование и окно = вся предшествующая последовательность 69 Примеры оценок Оценка Кричевского-Трофимова Принцип esc-кода 70 Анализ А-алгоритма M n - Число использованных букв 71 Анализ А-алгоритма 72 D-Алгоритм Mn - Число использованных букв 73 Сравнение алгоритмов 74 Монотонные коды Из • Унарный код: следует unar(i) 1 0 i • Код Голомба: Golomb(i) unar( i / T 1),binT (mod(i, T )) • Монотонный код Элайеса (1) : Монотонные коды часто используются в архиваторах и в системах мультимедиа как универсальные неравномерные коды 75 Еще монотонные коды bin’(i)=двоичная запись i без первой единицы Упрощенный код Левенштейна (Элайеса (2)): Длины слов: unar Golomb mon Elias i 1 i / T 1 log T 2 log i 1 log i 2log log i 2 76 Примеры Код Кодовое слово для i=21 unar 1111111111111111111110 Golomb, Т=3 11111110000 mon 1111100101 Elias 110000101 77 Анализ кода Элайеса 78 Доказательство 79 Кодирование интервалов и «Стопка книг» • Кодирование интервалов – вместо буквы передаем расстояние (число букв) от предыдущего появления буквы • Стопка книг – вместо буквы передаем число различных букв от предыдущего появления буквы При монотонном кодировании чем меньше число, тем короче кодовое слово 80 Анализ интервального кодирования Лемма Каца: Доказательство: выпуклость логарифма и энтропии 81 Алгоритм ЛемпелаЗива -77 82 Алгоритм Лемпела -Зива -78 LZW 83 Идея Алгоритма PPM 84 Сравнение алгоритмов на примере 85 Сравнение архиваторов на примере Calgary Corpus 86