Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoria_informatsii / Лекция 4.ppt
Скачиваний:
143
Добавлен:
22.03.2016
Размер:
325.12 Кб
Скачать

Пример сжатия по Хаффмену

 

 

 

Исходный файл: s1s2s2s2s1s3s3EOF

 

 

 

 

Адаптивное сжатие с символом ESC, коды: s1 – 00, s2 – 01, s3 – 10, EOF – 11

 

 

 

Значение для нормализации: 8

 

 

 

Символ

 

Модель

 

Символ

 

Модель

 

 

 

Символ

Частота

Код

 

 

Символ

Частота

Код

 

 

s1

0

-

 

 

s1

1

10

1

s1

s2

0

-

3

s2

s2

1

11

s3

0

-

s3

0

-

 

 

 

 

 

 

ESC

1

0

 

 

ESC

1

00

 

 

EOF

1

1

 

 

EOF

1

01

 

 

Символ

Частота

Код

 

 

Символ

Частота

Код

 

 

s1

1

1

 

 

s1

1

01

2

s2

s2

0

-

4

s2

s2

2

00

s3

0

-

s3

0

-

 

 

 

 

 

 

ESC

1

00

 

 

ESC

1

10

Пример сжатия по Хаффмену

Адаптивное сжатие с символом ESC

Символ

 

Модель

 

 

Символ

Частота

 

 

s1

1

5

s1

s2

3

s3

0

 

 

 

 

ESC

1

 

 

EOF

1

 

 

Символ

Частота

 

 

s1

2

6

s3

s2

3

s3

0

 

 

 

 

ESC

1

 

 

EOF

1

 

Выходной файл:

 

Символ

 

Модель

Код

 

 

Символ

Частота

01

 

 

s1

1

00

7

s3

s2

1

-

s3

1

 

 

10

 

 

ESC

1

11

 

 

EOF

1

Код

 

 

Символ

Частота

01

 

 

s1

1

00

8

EOF

s2

1

-

s3

2

 

 

10

 

 

ESC

1

11

 

 

EOF

1

0000001110001101001011

Код

11

10

01

000

001

Код

11

10

00

010

011

Арифметическое кодирование

Является альтернативой методу сжатия по Хаффмену.

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

Возможны неадаптивная, полуадаптивная и локально адаптивная реализации.

Арифметическое кодирование

1.Задать текущий интервал [0, 1).

2.Повторить следующие действия для каждого символа s входного файла.

1)Разделить текущий интервал на части пропорционально частотам каждого символа.

2)Выбрать подынтервал, соответствующий символу s, и назначить его новым текущим интервалом.

3.Когда весь входной файл будет обработан, выходом алгоритма объявляется любая внутренняя точка текущего интервала.

Арифметическое кодирование

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

Пример арифметического кодирования

Метод сжатия: полуадаптивный Исходный файл: s1s2s2s2s1s3s3EOF Выходной файл: 00011000111101001001

0.09748172810 = 0.000110001111010010012

Пример арифметического кодирования

 

Интервалы

Символ

1

s1:

[0,

0.25)

s1

 

s2:

[0.025,

0.625)

 

 

s3:

[0.625,

0.875)

 

 

EOF:

[0.875,

1)

 

2

s1:

[0,

0.0625)

s2

 

s2:

[0.0625,

0.15625)

 

 

s3:

[0.15625,

0.21875)

 

 

EOF:

[0.21875,

0.25)

 

3

s1:

[0.0625,

0.0859375)

s2

 

s2:

[0.0859375,

0.12109375)

 

 

s3:

[0.12109375,

0.14453125)

 

 

EOF: [0.14453125,

0.15625)

 

4

s1:

[0.0859375,

0.094726563)

s2

 

s2:

[0.094726563, 0.107910156)

 

Пример арифметического кодирования

 

Интервалы

Символ

5

s1:

[0.094726563, 0.098022461)

s1

 

s2:

[0.098022461, 0.102966309)

 

 

s3:

[0.102966309, 0.106262207)

 

 

EOF: [0.106262207, 0.107910156)

 

6

s1:

[0.094726563, 0.095550538)

s3

 

s2:

[0.095550538, 0.096786499)

 

 

s3:

[0.096786499, 0.097610474)

 

 

EOF: [0.097610474, 0.098022461)

 

7

s1:

[0.096786499, 0.096992493)

s3

 

s2:

[0.096992493, 0.097301483)

 

 

s3:

[0.097301483, 0.097507477)

 

 

EOF: [0.097507477, 0.097610474)

 

8

s1:

[0.097301483, 0.097352982)

EOF

 

s2:

[0.097352982, 0.097430229)

 

Словарные методы

Словарные методы основаны на применении динамических словарей. Эти методы базируются на алгоритмах LZ77 и LZ78, предложенных Лемпелем и Зивом. В основе словарных методов лежат следующие идеи:

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

2.Слова хранятся в памяти и используются в дальнейшем в качестве словаря;

3.Кодирование осуществляется при помощи указателей на слова из сформированного словаря;

4.Кодирование является динамической процедурой, ориентированной на блоки символов.

При реализации методов Лемпеля-Зива используются словаря и упреждающий буфер.

Словарный метод LZ77

Врезультате сжатия файла формируется последовательность вида A, L, S , где A – относительный адрес в словаре,

L – количество совпадающих символов, S – символ из буфера, который

отличается от продолжения слова в словаре. При этом код –1, 0, S (или 0, 0, S ) означает, что в словаре ничего не найдено.

Соседние файлы в папке Teoria_informatsii