Algorytmy kodowania entropijnego 1. Kodowanie Shannona-Fano 2. Kodowanie Huffmana 3. Jednoznaczność kodów Huffmana. Kod o minimalnej wariancji 4. Dynamiczne kodowanie Huffmana
Poprzedni wykład - podsumowanie 1. Kompresja danych niezbędny element systemów multimedialnych 2. Algorytmy kompresji: stratne i bezstratne 3. Fazy budowy algorytmu: modelowania i kodowanie 4. Entropia miara średniej ilości informacji generowanej przez źródło. Shannon: średnia długość kodu w kompresji bezstratnej entropii 5. Kodowanie a. Minimalizacja średniej długości kodu b. Jednoznaczna dekodowalność 6. Kody prefiksowe wyróŝniona klasa kodów zapewniająca jednoznaczną dekodowalność i optymalność
Kodowanie entropijne Sformułowanie problemu: Źródło S generuje symbole (litery a i z alfabetu A Zadany jest model probabilistyczny określający prawdopodobieństwa P(a i i entropię H źródła Znaleźć kod prefiksowy minimalizujący redundancję R = l P ( a i i i Historycznie pierwszy taki algorytm Shannon (Bell Labs, Fano (MIT, 1949 H
Kodowanie Shannona - Fano 1. Tworzymy listę liter 2. Sortujemy ją wg. malejących częstości wystąpienia (prawdopodobieństw 3. Dzielimy listę na dwie podlisty, tak by sumy częstości na obu były jak najbliŝsze 4. Wszystkim literom na górnej liście przypisujemy 0, na dolnej 1 5. Stosujemy rekursywnie krok 3 i 4 dopóki kaŝdy z symboli stanie się liściem w drzewie Przykład: Alfabet {a, b, c, d, e} opisany częstościami: a b c d e 15 7 6 6 5
Kodowanie Shannona-Fano c.d. {a,b,c,d,c;39} {a,b;22} {c,d,e;17} 0 1 15 7 6 {d,e;11} 0 1 0 1 6 5 a b c 0 1 d e Litera Częst. P(a i H(a i c (a i l i *p(a i a b c 15 7 6 0.385 0.179 0.154 0.530 0.444 0.416 00 01 10 0.770 0.358 0.308 R=0.096 = 4.4%H d 6 0.154 0.416 110 0.462 e 5 0.128 0.380 111 0.384 39 1.000 2.186 2.282
Kody Shannona-Fano własności Łatwy do zaprogramowania, dość efektywny algorytm Z konstrukcji kod prefiksowy Kod typu od góry do dołu (od korzenia do liści. Czy jest to kod optymalny (czy dla danego modelu probabilistycznego minimalizuje średnią długość? Odpowiedź niekoniecznie!!!
Kodowanie Huffmana Przesłanki cechy kodu optymalnego 1. Symbolom występującym częściej odpowiadają w kodzie optymalnym krótsze słowa kodowe 2. Dwa najrzadziej występujące symbole mają w kodzie optymalnym równe długości Podstawa tworzenia kodu: do 1 i 2 dodajemy zasadę: słowa kodowe odpowiadające najmniej prawdopodobnym symbolem róŝnią się tylko jednym bitem a, b najmniej prawd. symbole, P(a P(b c(a=m*0, c(b=m*1
Kodowanie Huffmana algorytm Przepis na konstrukcję drzewa binarnego kodu: 1. Utwórz listę symboli; posortuj wg prawdopodobieństw 2. Utwórz wierzchołki zewn. (liście odpowiadające wyjściowym symbolom 3. Weź dwa węzły odpowiadające symbolom o najmniejszym prawdopodobieństwie. Przypisz im odpowiednio 0 i 1. Utwórz węzeł reprezentujący ich sumę (z prawdopodobieństwem równym sumie 4. Dodaj nowo utworzony węzeł do listy węzłów. Usuń z tej listy jego węzły macierzyste 5. Powtarzaj całą procedurę dopóki nie pozostanie tylko jeden węzeł (utoŝsamiony z korzeniem drzewa
Kodowanie Huffmana przykład 1 0 24 0 1 13 11 0 1 0 1 a,15 b,7 c,6 d,6 e,5 Litera Częst. P(a i H(a i c (a i l i *p(a i a b c 15 7 6 0.385 0.179 0.154 0.530 0.444 0.416 1 000 001 0.385 0.537 0.462 R=0.044 = 2.0 % H d 6 0.154 0.416 010 0.462 e 5 0.128 0.380 011 0.384 39 1.000 2.186 2.230
Kody Huffmana własności Łatwy do zaprogramowania Z konstrukcji kod prefiksowy Kod typu od dołu do góry (od liści do korzenia Jest to kod optymalny (dla danego modelu probabilistycznego Ograniczenia na średnią długość kodu: H(S l H(S + e e = p max gdy p max > 0.5 e = p max + 0.086 gdy p max 0.5
Jednoznaczność kodów Huffmana Dany jest model probabilistyczny P(a i. Czy określa on kod w jednoznaczny sposób? Odpowiedź niekoniecznie. Powód róŝne moŝliwości sortowania w trakcie tworzenia kodu RóŜne kody będą miały tą samą średnią długość; róŝnić się będą wariancją Najkorzystniej uŝywać kodu o minimalnej wariancji Przykład: alfabet {a, b, c, d, e} z modelem probabilistyczym: a b c d e 0.4 0.2 0.2 0.1 0.1
Jednoznaczność kodów Huffmana c.d. I sposób 1 0 0.6 0 1 0.4 0 1 0.2 0 1 a b c d e II sposób 0 0.6 1 0 0.4 1 0.2 0 1 0 1 a b c d e
Jednoznaczność kodów Huffmana c.d. Litera Praw. Kod 1 Kod 2 Dl. 1 Dl. 2 Kw.1 Kw.2 a 0.4 1 00 0.4 0.8 0.576 0.016 b 0.2 01 01 0.4 0.4 0.008 0.008 c 0.2 000 11 0.6 0.4 0.128 0.008 d 0.1 0010 010 0.4 0.3 0.324 0.064 e 0.1 0011 011 0.4 0.3 0.324 0.064 1.0 2.2 2.2 1.360 0.160 Znaczenie praktyczne im większa wariancja, tym trudniej zaprojektować bufor przy transmisji przez kanał telekomunikacyjny Zasada tworzenie kodu o minimalnej wariancji symbole złoŝone umieszczamy na liście sortowania maksymalnie wysoko
Rozszerzone kody Huffmana Gdy alfabet mały, prawdopodobieństwa wystąpienia liter silnie zróŝnicowane duŝa redundancja Litera P(a i H(a i k i l i l i P(a i a 0.9 0.1368 0 1 0.9 b 0.1 0.3322 1 1 0.1 SUMA 1.0 0.4690 1.0 R= l śr H = 1.0 0.469=0.531= 113% H MoŜliwe rozwiązanie kodowanie ciągów liter o ustalonej długości k (k = 2, 3,... Rozszerzony alfabet: litery to ciągi k-elementowe oryginalnego alfabetu Gdy m rozmiar wyjściowego alfabetu; to rozmiar rozszerzonego alfabetu = m k
Rozszerzone kody Huffmana c.d. Litery P(a i H(a i k i l i l i P(a i aa 0.81 0 1 0.81 ab 0.09 11 2 0.18 ba 0.09 100 3 0.27 bb 0.01 101 3 0.03 SUMA 1.00 0.938 1.29 R zn = (1.29 0.938/2 = 0.176 = 37.5% H Gdy kodujemy trójki R zn = 13.6% H Wynik ogólny średnia długość kodu ograniczona poprzez: H(S l H(S + 1/k Wada silny (wykładniczy wzrost rozmiaru alfabetu
Kodowanie dynamiczne Omawiane wyŝej modele wymagają znajomości modelu probabilistycznego na ogół nie jest on znany. MoŜliwe wyjście procedura dwuprzebiegowa. Nawet gdy model znany, to jego przekazanie (zwłaszcza w przypadku modelu wyŝszego rzędu stanowi dodatkowe obciąŝenie. Wyjście pozbawione powyŝszych wad kodowanie dynamiczne (adaptacyjne.
Kodowanie dynamiczne zasada Ogólny schemat kodowania dynamicznego: KODER Inicjalizuj_model(; while ((a=getchar(input!= eof { koduj(a,output; update_model(a; } DEKODER Inicjalizuj_model(; while ((a=dekoduj(input!= eof { putc(a,output; update_model(a; } Koder i dekoder uŝywają tych samych procedur inicjalizuj_model i update_model to powoduje, Ŝe model ewoluuje tak samo dla nadawcy (kodera i odbiorcy (dekodera.
Dynamiczne kodowanie Huffmana Model opisany przez drzewo binarne. Liście (wierzchołki zewnętrzne kwadraty, wierzchołki wewnętrzne kółka. Dla alfabetu o n literach jest 2*n 1 wierzchołków Dodatkowe elementy opisu Waga wierzchołka (dla zewnętrznych liczba wystąpień; dla wewnętrznych suma wag jego potomstwa Numer wierzchołka jednoznacznie go identyfikujący Wierzchołki o mniejszym numerze mają niŝsze wagi. Dla kaŝdego 1 j n wierzchołki y 2j-1 i y 2j są potomkami tego samego rodzica, którego numer jest większy y 2j-1 i y 2j własność rodzeństwa. Dodatkowy wierzchołek NYT o wadze 0 odpowiadający symbolom jeszcze nie dołączonym do drzewa Zbiór wierzchołków o takiej samej wadze nazywamy blokiem
Inicjalizacja Przed rozpoczęciem kaŝdej literze alfabetu przypisujemy wejściowy kod (taki sam dla kodera i dekodera określony następująco: niech m rozmiar alfabetu. Wybieramy e i r takie, Ŝe m = 2 e + r, 0 r < 2 e Dla 1 k 2 r kodem a k jest (e+1 bitowa binarna reprezentacja liczby (k-1, dla pozostałych k kodem a k jest e bitowa binarna reprezentacja liczby (k-r-1 Przykład: litery angielskie, m=26, e=4, r=10. Kod a (k=1 00000, kod b (k=2 00001, kod a 22 1011 Początkowe drzewo: jeden wierzchołek NYT o wadze 0
Procedura uaktualniająca
Kodowanie dynamiczne - przykład Zakodować ciąg [aardv] zakładając, Ŝe alfabet zawiera 26 małych liter angielskich Inicjalizacja: 1. m=26 e=4, r=10 2. Kody startowe liter: c(a = 00000, c(d = 00011, c(r = 10001, c(v = 1011 Kodowanie: 1. Zakodowany ciąg ma postać: 00000 1 0 10001 00 00011 000 1011 2. Kolejne drzewa reprezentacje modelu są pokazane na następnej stronie.
Procedura uaktualniająca - działanie
Procedura kodująca
Procedura dekodująca
Kody Huffmana - zastosowania Zwykle w połączeniu z innymi metodami (jako część procedury; np. LZ, JPEG Kompresja tekstu typowy stopień kompresji 1 : 1.65 Słabiej nadaje się do bezstratnej kompresji obrazu i dźwięku osiągany stopień kompresji 1 : 1.7 (gdy kodujemy róŝnice między pikselami lub kolejnymi próbkami dźwięku