Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 3: kody Golomba, kody Tunstalla.

Podobne prezentacje


Prezentacja na temat: "Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 3: kody Golomba, kody Tunstalla."— Zapis prezentacji:

1 Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 3: kody Golomba, kody Tunstalla

2 Kodowanie długości serii (RLE=run length encoding) Przykłady ciągów binarnych z dużą przewagą zer: –faksy (tekst drukowany) –grafika (monochromatyczna, nie tylko) Kodowanie długości serii: Dla danych postaci 0000000100000000100100000000001000... kodujemy długości kolejnych ciągów zer: 7 8 2 10 17...

3 Kodowanie długości serii c.d. Problemy: jak kodować liczby oznaczające długości serii aby uzyskać maksymalną kompresję? –Jaki rozkład prawdopodobieństwa? alfabet wejściowy potencjalnie nieskończony (dowolnie długie ciągi zer...)

4 RLE: rozkład prawdopodobieństwa Ciąg wartości niezależnych: P(0)=p P(1)=1-p Wtedy: P( 0 n 1 ) = p n ( 1-p ) Kiedy długie serie: p bliskie jedynki

5 Kod Golomba rzędu m Kodowanie liczby n: Niech n = q m + r dla 0  r  m. (inaczej: q to wyni, a r reszta z dzielenia n przez m) Kod liczby n składa się z 2 części: –unarnego kodowania q: 1 q 0 –Kody stałe liczby r o długościach  log m  i  logm , symetrycznie odbite kody stałe w dynamicznym kodowaniu Huffmana (kod prefiksowy!) UWAGA: nieskończony zbiór słów kodowych!

6 Kod Golomba: własności: nieskończony zbiór słów kodowych! kod prefiksowy (p  n): –i =  n / m    p / m  = j : 1 i 0  1 j 0 –  n / m    p / m  : różne reszty z dzielenia (resztom odpowiada kod prefiksowy)

7 Kod Golomba: przykład Niech m = 5, wtedy reszty r kodujemy wg tabeli: rKod(r) 000 101 210 3110 4111

8 Kod Golomba: przykład Dla danych postaci 0000000100000000100100000000001000... kodujemy długości kolejnych ciągów zer: 7 8 2 10 12... (razem 8 + 9 + 3 + 11+ 18 = 49 bitów): 10 10 10 110 0 10 110 00 110 10 ( 4 + 5 + 3 +5 + 5 = 22 bity)

9 Kod Golomba: przykład c.d. Zakodujmy teraz dane 7 8 2 10 12... (49 bitów) używając kodu rzędu 10: 0 1101 0 1110 0 010 10 000 10 010 ( 5 + 5 + 4 +5 + 5 = 24 bity) Ale dla m=256 mielibyśmy (co najm.): 9 + 9 + 9 + 9 + 9 = 45 bitów qKod(q) 0000 1001 2010 3011 4100 5101 61100 71101 81110 91111

10 Kod Golomba: parametry W ciągu wartości niezależnych (P(0)=p) mamy: P( 0 n 1 ) = p n (1 - p) Czyli w ciągu liczb odpowiadających długościom serii: P( n ) = p n (1 - p) Pytania: Czy kod Golomba może być przy takim rozkładzie optymalny? Jeśli tak: jak dobrać wartość m?

11 Kod Golomba: optymalność Warunek konieczny optymalności: Wierzchołki o większych wagach (prawdopodobieństwach) wyżej niż te o mniejszych wagach Dla uproszczenia, niech m=2 k dla naturalnej k: kody odpowiadające liczbom qm, qm+1,…,qm+m-1 to liście na poziomie (q+1) + log m

12 Kod Golomba: optymalność c.d. Rozważmy liście położone najwyżej (1+log m): Prawdopodobieństwa: (1-p), (1-p)p 1,…, (1-p)p m-1 Suma wag 2 liści x m-1, x m o najmniejszych wagach powinna być większa od wagi liścia x 1 o największej wadze: (1-p) p m-1 + (1-p) p m-2  (1-p) p m-1 + p m-2  1

13 Kod Golomba: optymalność c.d. Chcemy podpinać liście jak najwyżej: Prawdopodobieństwa liści na poziomie 2+logn: (1-p)p m, (1-p) p m+1,…, (1-p)p 2m-1 Aby nie było możliwe umieszczenie ich wyżej, suma wag 2 liści x m, x m-1 o największych wagach powinna być mniejsza od wagi liścia x 1 o największej wadze (na poziomie 1+logn): (1-p) p m + (1-p) p m+1 < (1-p) p m + p m+1 < 1

14 Kod Golomba: optymalność c.d. Warunki konieczne optymalności: p m + p m+1 < 1  p m-1 + p m-2 Po przekształceniach: p m < 1/(1+p)  p m-2 m  - log(1+p) / log p > m-2 w przybliżeniu m  - 1 / log p > m-2

