Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Теория информации РостовнаДону 2008 Составитель Н

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.11.2024

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

Донской государственный технический университет

Кафедра ПОВТ и АС

Методы сжатия информации.

Алгоритмы Хаффмана и Лемпеля-Зива.

Методические указания к практическим занятиям по курсу

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

Ростов-на-Дону

2008


Составитель  Н.С. Могилевская

Методы сжатия информации. Алгоритмы Хаффмана и Лемпеля-Зива.  Методические указания по курсу «Теория информации». / Ростов – на – Дону: Издательский центр  ДГТУ, 2008,   14 с.

Методические указания предназначены для студентов специальности 090102 «Компьютерная безопасность» и преподавателей, ведущих практические занятия по курсу «Теория информации»; в них содержатся краткие сведения об идеях сжатия информации, способах оценки эффективности сжатия,  представлены алгоритм Хаффмана и две модификации алгоритма Лемпеля-Зива.

Печатается по решению методической комиссии факультета «Автоматизация и информатика».

Рецензент: заведующий кафедрой «Математика» ДГТУ, канд. физ.-мат. наук  Г. Ю. Рябых

Издательский центр ДГТУ, 2008.


1. Общие сведения о задаче сжатия данных

Кодирование источника

Задачей сжатия данных является минимизация технических затрат на хранение или передачу данных путем оптимального кодирования источников [1, стр. 75].  Согласно классической схеме системы связи [1, 2], сжатие данных, т.е. более компактное их представление производится в кодере источника, а задачей декодера источника является соответственно восстановление сжатых данных.

Используя материалы [1-3], укажем основные понятия, связанные с задачей сжатия данных.

Несущественная информация - это информация, которой можно пренебречь при передаче. Например, телефонная связь использует полосу частот  в диапазоне 3,4 кГц. Все остальные спектральные составляющие речи отбрасываются, при этом существенная часть информации теряется. Ясно, что первоначальный сигнал не может быть восстановлен полностью. В этом случае говорят о кодировании с потерями.

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

Степень сжатия определяется затратами для передачи или хранения информации без сжатия  и затратами с использованием некоторого метода сжатия

.

Степень сжатия зависит от используемого алгоритма и свойств источника.

Средняя длина кода вычисляется как сумма длин двоичных кодов,  взвешенных вероятностью этих кодовых символов:

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

Коды сжатия можно классифицировать как коды фиксированной и переменной длины, префиксные и непрефиксные коды.

Перечислим, согласно [2], желаемые свойства полезных кодов источника.

  1.  Свойство единственности декодирования. Единственным образом декодируемые коды позволяют однозначно отображать сжатые данные в исходные.
  2.  Свойство мгновенной декодируемости. Мгновенно декодируемый код – это такой код, для которого граница  настоящего кодового слова может быть определена концом настоящего кодового слова, а не началом следующего кодового слова.
  3.  Свойство отсутствия префикса. Достаточным (но не необходимым) условием того, что код единственным образом декодируемый, является то, что никакое  кодовое слово не является префиксом другого кодового слова. Коды, удовлетворяющие этому условию, называются кодами свободными от префикса или префиксными кодами.

2. Алгоритм Хаффмана

Код Хаффмана – это свободный от префикса код, который может давать самую  короткую среднюю длину кода  для данного входного алфавита. Заметим, что самая короткая средняя длина кода для конкретного алфавита может быть значительно больше энтропии алфавита источника. Алгоритм кодирования Хаффмана может применяться для преобразования между двумя любыми алфавитами, чаще всего его используют для преобразования произвольного алфавита в двоичный [2].

Рассмотрим работу алгоритма Хаффмана на примере.

Пример. Построить двоичный код Хаффмана для представленного в таблице алфавита. В таблице использованы следующие обозначения Xi – i-тый символ алфавита,  Р(Xi) – вероятность появления символа Xi.

Xi

а

b

с

d

Р(Xi)

0,12

0,3

0,38

0,2

Упорядочим символы алфавита по убыванию вероятностей их появления и сопоставим их ветвям двоичного дерева.

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

Будем продолжать этот процесс до достижения корня дерева.

