Компресирането на данни е процес, при който информацията от един се преобразува така, че да се използват по-малко битове, тоест размерът на файла да е по-малък.
Архивирането (вид компресиране без загуба на данни) е процес, при който даден файл се добавя в компресирана папка. Въпреки че се нарича „папка“, това всъщност не е директория, а отделен файл във формат ZIP, RAR, GZ, BZIP, 7z, XZ или друг. Трябва да се има предвид, че архивиране се нарича и процесът, при който се създават резервни копия (например Архив на БНТ).
При компресирането разликата с оригиналния файл е, че новият заема по-малко място (с други думи, той е компресиран). За да се осъществи този процес, се прилагат различни математически методи и алгоритми, чрез които се съпоставят различни кодове и се махат излишни знаци.
Същност В компютърните науки компресирането представлява кодиране на информацията, използвайки по-малко битове от оригиналния файл. Компресирането може да бъде със или без загуба. Компресирането без загуба намалява броя на битовете, като идентифицира и елиминира статистически излишните. Няма загуба на информация. При компресирането със загуба се идентифицира ненужната информация и се премахва. По този начин се намалява броят на битовете. Процесът на намаляване на размера на файла често се нарича компресиране на данни, но всъщност формалното му име е „кодиране на сорс кода“ ().
Компресирането е полезно, защото спомага да се намалят ресурсите, използвани за складиране или пренасяне на информацията. Компресираната информация трябва да бъде декомпресирана, за да бъде използвана. Този допълнителен процес изисква допълнително изчислително време, което расте пропорционално на размера на компресирания файл. При създаването на схеми за компресиране на данни се налага да се правят компромиси, включващи степента на компресия и изчислителните ресурси, необходими, за да се компресира файлът. Ползи от архивирането:
Една от ползите е, че така се води до намаляване на заетото пространство, и съответно на компютъра може да се запише далеч повече информация, отколкото, ако ненужните файлове не са архивирани; Препоръчително е файловете да се архивират, защото обикновено повечето от архивираните файлове остават незасегнати от компютърни вируси. Това е добър вариант за запазването им; Обикновено пощите и програмите за комуникация (като Скайп) имат ограничение върху обема на файла. Затова архивирането може да разреши преноса на един филм например, който иначе няма как да бъде изпратен.
Видове компресиране на данни Със загуба Компресирането на данни със загуба е обратното на компресирането на данни без загуба. В тези схеми загубите на информацията са приемливи. Изпускането на несъществен детайл от източника на данни може да запази място в хранилището. Схемите на компресирането на данни със загуба са изпълнени с изследване за това, как хората възприемат данните, които са под въпрос. Например човешкото око е по-чувствително към проницателни видоизменения на яркостта, отколкото към видоизменения на цвета. Компресирането на JPEG изображение работи в частност от закръглянето на несъществени битове от информация. Има съответстваща замяна между загубата на информация и размера на намалението. Редица популярни формати за компресиране използват тези разлики във възприятието, включвайки онези, използвани в музикални файлове, изображения и видео.
Компресирането на изображения със загуба на данни може да бъде използвано от цифровите камери за увеличаване на капацитета на съхранение с минимално понижение на качеството на снимката. По същия начин DVD устройствата използват MPEG-2 видео кодеци със загуба на данни за видео компресиране.
При аудио компресирането със загуба на данни методите за психоакустика са използвани за премахването на такива компоненти на сигнал, които не могат да се чуват (или са по-слабо чуваеми). Компресирането на човешката реч е често изпълнявано с дори по-специализирани техники. Кодирането на речта или на гласа е понякога разграничавано като отделна дисциплина от аудио компресирането. Различни аудио и речеви стандарти за компресиране са описани като аудио кодеци. Компресирането на гласа е използвано от интернет телефонията, например аудио компресирането е използвано за пренасяне на аудио информацията от CD на твърд диск и е декодирано от аудио плейъри.
Без загуба Алгоритмите за компресиране без загуба обикновено използват методи за премахване на статистическото повторение, за да представят данните в по-сбит вариант, без да се губи информация.Lossless Compression (Компресиране без загуби) Компресирането без загуба е възможно, тъй като в повечето данни от реалния живот има статистическо излишество. Например в едно изображение може да има области, в които цветът не се променя върху няколко пиксела. Вместо да кодираме „червен пиксел, червен пиксел, ...“, информацията може да се представи като „279 червени пиксела“. Това е базов пример за това, как работи run-length encoding, има много схеми, по които може да се намали размер на файл, като се елиминира излишеството в информацията.
LZ (Lempel-Ziv) компресията е сред най-популярните алгоритми за компресия без загуба. DEFLATE е вариация на LZ с оптимизирана скорост на декомпресия и добър коефициент на компресия, но самото компресиране може да бъде бавно. DEFLATE се използва в PKZIP, Gzip и PNG форматите за компресия. LZW (Lempel-Ziv-Welch) се използва в GIF изображенията. Струва си да обележим и LZR (Lempel-Ziv-Renau) алгоритъма, който служи за база при ZIP компресията. LZ методите използват таблично базиран модел за компресия, записите в таблицата представляват повторяеми низове от данни. При повечето LZ методи таблицата се генерира динамично от предходно постъпилите входни данни. Самата таблица много често използва Huffman енкодинг (напр. SHRI, LZX). LZХ е кодираща схема (базирана на LZ), която се използва в CAB формата на Microsoft.
Най-добрите модерни методи за компресия без загуба използват вероятностни модели, такива като прогнозирането по частично съвпадение.
Класовете от граматично-базирани кодове набират популярност, защото те могат да компресират изключително добре многократно повтарящи се текстове, например колекция от биологични данни за едни и същи или родствени видове, документ с огромен набор от версии, интернет архиви и т.н. Основна задача на граматичното кодиране е изграждането на контекстно независима граматика, произтичаща от единствен низ. Sequitur и Re-Pair са практични граматични алгоритми за компресия, за които има достъпни публични кодове.
Като резултат от усъвършенстването на тези техники, статистическите прогнозирания могат да бъдат комбинирани в алгоритъм, наречен аритметично кодиране. Аритметичното кодиране, измислено от Jorma Rissanen и превърнато в практичен метод от Witten, Neal и Cleavy, постига по-добра компресия от добре известния алгоритъм на Huffman и се справя на изключително ниво при задачи за адаптивна компресия на данни, където прогнозиранията са контекстнозависими. Аритметичното кодиране се използва в bi-level стандарта за компресията на изображения JBIG и при стандарта за компресия на документи DjVu. Системата за вход на текст Dasher използва инвертиран аритметичен кодер.
Алгоритми за компресиране Кодиране по дължина Кодирането по дължина () е форма на компресиране на информация, използвана при последователности от данни, където едни и същи елементи се повтарят многократно. След края на кодировката информация е запазена в единична клетка, съдържаща вида данни и броя на неговото срещане. Кодирането по дължина е най-оптимално при файлове, където се срещат много повторения на данни, например простите графични изображения или икони.
Нека имаме картина с бял фон и черен текст. Тя е съставена от много последователности от бели пиксели в празното пространство и много черни пиксели, там където е текстът. Хипотетично нека вземем, че следната последователност представлява един ред от картинката (B представлява черните пиксели, а W – белите):
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB Ако използваме алгоритъма за кодиране по дължина, ще получим: 12WB12W3B24WB който се интерпретира по следния начин: 12 бели, 1 черно, 3 бели, 3 черни и т.н.
Алгоритъмът представя оригиналния запис от 53 символа в запис с 13. Разбира се, истинският формат, използван за запаметяване на картинки, е бинарен код вместо ASCII символи, но принципът остава същият. Всеки файл може да бъде компресиран с помощта на този метод.
Алгоритъмът за кодиране по дължина кодира данните без загуба и най-добре се връзва при използването му с иконки. Не работи толкова ефикасно при картини с продължителни тонове, например фотографски снимки, макар че JPEG форматът го използва доста ефективно, за да изчисли коефициентите, които остават след трансформирането на блокове с картинни файлове с данни. Алгоритъмът за кодиране по дължина често се ползва при факс машините, тъй като повечето изпращани файлове са бели пространстраства с черен текст.
Речниково кодиране Речниковото кодиране представлява всеки от редицата алгоритми за компресиране на данни без загуба, който оперира чрез търсене на съвпадения между текста, който да бъде компресиран и набора от низове, съдържащи се в структурата от данни (наричан „речник“), поддържан от енкодер. Когато енкодерът намери такова съвпадение, той заменя отношение към позицията на низа в структурата от данни.
Някои речникови кодирания използват „статичен речник“, при който пълният набор от низове е определен преди да започне кодирането и не се променя в процеса на кодиране. Този подход е най-често използван, когато съобщението или наборът от съобщения, които трябва да бъдат енкодирани, е голям и устойчив. Например многото софтуерни пакети, които съхраняват съдържанието на библията в ограничено пространство на PDA устройство главно изграждат статичен речник от показател от думи в текст и след това използват този речник, за да компресират стиховете.
По-често използвани са методите, при които речникът започва при някое предопределено състояние, но съдържанието се променя в продължение на процеса на енкодиране, основано на данните, които вече са били енкодирани. Двата алгоритъма LZ77 и LZ78 работят на този принцип. При LZ77 структура от данни, наричана „плъзгащ прозорец“ (), се използва за задържане на последните N байтове от преработени данни. Този прозорец служи като речник, ефективно запазвайки всеки подниз, който се е появил при последните N байтове като входове на речник. Вместо да се използва единичен индекс за идентифициране на входовете на речника се използват две стойности – дължината, показваща дължината на съвпадащия текст и отстоянието (също наричано разстояние), показващо, че съвпадението е намерено в плъзгащия прозорец, започвайки байтове на отстояние преди настоящия текст.
Кодиране с частично съвпадение Кодирането с частично съвпадение ()е статистически техника за компресиране на информация, базирана на контекстно моделиране и предсказание. Кодирането с частично съвпадение (известен като PPM) използва набор от предхождащи символи в некомпресирания символен поток, за да предскаже какъв е следващия символ в потока.
Броят на предхождащите символи n определя реда на PPM модела, който се означава като PPM(n). Неограничените варианти, където контекста няма определена дължина, също съществуват и се означават като PPM*. Ако не може да бъде създадено предсказание базирано на всичките n на брой символи в контекста, алгоритъма опитва да създаде такова, използвайки n-1 символа. Процеса се повтаря докато се намери съвпадение или не останат символи в контекста. В този момент се фиксира предсказание.