15 Kod Golomba: optymalność c.d. Okazuje się, że powyższe warunki konieczne dobrze przybliżają warunki wystarczające... Tw. [Gallager, van Voorhis 75] Kod Golomba rzędu m jest optymalnym kodem prefiksowym dla ciągów losowych liczb naturalnych o rozkładzie P(i)=(1-p)p i-1, gdy m =  - log(1+p) / log p  w przybliżeniu (dla p bliskiego 1): m =  - 1 / log p 

16 Kod Golomba: inna interpretacja Możemy kod Golomba potraktować jako kod przekształcający ciągi o różnych długościach w ciągi o różnych długościach: gdzie K(i) to kod stały i dla reszt z dzielenia przez m. inputoutput 0m0m 1 0 m-1 10 K(m-1) 0 m-2 10 K(m-2)... 010 K(1) 10 K(0)

17 Inna interpretacja: przykład m=5 Kodujemy 00000001 000000001 001 00000 000001000... jako 1 010 1 0110 010 1 1 000 inputoutput 000001 000010 111 00010 110 0010 10 010 01 10 00

18 Kod Golomba: jak liczyć śr. długość (bps) Teraz kodujemy ciągi zer i jedynek (nie liczby oznaczające ich długości!). Liczba bitów przypadająca na jeden symbol danych wejściowych: S(K) = sr(output) / sr(input) gdzie sr(output) i sr(output) to średnia długość ciągu wejściowego / wyjściowego (ważona wg prawdopodobieństw) ta definicja jednak ma sens!!!

19 Kod Golomba: średnia długość (bps) Przykład: m=5 sr(input)= 6 * p 1 + 5 * p 2 + 4 * p 3 + 3 * p 4 + 2 * p 5 + 1 * p 6 sr(output)= 1 * p 1 + 4 * p 2 + 4 * p 3 + 3 * p 4 + 3 * p 5 + 3 * p 6 inputoutputP(input) 000001p 1 = p 5 000010 111p 2 = p 4 (1-p) 00010 110p 3 = p 3 (1-p) 0010 10p 4 = p 2 (1-p) 010 01p 5 = p(1-p) 10 00p 6 = (1-p)

20 Kod Golomba w praktyce kodujemy bloki postaci 0 p 1, czyli kodowany „tekst” musi kończyć się jedynką wydajne dla p bliskich 1 (wtedy szansa na długie bloki) stopień kompresji zależy nie tylko od częstości wystąpień symboli ale też od ich „ustawienia” (porównaj z kodami kodującymi bloki ustalonej długości) przydatny nie tylko przy rozkładzie geometryczn. jak dobrać parametr m dla danych o nieznanym rozkładzie? wersja dynamiczna?

21 Kod Golomba: podsumowanie Własności: nieskończony zbiór słów kodowych, prosta i skończona reprezentacja LUB kod ze zmienną długością części kodowanej i kodującej tylko dla ciągów binarnych (lub ciągu liczb) optymalny dla rozkładu P(i) = p i (1-p), gdy m odpowiednio dobrane zastosowania: –obrazy binarne (p. kody Rice’a) –faksy

22 Kody Tunstalla: motywacja Dotychczas: kody o stałej długości: k symboli wejściowych na p symboli wyjściowych (zazwyczaj k=1), k,p ustalone kody o zmiennej długości: k symboli wejściowych (k ustalone) na... zmienną liczbę symboli wyjściowych kody o zmiennej długości wejścia i wyjścia: p. kod Golomba Wady: kody o stałej długości: brak kompresji kody o zmiennej długości: wrażliwość na błędy

23 Kody Tunstalla Nowe podejście: długość słowa kodowego stała liczba znaków tekstu wejściowego kodowana przez jedno słowo kodowe: zmienna Cel: kompresja przy niskich kosztach błędów zapisu/transmisji (typu „przekłamanie bitu”) Porównaj: alfabet Braile’a

24 Kody Tunstalla: definicja Dane: alfabet a 1,...,a N i prawdopodobieństwa p 1,...,p N. n : długość słowa kodowego (taka, że liczba słów kodowych, 2 n, jest większa od N).

25 Kody Tunstalla: definicja Tworzenie kodu. Przyporządkowanie symbolom alfabetu N różnych słów kodowych (o długości n). Dopóki liczba niewykorzystanych słów kodowych większa od N-1: –wybierz słowo kodowe e odpowiadające ciągowi o największym prawdopodobieństwie –usuń e z kodu –dodaj do kodu elementy e a 1, e a 2,..., e a N o prawdopodobieństwach P(e)  P(a 1 ), , P(e)  P(a N ) UWAGA: zostawiamy (co najmniej) jedno niewykorzystane słowo kodowe!

