Алгоритми стиснення: опис, основні прийоми, характеристики

Стиснення є приватним випадком кодування, основною характеристикою якого є те, що результуючий код менше вихідного. Процес заснований на пошуку повторень в інформаційних рядах і збереження тільки однієї поруч з кількістю повторень. Таким чином, наприклад, якщо послідовність з’являється у файлі, як «AAAAAA», займаючи 6 байтів, він буде збережений, як «6A», який займає 2 байти, в алгоритмі стиснення RLE.

Історія виникнення процесу

Азбука Морзе, винайдена в 1838 році – перший відомий випадок стиснення даних. Пізніше, коли в 1949 році мейнфрейм-комп’ютери почали завойовувати популярність, Клод Шеннон і Роберт Фано винайшли кодування, названого в честь авторів – Шеннона-Фано. Це шифрування привласнює коди символів в масиві даних з теорії ймовірності.

Тільки в 1970-х з появою інтернету і онлайн-сховищ, були реалізовані повноцінні алгоритми стиснення. Коди Хаффмана динамічно генерувалися на базі вхідної інформації. Ключова відмінність між кодування Шеннона-Фано і кодування Хаффмана полягає в тому, що в першому дерево ймовірності будувалося знизу вгору, створюючи неоптимальний результат, а в другому – зверху вниз.

У 1977 році, Авраам Лемпель і Джейкоб Зів видали свій інноваційний метод LZ77, що використовує більш модернізований словник. У 1978 році, та ж команда авторів, видала вдосконалений алгоритм стиснення LZ78. Який використовує новий словник, аналізує вхідні дані і генерує статичні словник, а не динамічний, як у 77 версії.