Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория информаций и кодирования.doc
Скачиваний:
51
Добавлен:
05.03.2016
Размер:
239.1 Кб
Скачать

«Теория информации и кодирование»

Лабораторная работа № 1

Міністерство освіти і науки, молоді та спорту України

Державний вищий навчальний заклад

«Приазовський державний технічний університет»

Факультет інформаційних технологій

Кафедра «Інформатика»

С.О. Волощук методичний посібник до лабораторної роботи №1

з навчальної дисципліни

«Теорія інформації та кодування»

Маріуполь, 2011

УДК 519.72(072)

Методические указания к лабораторным работам и практическим занятиям по курсу "Теория информации и кодирование" "Сжатие данных (кодирование текстовой информации алгоритмами Хаффмана и Лемпеля-Зива)" (для студентов специальности 7.080201 - "Информатика"). /Сост.: С.А. Волощук. – Мариуполь: ПГТУ, 2010 – 20с.

В пособии изложены основные элементы кодирования текстовой информации методами архивации без потерь: Хаффмана, Шеннона-Фано и Лемпеля-Зива. Рассмотрен пример решения задачи.

Рецензенты:

ст. пр. Алешин С.В.

доц., к.ф.-м.н. Гранкин Д.В.

Укладач:

ст. пр. Волощук С.А.

Ответственный за выпуск:

доцент, Чичкарев Е.А.

Схвалено на засіданні кафедри інформатики

«14» 11.2011, протокол № 5

Погоджено навчально-методичною комісією факультету

«01» 12.2011, протокол № 3

Лабораторная работа № 1 Кодирование текстовой информации методами архивации без потерь: Хаффмана, Шеннона-Фано и Лемпеля-Зива.

Цель работы: научиться кодировать текстовую информацию методами архивации без потерь: Хаффмана, Шеннона-Фано и Лемпеля-Зива и выполнять обратный процесс - декодирования.

Основные теоретические положения

Коды появились в глубокой древности в виде криптограмм, когда ими пользовались для засекречивания важного сообщения от тех, кому оно не было предназначено. Еще знаменитый греческий историк Геродот (V век до н.э.) приводил примеры писем, понятных лишь для одного адресата. Спартанцы имели специальный механический прибор, при помощи которого важные сообщения можно было писать особым способом, обеспечивающим сохранение тайны. Собственная секретная азбука была у Юлия Цезаря. В средние века и эпоху Возрождения над изобретением тайных шифров трудились философ Фрэнсис Бэкон, крупные математики того времени Франсуа Виет, Джероламо Кардано, Джон Валлис.

В этом разделе речь будет идти в основном об ином направлении в кодировании, которое возникло в близкую к нам эпоху. Связано оно с проблемой передачи сообщений по линиям связи, без которых (телеграфа, телефона, радио, телевидения и т.д.) немыслимо наше нынешнее существование. Задачей такого кодирования является сделать передачу сообщений быстрой, удобной и надежной. Предназначенное для этой цели кодирующее устройство сопоставляет каждому символу передаваемого текста, а иногда и целым словам или фразам (сообщениям) определенную комбинацию сигналов (применяемую для передачи по данному каналу связи), называемую кодом или кодовым словом. При этом операцию перевода сообщений в определенные последовательности сигналов называют кодированием, а обратную операцию, восстанавливающую по принятым сигналам (кодовым словам) передаваемые сообщения, - декодированием.

Исторически первый код, предназначенный для передачи сообщений, связан с именем изобретателя телеграфного аппарата Сэмюэля Морзе и известен как азбука Морзе. В этом коде каждой букве или цифре сопоставляется своя последовательность из кратковременных (называемых точками) и длительных (тире) импульсов тока, разделяемых паузами. Другой код, столь же распространенный в телеграфии (код Бодо), использует для кодирования два элементарных символа - импульс и паузу, при этом сопоставляемые буквам кодовые слова состоят из пяти таких сигналов.

Общая схема передачи сообщений представлена на рис.1.

Рис. 1. Общая схема передачи сообщений.

Коды, использующие два различных элементарных сигнала, называются двоичными. Удобно обозначать эти два сигнала 0 и 1. Тогда кодовые слова можно представлять как последовательность из нулей и единиц.

Пример 1. Как можно закодировать четыре сообщения a, b, c, d, используя только два сигнала, 0 и 1?

Решение. Один из вариантов кодирования может быть следующим: 00, 01, 10, 11. При таком кодировании вероятность появления сообщений не учитывалась или предполагалась равновероятность (p=0,25). Между тем их появление в информационном тексте может происходить с различной частотой; предположим, вероятности появления сообщений равны: p=0,4; p=0,3; p=0,2; p=0,1.

Учитывая вероятность сообщений, Фано предложил следующее оптимальное кодирование

Сообщения

a

b

c

d

Коды

1

01

001

000

Показателем экономичности кода служит средняя длина кодового слова (математическое ожидание длины кодового слова). Для кодировки сообщений первым способом средняя длина равна 2, а по методу Фано - 1,75. Следовательно, закодированный по методике Фано информационный текст окажется короче.

