
- •«Засоби архівації та стиснення даних»
- •1. Методи архівації і стиснення даних Поняття технології стиснення даних
- •Основні формати упаковки даних
- •Методи стиснення даних
- •Алгоритм Шеннона-Фано
- •Алгоритм Хаффмана
- •2. Прийоми роботи з програмами-архіваторами Огляд сучасних архіваторів
- •Робота з програмою-архіватором WinZip
- •1. Перегляд архівного файлу у форматі .Zip
- •2. Витягання файлів з zip-архіву
- •3. Створення zip-архіву
- •4. Захист zip-архіву
- •5. Створення саморозпакувального zip-архіву
- •6. Дослідження ефективності алгоритмів стиснення архіватора WinZip
- •Робота з програмою-архіватором WinRar
- •Дослідження алгоритмів стиснення програми WinRar
- •Висновки
- •Контрольні питання
- •Завдання на самостійну роботу
Алгоритм Хаффмана
Алгоритм Хаффмана — адаптивний алгоритм оптимального префіксного кодування алфавіту з мінімальною надлишкою, який був розроблений в 1952 р. аспірантом Массачусетського технологічного інституту Д.Хаффманом.
Цей алгоритм кодування складається з двох основних етапів:
1) побудова оптимального кодового дерева;
2) побудова відображення код-символ на основі побудованого дерева.
Ідея алгоритму полягає в наступному: якщо відомі ймовірності символів в повідомленні, то можна описати процедуру побудови кодів змінної довжини бітів. Символам з більшою ймовірністю ставляться у відповідність коротші коди.
Класичний алгоритм Хаффмана на вході отримує таблицю частот символів (як часто вони зустрічаються в повідомленні). Далі на підставі цієї таблиці будується дерево кодування Хаффмана (Н-дерево):
1. Символи вхідного алфавіту утворюють список вільних вузлів. Кожен лист має вагу, яка може дорівнювати або ймовірності, або кількості входжень символу в повідомлення.
2. Вибираються два вільні вузли дерева з найменшими вагами.
3. Створюється їх «батько» з вагою, що рівною їх сумарній вазі.
4. «Батько» додається в список вільних вузлів, а двоє його «дітей» (нащадків) видаляються з цього списку.
5. Одній дузі, що виходить з «батька», ставиться у відповідність 1, інший — 0.
6. Кроки, починаючи з другого, повторюються до тих пір, поки в списку вільних вузлів не залишиться тільки один вільний вузол. Він і вважатиметься коренем дерева.
Цей метод застосовується при стисненні фото- і відеозображень (JPEG, стандарти стиснення MPEG), в архіваторах (PKZIP, LZH та інш.), в протоколах передачі даних MNP5 і MNP7.
ЗАВДАННЯ № 2. Кодування методом Хаффмана 1. Кодом Хаффмана закодувати повідомлення: ОБОРОНОСПОСОБНОСТЬ. 2. Визначити коефіцієнт стиснення. |
ТЕХНОЛОГІЯ РОБОТИ
1. Кодування повідомлення. Повідомлення містить 18 символів (букв). Статистика появи букв в повідомленні приведена в табл. 1.
Розташовуємо букви в порядку убування частоти. Отримуємо наступну послідовність: О7 С3 Б2 Н2 П1 Р1 Т1 Ь1. Згідно з алгоритмом Хаффмана побудуємо кодове дерево, яке приведене на рис. 3.
Рис. 3. Послідовність та дерево кодування Хаффмана
Кодова послідовність кожного символу приведена у табл. 3.
Таблиця 3. Кодування символів алгоритмом Хаффмана
Символ початкового повідомлення |
Кодування алгоритмом Шеннона-Фано |
Кодування KOI8-U |
Б |
0000 |
E2(16) = 1110 0010 |
Н |
1000 |
EE(16) = 1110 1110 |
О |
1 |
EF(16) = 1110 1111 |
П |
0110 |
F0(16) = 1111 0000 |
Р |
1110 |
F2(16) =1111 0010 |
С |
100 |
F3(16) = 1111 0011 |
Т |
0010 |
F4(16) = 1111 0100 |
Ь |
1010 |
F8(16) = 1111 1000 |
Таким чином, отримана наступна кодова послідовність повідомлення:
О |
Б |
О |
Р |
О |
Н |
О |
С |
П |
О |
С |
О |
Б |
Н |
О |
С |
Т |
Ь |
1 |
0000 |
1 |
1110 |
1 |
1000 |
1 |
100 |
0110 |
1 |
100 |
1 |
0000 |
1000 |
1 |
100 |
0010 |
1010 |
Довжина закодованого повідомлення становить VC = 48 біт.
2.
Визначення коефіцієнту стиснення.
Якщо закодувати повідомлення рівномірним
кодом KOI8-U
(кожний символ кодується 8 бітами – див.
табл.. 7.3), то довжина повідомлення складе
VП
= 144 біта. Таким чином, коефіцієнт стиску
дорівнює
,
тобто досягнуто стиск в 3 рази.