Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки МЗКІТ.doc
Скачиваний:
31
Добавлен:
12.02.2016
Размер:
3.38 Mб
Скачать

Лабораторна робота №3

Тема роботи: Стиснення інформації на основі алгоритму Лемпела- Зіва-Велча

Мета роботи: ознайомитися з роботою алгоритму Лемпела-Зіва-Велча. Навчитися стискати інформацію на основі цього алгоритму.

Теоретичні відомості

Історія алгоритму LZW розпочинається з публікації в травні 1977р. Дж.Зівом (J.Ziv) і А.Лемпелем (A.Lempel). В подальшому цей алгоритм був доопрацьований Террі А. Велчем (Terry A.Welch) і в остаточному варіанті був опублікований в статті "A Technique for High-Performance Data Compression", у червні 1984р. В статті описувалися деталі алгоритму і деякі загальні проблеми з якими можна зіткнутися при його реалізації. Пізніше цей алгоритм отримав назву LZW (Lempel-Ziv-Welch).

Стиснення за допомогою алгоритму LZW є надзвичайно ефективним для текстових файлів, хоча коефіцієнт стиснення більше ніж 50% є можливим і для файлів інших форматів. На сьогодні алгоритм LZW є найкращим алгоритмом багатоцільового стиснення даних. Високошвидкісні модеми для стиснення даних ( V.42 bis) використовують цей алгоритм, так само як і всім відома програма-утиліта ZIP.

До основних переваг алгоритму можна віднести:

  1. Відсутність необхідності попереднього аналізу даних;

  2. Динамічну адаптацію до специфіки даних, що стискаються;

  3. Не потрібно розміщати кодову таблицю у стиснений файл, тобто стиснена інформація містить всі необхідні дані для декомпресії.

Алгоритм кодування LZW

Суть алгоритму кодування LZW (наведеного нижче) полягає в тому, що створюється таблиця, в якій кожному символу або їх групі присвоюється число. Перед початком кодування в ініціюючу частину таблиці записуються всі символи вхідного тексту, які зустрічаються хоча б один раз. Під час кодування здійснюється по символьне читання вхідного тексту. Якщо зчитаний символ є в таблиці, то читається наступний. Якщо комбінації першого і другого символів ще немає в таблиці, то вона записується туди під останнім номером, а замість першого символу виводиться його числове значення з таблиці. Якщо ж комбінація двох символів є в таблиці, то читається наступний символ, і в таблиці вже перевіряється присутність комбінації із трьох символів. Процес триває доти, доки не будуть закодовані усі символи вхідного тексту.

Кодування тексту aaabbabab (див. рис.1)

Алгоритм кодування ЛЗВ

STRING = get first input character

while there are more input characters

CHARACTER = next input character

if STRING + CHARACTER is in STRING TABLE

STRING=STRING + CHARACTER

else

output the code for STRING

add STRING + CHARACTER to STRING TABLE

STRING = CHARACTER

end if

end while

output the code for STRING

Алгоритм декодування LZW

Текст для декодування: 13221621 (див. рис.2)

Алгоритм декодування ЛЗВ

OLDCODE = input first code

CHARACTER = translation of OLDCODE

output translation of OLDCODE

while there is more input data

NEWCODE = get next input code

if NEWCODE is not in STRING TABLE then

STRING = translation of OLDCODE

STRING = STRING + CHARACTER

else

STRING = translation of NEWCODE

end if

output STRING

CHARACTER = first character of STRING

add OLDCODE + CHARACTER to STRING TABLE

OLDCODE = NEWCODE

end of while

Режими роботи програми

Для вивчення роботи і засвоєння алгоритму LZW було створено навчальну програму. Програма передбачає три режими роботи.

Перший режим – Демонстрація роботи алгоритму LZW – надає користувачеві можливість вивчити принцип роботи даного алгоритму шляхом візуальної демонстрації по крокового виконання кодування чи декодування заданого користувачем текстового рядка.

Другий режим – Кодування/декодування файлів – надає користувачеві можливість оцінити ефективність алгоритму LZW при здійсненні стиснення з його допомогою файлів різного формату.

Третій режим – Оцінка вивчення алгоритму LZW – дозволяє користувачеві оцінити свій рівень знання і розуміння алгоритму кодування/декодування LZW.

Демонстрація роботи алгоритму LZW

Для запуску цього режиму роботи у головному вікні програми необхідно виділити відповідний пункт і натиснути кнопку “ЗАПУСК”. Далі відкривається вікно, в якому і здійснюється режим демонстрації. Для початку роботи необхідно задати текст для кодування у відповідному вікні вводу і натиснути кнопку “ВИКОНАТИ”. Якщо вікно вводу буде порожнім, то запуск кодування є неможливим – програма видає відповідне повідомлення. Якщо задано текст і програма знаходиться в режимі кодування, активізуються кнопки “ПОКРОКОВЕ ВИКОНАННЯ” та “ПРИПИНИТИ”. При кожному натисненні кнопки “ПОКРОКОВЕ ВИКОНАННЯ” виконується один крок алгоритму кодування, що підтверджується виділенням відповідного рядка у вікні алгоритму та заповнненням таблиці. Закодувавши введений текст, користувач має можливість спостерігати процес по крокового декодування, вибравши закладку “ДЕКОДУВАННЯ” і натиснути кнопку “ВИКОНАТИ”. Режим декодування є можливим за умови, що попередньо вже було закодовано якийсь текст.

Процес кодування/декодування можна завчасно перервати натиснувши кнопку “ПРИПИНИТИ”.