Jeśli zastanawiasz się w jaki sposób programy kompresujące dane sprawiają, że plik 700 megabajtowy zajmuje po spakowaniu „tylko” 600 megabajtów, bez utraty jakości, czy żadnej treści… Jeśli myślisz, że program archiwizujący w jakiś magiczny sposób zagęszcza bity, sprawiając, że na tarczy dysku twardego zajmują mniejszą powierzchnię… To znaczy, że musisz rzucić okiem na poniższy tekst.
Owszem, dla laika, na pierwszy rzut oka, kompresja plików może wyglądać dość dziwnie. A przynajmniej niejasno. Bo przecież nie polega to chyba na „ścieśnianiu” bitów, na zagęszczaniu sygnału elektrycznego na HDD…
Nawet nie „chyba”, tylko „na pewno” na tym nie polega.
Kompresja to taki sposób zapisu danych, aby bez utraty ich treści (oraz jakości) ograniczyć liczbę wykorzystywanych bitów. A więc nie chodzi o zagęszczanie, lecz o zmniejszanie. Tylko jak to się ma do tego, iż nie tracimy nic z treści pliku?
Mianowicie każdy plik (a przynajmniej ich znakomita większość) posiada w swej strukturze pewne powtarzające się wyrażenia, czy fragmenty wyrażeń. Najprościej rzecz ujmując, jeśli kompresujemy przykładowo plik tekstowy, zawierający dziesięć razy wyrażenie „CoreBlog.pl”, które de facto składa się z 11 znaków, to program archiwizujący w celu ograniczenia liczby znaków, może określić sobie, że każde to wyrażenie zastąpi jednym czy dwoma znakami, np. „CB”. W tym przypadku zamiast 11 liter używamy tylko 2, co daje oszczędność 9 znaków na wyrażenie. W przypadku całego tekstu, gdzie znajdowało się 10-krotne powtórzenie „CoreBlog.pl” jest to oszczędność 90-ciu znaków! Oczywiście nie można zapomnieć, że wewnątrz pliku musi się też znajdować odpowiedni wpis, który poinformuje program dekompresujący, że przy wypakowywaniu pliku musi wyrażenie „CB” zastąpić wyrażeniem „CoreBlog.pl”. Biorąc pod uwagę, że w takim pliku tekstowym wyrażeń powtarzających się może być znacznie więcej, a każde z nich można spokojnie zredukować do jednego tylko znaku, łatwo domyślimy się, że oszczędność wykorzystywanego miejsca na dysku będzie ogromna.
Oczywiście to tylko i wyłącznie duże uproszczenie, które jedynie w pewnym sensie oddaje sens kompresji, same algorytmy za to odpowiedzialne są znacznie bardziej skomplikowane i rozbudowane. Tym bardziej, że obsługują one nie tylko pliki tekstowe, ale i graficzne, czy dźwiękowe.
Dla innych plików, np. graficznych, można zaprezentować nieco odmienny od przedstawionego schemat działania programu archiwizującego. Mianowicie załóżmy, że pojedyncze literki to oznaczenie konkretnego koloru:
C – Czarny
Z – Zielony
B – Biały
Jeśli mamy obrazek, który jest długą czarną linią, przechodzącą w krótki odcinek bieli, a ten kolejno przechodzi w kolor zielony, to plik mógłby mieć taką strukturę:
CCCCCCCCCCCCCBBBBZZZZZZZZZZZZZZZ
Tymczasem program kompresujący mógłby to zapisać inaczej. Po co powtarzać 13 razy literkę C, skoro zapis ten można zapisać 13C. Tym samym zamiast BBBB można zapisać o połowę krótsze 4B i wreszcie 15Z.
Z tego wynika, że wyżej przedstawiony długi zapis mógłby mieć znacznie prostszą formę:
13C4B15Z
co stanowi zapis znacznie krótszy, a oznacza zupełnie to samo – długą linię czarną, przechodzącą w biel i znowu długą linię zieloną.
Jak już wspomniałem wcześniej, to tylko duże uproszczenie w opisie algorytmów kompresujących, oddające jedynie „z grubsza” ich sens. Ale przynajmniej początkującym w kwestiach informatyki daje jako takie pojęcie na czym cały ten proces polega.