На первый взгляд, кодирование по методу Фано кажется избыточным, поскольку представленные коды можно сократить, например, так

Сообщения

a

b

c

d

Коды

1

0

01

00

Однако если возьмем следующий закодированный текст: 011001, то по последней таблице данный текст не может быть однозначно дешифрован, так как непонятно, что, собственно, подразумевается: сообщение cada или саbbа, или baada и т.д. Расшифровка же текста по методу Фано однозначна - bac. Такой код называется префиксным. Никакое кодовое слово префиксного кода не является началом другого кодового слова. Наряду с кодом Фано, существует префиксное кодирование по методу Хаффмана, экономность которого еще выше.

Пусть двоичные сигналы 0, 1 последовательно передаются по каналу связи на приемник, тогда вероятности перехода в двоичном симметричном канале представлены следующим образом:

Рис. 2. Вероятности перехода в двоичном симметричном канале.

Для защиты передаваемых текстов от помех используются корректирующие коды, которые основаны на информационной избыточности. Самый простой способ создания избыточности достигается многократным дублированием передаваемых символов, т.е. образованием символьных блоков: 0→00000, 1→11111. В случае сбоя решение при дешифровке принимается по большинству оставшихся символов в блоке.

Существует очень простая, но эффективная защита информационного текста от единичного сбоя, которая требует минимальной избыточности в один дополнительный символ. Это проверка на четность. При кодировании к тексту добавляется 0 или 1 в зависимости от четности или нечетности суммы единиц в тексте. Если при декодировании обнаружится нечетное число единиц, значит, текст был принят неверно.

Процедура кодирования с помощью двух символов может быть представлена бинарным деревом. Длина ветвей, равная длине каждого кодового слова, определяет естественные порядковые уровни. Например, рассмотренный выше код Фано может быть представлен следующим бинарным деревом:

Рис. 3. Код Фано.

В нашем дереве символу 0 соответствует ребро, отклоняющееся влево, а символу 1 - ребро, отклоняющееся вправо.

Кодирование и декодирование используем для демонстрации передачи и хранения необходимой информации. Такой целостный взгляд на предложенную цепочку не только обогащает студента новыми знаниями, но и показывает целостность математики. Так, рассматриваемый материал дает представление, сколь широки и разнообразны связи теории кодирования и декодирования с разными разделами математики (алгебра, геометрия, комбинаторный анализ) и как порой абстрактные математические теории могут с успехом применяться для решения практических задач.

Двоичным (m,n) - кодом называется пара, состоящая из схемы кодирования Е: 2m→2n и схемы декодирования Д: 2n→2nm, где 2n - множество всех двоичных последовательностей длины n. Функции Е и D выбираются так, чтобы функция H=E*T*D (T - "функция ошибок") с вероятностью, близкой к единице, была тождественной.

Коды делятся на два класса. Коды с исправлением ошибок имеют целью правильно восстановить с вероятностью, близкой к единице, посланное сообщение. Коды с обнаружением ошибок имеют целью выявить с вероятностью, близкой к единице, наличие ошибок.

Существуют две большие группы алгоритмов архивации: сжатие без потерь - биективно перекодирует информацию, то есть возможно абсолютно идентичное ее восстановление; сжатие с потерями необратимо удаляет из информации некоторые сведения, оказывающие наименьшее влияние на смысл сообщения.

Как Вам известно, подавляющее большинство современных форматов записи данных содержат их в виде, удобном для быстрого манипулирования, для удобного прочтения пользователями. При этом данные занимают объем больший, чем это действительно требуется для их хранения. Алгоритмы, которые устраняют избыточность записи данных, называются алгоритмами сжатия данных, или алгоритмами архивации. В настоящее время существует огромное множество программ для сжатия данных, основанных на нескольких основных способах.

Зачем же нужна архивация в криптографии? Дело в том, что в современном криптоанализе, то есть науке о противостоянии криптографии, с очевидностью доказано, что вероятность взлома криптосхемы при наличии корреляции между блоками входной информации значительно выше, чем при отсутствии таковой. А алгоритмы сжатия данных по определению и имеют своей основной задачей устранение избыточности, то есть корреляций между данными во входном тексте.

Все алгоритмы сжатия данных качественно делятся на 1) алгоритмы сжатия без потерь, при использовании которых данные на приемной восстанавливаются без малейших изменений, и 2) алгоритмы сжатия с потерями, которые удаляют из потока данных информацию, незначительно влияющую на суть данных, либо вообще невоспринимаемую человеком (такие алгоритмы сейчас разработаны только для аудио- и видео- изображений). В криптосистемах, естественно, используется только первая группа алгоритмов.

Существует два основных метода архивации без потерь:

  • алгоритм Хаффмана (англ. Huffman), ориентированный на сжатие последовательностей байт, не связанных между собой,

  • алгоритм Лемпеля-Зива (англ. Lempel, Ziv), ориентированный на сжатие любых видов текстов, то есть использующий факт неоднократного повторения "слов" – последовательностей байт.

Практически все популярные программы архивации без потерь (ARJ, RAR, ZIP и т.п.) используют объединение этих двух методов – алгоритм LZH.