После формирования всего дерева пометим ветви, выходящие из всех вершин символами “0” и “1”. Помечать ветви дерева можно произвольным образом, для определенности ветвь, идущую вверх будем  помечать символом “1”, а ветвь, идущую вниз – символом “0”.

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

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

Xi

Р(Xi)

Код

Длина кода, , бит

с

0,38

0

1

0,38

b

0,3

10

2

0,6

d

0,2

111

3

0,6

a

0,12

110

3

0,36

Среднюю длину кода вычислим по формуле:

.

Результирующее значение =1,94 бит на знак, что не означает, что для передачи одного символа необходимо передавать нецелое число бит, а означает, что для передачи 100 входных символов из алфавита мощностью 4 потребуется примерно 194 бита.

2. Идеи построения алгоритма сжатия Лемпеля-Зива

Существует большое количество модификаций алгоритма Лемпеля-Зива [1, 3], все модификации этого алгоритма основаны на принципе динамических словарей. Перечислим основные идеи, на которых базируется алгоритм Лемпеля-Зива.

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

2. Кодирование  осуществляется при помощи указателей на фразы из уже сформированного словаря фраз. Кодирование является динамической процедурой, ориентированной на блоки. Сам процесс кодирования может быть дополнен скользящими окнами, содержащими текущий словарь фраз, и Look-ahead буфером.

3.1. Zip–модификация алгоритма Лемпеля-Зива

Согласно [3] процесс кодирования начинается с пустого словаря, так что первые элементы являются позициями, которые не ссылаются на более ранние позиции. В словаре рекуррентно формируется выполняемая последовательность адресов. Каждому адресу соответствует последовательность из элементов алфавита. Закодированные данные хранятся в виде пакетов со следующей структурой:

   <ссылка на адрес словаря, следующий знак данных>.

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

Пример. Используя Zip–модификацию алгоритма Лемпеля-Зива, закодировать последовательность

abaababbbbbbbabbbba.                                          (*)

Результат кодирования будем записывать в таблицу, содержащую три строки. В первой строке – адрес пакета данных, во второй – пакет данных в виде <адрес словаря, следующий знак данных>, в третьей – содержимое текущего пакета данных.

На начальном этапе работы алгоритма динамически формируемый словарь пуст. Пока словарь пуст, будем просматривать кодируемую фразу посимвольно и кодировать отдельные символы, по мере заполнения словаря будем пытаться кодировать в один пакет данных несколько подряд идущих символов.

Сформируем первый пакет данных и добавим его в словарь. Первый символ кодируемой последовательности (*) – «а» запишем по первому адресу. Пакет данных будет иметь вид: <0,a>. При формировании текущего пакета данных не используется ссылка на содержимое других позиций словаря, поэтому первый элемент пакета данных равен нулю, значение следующего знака данных равно «а», – символу, который необходимо записать в словарь.  

Адрес: 1

Пакет данных: <0,a>

Содержимое: а.

Второй символ кодируемой последовательности (*) – «в» запишем по второму адресу. Пакет данных будет иметь вид: <0,в>. При формировании этого пакета данных также не используется ссылка на содержимое других позиций словаря, поэтому первый элемент пакета данных равен нулю, а значение следующего знака данных равно «в», – символу, который необходимо записать в словарь.  

Адрес: 2

Пакет данных: <0,в>

Содержимое: в.

Просматриваем далее входную последовательность abaababbbbbbbabbbba. Будем отмечать в ней подчеркиванием уже закодированные символы. Следующий из незакодированных символов – «а» уже встречался в словаре, поэтому теперь в один пакет запишем объединение этого символа со следующим

Адрес: 3

Пакет данных: <1,а>

Содержимое: аа.

Запись <1,а>  в пакете данных означает, что необходимо взять символ(ы) записанные по адресу 1 и добавить к ним символ «а». Далее будем аналогичным образом продолжать процесс кодирования, каждый раз просматривая динамически формируемый словарь справа налево, т.е. с последней записи к первой. Оформим процесс кодирования в таблицу.

Адрес

1

2

3

4

5

6

7

8

9

Пакет данных

<0,a>

<0,b>

<1,a>

<2,a>

<2,b>

<5,b>

<5,a>

<6,b>

<1,->

Содер-жимое

a

b

aa

ba

bb

bbb

bba

bbbb

a

