Podręcznik

6. Kompresja informacji

6.1. Wstęp

Kompresja informacji to inaczej kompresja danych. Dokładniej, konkretna metoda kompresji danych to zawsze 2 algorytmy:

  • algorytm kompresji danych
  • algorytm rekonstrukcji danych

Kompresję dzielimy na 2 kategorie: kompresję stratną i kompresję bezstratną. Jeśli dane poddawane kompresji potrafimy odtworzyć, zrekonstruować w dokładnie takiej samej postaci jak dane poddawane kompresji to kompresję nazywamy bezstratną. W przeciwnym razie kompresja jest kompresją stratną.

Rodzaj kompresji zależy również od danych poddawanych kompresji. Tak więc mamy:

  • kompresję plików tekstowych
  • kompresję plików dźwiękowych (kompresja audio)
  • kompresję obrazów statycznych
  • kompresję sekwencji video czyli obrazów dynamicznych (obrazów ruchomych)

Model probabilistyczny generacji danych przez źródło danych: W zagadnieniach związanych z kompresją danych bardzo ważny jest model matematyczny generacji danych. Załóżmy, że obiektami kodowanymi są litery (symbole) z pewnego alfabetu V1 {<i>a</i><sub>1 </sub>, <i>a</i><sub>2 </sub>,..., <i>a</i><sub><i>n </i></sub>} i znamy prawdopodobieństwo pojawienia się każdej litery tzn. podane są prawdopodobieństwa P(ai ) pi dla i 1, 2,..., n . Jeśli przyjmiemy, że słowo nad alfabetem V1 {<i>a</i><sub>1 </sub>, <i>a</i><sub>2 </sub>,..., <i>a</i><sub><i>n </i></sub>} generowane jest przez źródło danych jako ciąg niezależnych k losowań liter (podobnie jak w ciągu k doświadczeń Bernoulliego) to otrzymujemy w naturalny rozkład prawdopodobieństwa na zbiorze V1 k wszystkich słów o długości k .

Ważnym parametrem charakteryzującym źródło danych jest entropia źródła. Jest to liczba definiowana wzorem:

H  \displaystyle\sum^{n}_{i=1} pi log2 pi i1

Shannon udowodnił, że najlepszym rezultatem (przy kodowaniu binarnym) jaki można uzyskać za pomocą algorytmu kompresji bezstratnej jest taki algorytm kodowania (taki kod binarny k : V1 {0,1} ) by średnia bitów wykorzystanych do kodowania liter z alfabetu była równa entropii źródła.

Podstawowy pomysł na kompresję jest następujący. Obiekty kodowane występujące częściej (czyli o większym prawdopodobieństwie wystąpienia) powinny być kodowane krótszym słowem a obiekty występujące rzadziej (o mniejszym prawdopodobieństwie) dłuższym słowem. Takie rozwiązanie wykorzystywane jest w znanym każdemu harcerzowi kodzie zwanym „alfabetem Morse’a”. Na przykład litera „e” często pojawiająca się w tekstach angielskich jest kodowana za pomocą jednej kropki (słowo o długości 1 nad alfabetem V2 {<font face="Symbol, serif">□</font>, <font face="Symbol, serif"></font>} ).

Jednoznaczna dekodowalność: Dosyć ważną użyteczną własnością kodu jest jego jednoznaczna dekodowalność. Oto definicja tej własności. Niech V1 {<i>a</i><sub>1 </sub>, <i>a</i><sub>2 </sub>,..., <i>a</i><sub><i>n</i> </sub>} . Kod k : V1 V nazywamy jednoznacznie dekodowalnym jeżeli każdy ciąg słów kodowych daje 2 się odkodować w dokładnie jeden sposób tzn. nie ma dwóch różnych słów 12 ...m , 1 2 ...m nad alfabetem V1 dających (po zakodowaniu każdej litery z V1 i konkatenacji uzyskanych słów kodowych) to samo słowo tzn. nie może być

k(1 )k(2 )...k (m ) k(1 )k(2 )...k(m )

Prefiks i sufiks. Niech V będzie dowolnym ustalonym alfabetem oraz a1a2 ...asłowem nad alfabetem V, wówczas każde słowo a1a2 ...ak , gdzie 1 k n nazywamy prefiksem słowa a1a2 ...an a każde słowo ak a2 ...an , gdzie 1 k n nazywamy sufiksem słowa a1a2 ...an . Jednocześnie słowo puste jest sufiksem i prefiksem każdego słowa.

Kod prefiksowy. Kod prefiksowy to kod w którym żadne słowo kodowe nie jest prefiksem innego słowa kodowego.

Istota rzeczy jest tu taka. Załóżmy, ze odbieramy słowo kodowe litera po literze. W kodzie prefiksowym patrząc na słowo kodowe nie mamy wątpliwości czy to już koniec słowa kodowego czy być może tylko początkowy fragment innego słowa kodowego.

Kody prefiksowe są w oczywisty sposób jednoznacznie dekodowalne.

Jeśli stosujemy kody o zmiennej długości słowa kodowego to ważnym pojęciem jest średnia długość słowa kodowego. W przypadku słów binarnych średnią długość słowa kodowego nazywamy średnią bitową kodu. Dokładniej, niech źródło danych będzie takie, 2 że V1 {<i>a</i><sub>1 </sub>, <i>a</i><sub>2 </sub>,..., <i>a</i><sub><i>n</i> </sub>} oraz prawdopodobieństwa P(ai ) pi dla i 1, 2,..., n . Średnią długością kodu k : V1 V2 nazywamy liczbę

l \displaystyle\sum^{n}_{i=1} P(ai )l(k(ai ))

gdzie l( ) oznacza długość słowa

Twierdzenie (warunek konieczny dekodowalności kodu, nierówność Krafta-McMillana):

Jeśli K jest zbiorem słów kodowych (binarnych) o długościach l1 , l2 ,..., ln N i kod k : V1 K jest jednoznacznie dekodowany to spełniony jest następujący warunek n tzw. nierówność Krafta-McMillana

\displaystyle\sum^{n}_{i=1} 2li 1

Twierdzenie (warunek wystarczający istnienia kodu prefiksowego):

Jeśli l1 , l2 ,..., ln N spełniają nierówność

\displaystyle\sum^{n}_{i=1} 2li 1

to można znaleźć dla n elementowego alfabetu V1 {<i>a</i><sub>1 </sub>, <i>a</i><sub>2 </sub>,..., <i>a</i><sub><i>n </i></sub>} kod prefiksowy k : V1 {0,1} o długościach słów kodowych wynoszących l , l ,..., ln .