26 Kody Tunstalla: przykład alfabet a,b, c i prawdopodobieństwa (N = 3) P(a) = 0.6, P(b) = 0.3, P(c )=0.1 n = 3 : kod ma 8 słów kodowych. Etapy tworzenia kodu: a  0.6, b  0.3, c  0.1 aa  0.36, ab  0.18, ac  0.06, b  0.3, c  0.1 aaa  0.216, aab  0.108, aac  0.036, ab  0.18, ac  0.06, b  0.3, c  0.1

27 Kody Tunstalla: przykład inputoutput aaa000 aab001 aac010 ab011 ac100 b101 c110 ????????111 bloki wejściowe

28 Kody Tunstalla: po co wolne słowo kodowe? Zakodujmy tekst: ab c aab b aa Mamy: 011 110 001 101 ?? Wniosek: na końcu kodowanego tekstu może pojawić się fragment o długości nie większej od najdłuższego bloku kodowanego jednym słowem, któremu brak słowa kodowego! inputoutput aaa000 aab001 aac010 ab011 ac100 b101 c110 ????????111

29 Kody Tunstalla: po co wolne słowo c.d. Rozwiązanie: wolne słowo kodowe koduje informację o wystąpieniu „ogona” nie mającego słowa kodowego „ogon” kodujemy przy pomocy ustalonych kodów stałych dla wszystkich liter alfabetu wejściowego ab c aab b aa kodujemy 011 110 001 101 111 kod(a) kod(a)

30 Kody Tunstalla: własności własność prefiksowa: żadne słowo wejściowe odpowiadające słowu kodowemu nie jest prefiksem innego słowa wejściowego (nie mylić z kodem prefiksowym!) –słowo rozszerzane usuwamy z kodu –zachowanie tej zasady oznacza, że niektóre słowa kodowe zostaną niewykorzystane metoda zachłanna: minimalizacja liczby bitów przypadających na jeden symbol wejściowy

31 Kody Tunstalla: średnia długość (bps) Ogólnie: l iczba bitów przypadająca na jeden symbol danych wejściowych: S(K) = sr(output) / sr(input) ale sr(output) = n : każde słowo kodowe ma tę samą długość sr(input) : średnia ważona wg prawdopodobieństw długości bloków wejściowych odpowiadających słowom kodowym czyli S(K) = n / sr(input)

32 Kody Tunstalla: optymalność Rozważmy optymalność wśród kodów: 1. o stałej długości słów kodowych 2. o zmiennej długości bloków wejściowych 3. własności prefiksowej: żaden blok wejściowy nie jest prefiksem innego bloku wejściowego 4. każdy tekst można zakodować za wyjątkiem „ogona”, który jest prefiksem jakiegoś bloku wejściowego Kod optymalny: o najmniejszej średniej długości, czyli o największej średniej długości bloku wejściowego.

33 Kody Tunstalla: optymalność c.d. zbudujmy drzewo bloków wejściowych wtedy każdy wierzchołek wewnętrzny ma N potomków odpowiadających wszystkim literom alfabetu (wynika z warunku 4) Korzystając z powyższej: Tw. Kod Tunstalla jest optymalny wśród kodów spełniających warunki 1-4 Metoda dowodu: indukcja ze względu na liczbę słów kodowych

34 Kody Tunstalla: bps (przykład) inputoutputP( input ) aaa0000.216 aab0010.108 aac0100.036 ab0110.18 ac1000.06 b1010.3 c1100.1 ????????111 sr(input) = 0.216 * 3 + 0.108 * 3 + 0.036 + 0.18 * 2 + 0.06 * 2 + 0.3 * 1 + 0.1 * 1

35 Kody Tunstalla: podsumowanie zmienna długość bloków wejściowych, stała wyjściowych: kompresja i odporność na błędy jednoznaczność kodowania: własność prefiksowa bloków wejściowych jednoznaczność dekodowania: wynika ze stałej długości słów kodowych optymalność...

36 Średnia długość: przypomnienie i uogóln. W ogólnym przypadku możemy mieć kod K o zmiennej długości bloków wejściowych i słów kodowych: S(K)=sr(output) / sr(input) sr(input) = |b 1 | * p 1 +... + |b n | * p n sr(output) = |s 1 | * p 1 +... + |s n | * p n blok_we słowo_kodP(blok_we) b1b1 s1s1 p1p1 b2b2 s2s2 p2p2... bnbn snsn pnpn

37 Jeszcze inne podejście... najlepszą kompresję da rozszerzony kod Huffmana dla rozszerzenia P k, gdzie k to długość tekstu ale z tym wiąże się gigantyczny czas i pamięć... można temu zaradzić, stosując kody arytmetyczne w których słowo kodowe odpowiada całemu tekstowi!


Pobierz ppt "Kompresja danych Instytut Informatyki UWr Studia dzienne Wykład nr 3: kody Golomba, kody Tunstalla."

Podobne prezentacje


Reklamy Google