Обратите внимание, что последний пакет данных, записанный по адресу 9, не содержит знака данных

3.2. LZW-модификация алгоритма Лемпеля-Зива

 Эта модификация отличается от рассмотренной ранее Zip–модификации структурой пакета данных. Концепция адреса не используется, наоборот имеются ссылки предшествующие последовательности данных, а также допускаются рекуррентные ссылки на параметр длины. Пакет данных формируется из трех значений: <А, В, С>, первые два из которых указывают на уже закодированную подпоследовательность данных, следующим образом: число А  указывает на сколько знаков необходимо отступить назад, чтобы найти начало  нужной подпоследовательности, В – длина подпоследовательности которую необходимо считать, С – следующий знак.

Пример. Используя LZW–модификацию алгоритма Лемпеля-Зива, закодировать последовательность

abaababbbbbbbabbbba.     (**)

Пакет

данных

<0,0,a>

<0,0,b>

<2,1,a>

<3,2,b>

<1,1,b>

<3,3,b>

<8,5,a>

Содер-жимое

пакета

A

b

aa

bab

bb

bbbb

bbbb

Уже

Закоди-рованный

текст

a

ab

abaa

Aba

abab

Aba

ababbb

Abaaba

bbbbbbb

AbAa

bab

bbbbbb

Для кодирования алгоритмом Лемпеля-Зива установлено, что [1, стр. 83]:

  •  очень эффективно кодируются повторяющиеся символы и часто появляющиеся цепочки символов;
  •   редко повторяющиеся символы и последовательности символов с течением времени удаляются из словаря фраз;
  •  кодирование начальных фраз затрачивается относительно большое количество бит;
  •  методы теории информации позволяют доказать, что кодирование методом Лемпеля-Зива асимптотически оптимально. Это означает, что для очень длинного текста избыточность исчезает, то есть среднее число бит, необходимое для кодирования текста стремиться к энтропии текста;
  •  практическая степень сжатия для длинных текстов составляет 50-60%.

Контрольные вопросы

  1.  Является ли алгоритм Хаффмана примером кодирования без потерь?
  2.  Существуют ли такие ситуации, когда файл, обработанный алгоритмом сжатия, имеет размер больший размер исходного файла? Если да, то приведите соответствующие примеры.
  3.  Дайте определение префиксных кодов.
  4.  В чем заключается принцип создание динамически формируемого словаря в методах сжатия, основанных на алгоритме Лемпеля-Зива?
  5.  В каких известных программах-архиваторах используются  алгоритмы Хаффмана и Лемпеля-Зива?
  6.  Пусть дан трехсимвольный алфавит со следующими вероятностными соответствиями.

Xi

А

В

С

Р(Xi)

0,73

0,25

0,02

Для данного алфавита построены следующие шесть вариантов кодов.

Символ

Код 1

Код 2

Код 3

Код 4

Код 5

Код 6

А

00

00

0

1

1

1

В

00

01

1

10

00

01

С

01

10

11

100

01

11

Изучите предлагаемые коды и определите, какие коды являются практичными.

Упражнения для самостоятельного выполнения

1. Закодируйте предложенную фразу рассмотренными выше ZIP и LZW-модификациями алгоритма Лемпеля-Зива.

Номер варианта

Последовательность для кодирования

1

12112323212123333333

2

ABAABAABBBAABBBB

3

WWQEWQEEWWEQEWW

4

1212231223311213

5

АВСВСВАВСААВАВСС

6

SPSPPQQPPQQQSPSQ

7

3331211233323332223

8

12323332331231122333

9

ЩФЫФЫФЩФЫЩЩФЩФЫЫ

10

YXZYXZZZXXYXYXXYXY

11

ZZXXYXZYXZZXXZYYYY

12

22311232231123123321

13

ЭЮЭЮЮЯЭЮЮЯЯЭЭЮЭЯ

14

ЭЮЯЭЮЯЯЯЭЭЯЭЮЯЭЮЯ

15

QWEQWEQQWWEEWQWEQWE

16

ABCABCACCABBBB

17

SRPRPRPSRSSPPRSRR

18

12312313312222

19

EQWQWQQEQWQQEWQE

20

EEWQEWEEWQQWEEWE

