
- •Министерство образования и науки, молодёжи и спорта украины
- •Тема 1. Предмет теории информации и количественная мера информации
- •1.2 Этапы обращения информации
- •1.3 Система передачи информации
- •1.4 Задачи и постулаты прикладной теории информации
- •1.5. Количественная оценка информации дискретного источника. Энтропия.
- •1.6 Фундаментальные свойства энтропии
- •Тема 2. Основные виды энтропии дискретных источников. Условная и взаимная энтропии.
- •2.1 Условная энтропия.
- •2.2 Основные свойства условной энтропии.
- •2.3 Взаимная энтропия. Свойства энтропии объединения.
- •Тема 3. Эффективное кодирование источника дискретных сообщений в канале без помех.
- •3.1 Избыточность информации, причины ее появления.
- •3.2 Способы сокращения избыточности.
- •3.3 Теорема Шеннона для канала без помех.
- •4.1 Общие понятия и элементы теории кодирования
- •4.2 Цели кодирования
- •4.3 Оптимальные неравномерные коды
- •4.4 Коды Шеннона-Фэно
- •4.5 Коды Хаффмена
- •4.6 Особенности эффективных кодов.
- •Тема 4. Кодирование источника дискретных сообщений в канале с помехами. Общие принципы помехоустойчивого кодирования.
- •5.1 Кодирование информации для канала с помехами. Теорема Шеннона для канала с помехами.
- •5.2 Общие принципы использования избыточности
- •5.3 Связь корректирующей способности кода с кодовым расстоянием
- •6.1 Корректирующие свойства кодов с избыточностью.
- •6.2 Классификация корректирующих кодов
- •Тема 5. Регулярные методы построения двоичных помехоустойчивых кодов
- •7.1 Линейные коды. Общие медоды построения.
- •7.2 Определение числа добавочных разрядов r.
- •7.3 Построение образующей(порождающей) матрицы |om|.
- •7.4 Порядок кодирования
- •7.5 Порядок декодирования
- •7.6 Систематические коды. Код Хэмминга.
- •7.7 Обнаружение и исправление ошибок в коде Хэмминга
- •8.1 Двоичные циклические коды
- •8.2 Некоторые свойства циклических кодов
- •8.3 Матричное описание циклических кодов
- •8.4 Выбор образующего полинома
- •8.5 Декодирование циклических кодов
- •Тема 6. Построение кодов заданой помехоустойчивости. Применение недвоичных помехоустойчивых кодов.
- •9.1 Матричное описание циклических кодов.
- •9.2 Коды Боуза — Чоудхури — Хоквингема (бчх)
- •9.3 Систематический вид циклического кода.
- •9.4 Коды Рида–Соломона и их применение.
- •9.5 Циклический избыточный код crc
- •Тема 7. Информационные характеристики источников непрерывных сообщений. Источники с максимальной энтропией. Максимальная пропускающая способность канала связи с помехами.
- •10.1 Информационные характеристики источников непрерывных сообщений
- •10.2 Энтропия равномерного закона распределения
- •10.3 Энтропия гауссового закона распределения.
- •11.1 Пропускная способность канала связи с помехами для непрерывных сообщений
- •Тема 8. Методы кодирования информации со сжатием.
- •12.1 Подстановочные или словарно-ориентированные алгоритмы сжатия информации. Методы Лемпела-Зива.
- •13.1 Описание алгоритма сжатия lzw
- •Декодирование по lzw
- •Достоинства и недостатки lzw
- •13.2 Применение lz-алгоритмов упаковки данных
- •14.1 Кодирование длин повторений
- •14.2 Дифференциальное кодирование
- •Тема 9. Методы кодирования со сжатием и с потерями информации..
- •15.1 Методы сжатия с потерей информации
- •15.2 Точность. Помехи и искажения. Приближенное восстановление
- •15.5 Кодирование преобразований. Стандарт сжатия jpeg
- •Или же, в матричной форме,
- •Тема 10. Методы кодирования физических сигналов в компьютерных сетях.
- •16.1 Кодирование на физическом уровне.
- •16.2 Самонихронизирующиеся коды - коды rz и Манчестер-II
- •16.3 Несамосинхронизирующиеся коды. - код nrz
- •16.4 Высокоскоростные коды - код mlt-3 и pam 5
- •Еще более высокоскоростной код - код pam 5
- •16.5 Требуемая полоса частот для передачи данных и ширина спектра сигнала
- •Ширина спектра сигнала
13.1 Описание алгоритма сжатия lzw
В методе сжатия LZW используется начальный словарь ВСЕХ различных символов кодируемого текста. Он может строиться путем анализа всего текста. Но чаще в качестве начального словаря используется готовая и всем известная стандартная табличка символов ASCII+.
Процесс сжатия выглядит следующим образом.
-Последовательно считываются символы входной последовательности и происходит проверка, существует ли в созданной таблице строк (в словаре) такая строка.
-Если такая строка существует, считывается следующий символ,
-а если строка не существует, то в выходную последовательность заносится код для предыдущей найденной строки, сама строка заносится в таблицу словаря, и поиск начинается с текущего символа.
Например, если сжимают байтовые данные (текст), то строк в начальной таблице (ASCII+) словаре окажется 256 (от «0» до «255»). Если используется 10-битный код, то под коды для новых строк остаются значения в диапазоне от 256 до 1023. Новые строки формируют таблицу последовательно, т. е. можно считать индекс строки ее кодом.
Алгоритму декодирования на входе требуется только закодированный текст, поскольку он может воссоздать соответствующую таблицу преобразования непосредственно по закодированному тексту. Алгоритм декодирования генерирует однозначно декодируемый код за счет того, что каждый раз, когда генерируется новый код, новая строка добавляется также и в начальную таблицу строк (в словарь). LZW постоянно проверяет, является ли строка уже известной в словаре, и, если так, выводит существующий код для этой подстроки. Таким образом, каждая строка будет храниться в единственном экземпляре и иметь свой уникальный номер. Следовательно, при восстановлении сообщения при получении нового кода в восстанавливаемый словарь добавляется новая строка, а при получении уже известного, строка извлекается из словаря.
В общем по описанию процесса сжатия понять работу алгоритма не очень легко, поэтому рассмотрим пример сжатия и декодирования сообщения.
Пример 13.1 Сжимаем текст "abacabadabacabae"
Сначала создадим начальный словарь единичных символов. В стандартной кодировке ASCII имеется 256 различных символов, поэтому начальный размер кода для кодирования одного символа будет равен 8 битам. Если нам заранее известно, что в исходном файле будет меньшее количество различных символов, то вполне разумно уменьшить количество бит для кодирования символа.
Чтобы инициализировать таблицу, мы установим соответствие кода 0 соответствующему символу с байтом 00000000, тогда 1 соответствует символу с байтом 00000001, 7 –соответствует 00000111 и т.д., до кода 255.
По мере роста словаря, размер групп должен расти, с тем, чтобы учесть новые элементы. 8-битные группы дают 256 возможных комбинации бит, поэтому, когда в словаре появится 256-е слово, алгоритм должен перейти к 9-битным группам. При появлении 512-ого слова произойдет переход к 10-битным группам, что дает возможность запоминать уже 1024 слова и т.д.
В нашем примере алгоритму заранее известно о том, что будет использоваться всего 5 различных символов, следовательно, для их хранения будет использоваться минимальное количество бит, позволяющее нам их запомнить, то есть 3шт. ( 8 различных комбинаций ).
Кодирование
Итак, пусть мы сжимаем последовательность «abacabadabacabae».
Шаг 1: Тогда, согласно изложенному выше алгоритму, мы добавим к изначально пустой строке “a” и проверим, есть ли строка “a” в таблице. Поскольку мы при инициализации занесли в таблицу все строки из одного символа, то строка “a” есть в таблице.
Шаг 2: Далее мы читаем следующий символ «b» из входного потока и проверяем, есть ли строка “ab” в таблице. Такой строки в таблице пока нет.
Добавляем в таблицу <5> “ab”. В выход: <0>;
Шаг 3: “ba” — нет. В словарь: <6> “ba”. В выход: <1>;
Шаг 4: “ac” — нет. В словарь: <7> “ac”. В выход: <0>;
Шаг 5: “ca” — нет. В словарь: <8> “ca”. В выход: <2>;
Шаг 6: “ab” — есть в словаре; “aba” — нет. В словарь: <9> “aba”. В выход: <5>;
Шаг 7: “ad” — нет. В словарь: <10> “ad”. В выход: <0>;
Шаг 8: “da” — нет. В словарь: <11> “da”. В выход: <3>;
Шаг 9: “aba” — есть в словаре; “abac” — нет. В словарь: <12> “abac”. В выход: <9>;
Шаг 10: “ca” — есть в таблице; “cab” — нет. В словарь: <13> “cab”. В выход: <8>;
Шаг 11: “ba” — есть в таблице; “bae” — нет. В словарь: <14> “bae”. В выход: <6>;
Шаг 12: И, наконец последняя строка “e”, за ней идет конец сообщения, поэтому мы просто выводим <4>.
Итак, мы получаем закодированное сообщение «0 1 0 2 5 0 3 9 8 6 4», что на 11 бит короче. При этом для расшифровки необходимо дополнительно хранить начальный словарь : 0-a, 1-b, 2-c, 3-d, 4-e.