Kody i szyfry
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:
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 ...an sł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ę
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
Twierdzenie (warunek wystarczający istnienia kodu prefiksowego):
Jeśli l1 , l2 ,..., ln N spełniają nierówność
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 .