2. Для указанного входного алфавита, мощностью 5 элементов дважды постройте код Хаффмана для выходных алфавитов различной мощности. Вычислите средние длины построенных кодов. Сравните значения энтропии исходного кода и среднюю длину кода.

Номер варианта

P(a)

P(b)

P(c )

P(d)

P(e)

P(f)

Мощность нового алфавита

1

0,16

0,32

0,27

0,05

0,19

0,01

2, 3

2

0,64

0,15

0,03

0,06

0,08

0,04

2, 4

3

0,09

0,01

0,17

0,32

0,23

0,18

2, 3

4

0,12

0,35

0,05

0,1

0,1

0,28

2, 4

5

0,08

0,47

0,12

0,1

0,1

0,13

2, 3

6

0,44

0,01

0,34

0,1

0,1

0,01

2, 3

7

0,01

0,34

0,37

0,03

0,1

0,15

2, 4

8

0,34

0,4

0,06

0,1

0,05

0,05

2, 3

9

0,01

0,65

0,12

0,1

0,04

0,08

2, 4

10

0,21

0,01

0,45

0,1

0,1

0,13

2, 3

11

0,34

0,04

0,12

0,1

0,1

0,3

2, 4

12

0,29

0,37

0,08

0,1

0,1

0,06

2, 3

13

0,12

0,02

0,24

0,1

0,1

0,42

2, 4

14

0,07

0,45

0,01

0,1

0,1

0,27

2, 3

15

0,06

0,12

0,58

0,1

0,1

0,04

2, 4

16

0,14

0,37

0,08

0,1

0,1

0,21

2, 3

17

0,03

0,1

0,05

0,1

0,1

0,62

2, 4

18

0,03

0,17

0,34

0,1

0,1

0,26

2, 3

19

0,31

0,11

0,35

0,1

0,1

0,03

2, 4

20

0,33

0,11

0,36

0,01

0,1

0,09

2, 3

21

0,39

0,31

0,02

0,1

0,1

0,08

2, 4

22

0,12

0,02

0,32

0,1

0,1

0,34

2, 3

23

0,49

0,03

0,09

0,1

0,1

0,19

2, 4

24

0,21

0,22

0,03

0,1

0,1

0,34

2, 3

25

0,01

0,08

0,4

0,01

0,1

0,4

2, 4

Литература

  1.  Вернер М. Основы кодирования М.: Техносфера, 2004.–288 с.
  2.  Скляр Б. Цифровая связь. Теоретические основы и практическое применение, 2-е издание. : Пер. с англ. – М. Издательский дом “Вильямс”, 2003.–1104 с.
  3.  Сэломон Д. Сжатие данных, изображение и звука М.: Техносфера, 2006.–368 с.




1. Утвердить Положение о порядке формирования городского реестра молодежных и детских общественных объедин
2. РЕФЕРАТ ПО ДИСЦИПЛИНЕ Охрана Труда Выполнила- Студентка 3го курса специальности 260103 Сташкев
3. Средства массовой информации- информирование и предвыборная агитация
4. 1994гг. В 19951996гг. темпы спада заметно снизились хотя тенденция к снижению производства сохранялась
5. Д учет Группа здоровья
6. Налог на добавленную стоимость НДС
7. на тему- Прохождение практики на предприятии.html
8. Развитие советской психиатрии
9. Тема поэта и поэзии в творчестве НА Некрасова
10.  Укажите систему уравнений соответствующую расчету данной цепи по методу контурных токов
11. Лекция 7. Организации- сущность и виды 7
12. Анализ хозяйственной деятельности предприятия на примере ЗАО СНХРС
13. технические конкретные технические меры
14. реферат дисертації на здобуття наукового ступеня кандидата педагогічних наук Київ 2008
15. Лікувальна справа Дисципліни хірургічного профілю 135 У разі отруєння барбітуратами внутрішньовенно
16. То есть тепловой насос отбирает тепло из источника с довольно низкой температурой и доставляет его к потр
17. министра А.Ф. Керенского Октябрьскую революцию встретил в оппозиции и был выслан в 1922 г
18. Статистика производительности труда
19. Тема 3
20.  Сводные сметные расчеты стоимости строительства предприятий зданий сооружений или их очередей рассматри