Wykład 4: kodowanie arytmetycznetju/KomprDz06/KomprDz06-Wyklad04.pdf · Podstawy i własnosci´...
Transcript of Wykład 4: kodowanie arytmetycznetju/KomprDz06/KomprDz06-Wyklad04.pdf · Podstawy i własnosci´...
Podstawy i własnosciImplementacja
Kodowanie informacji
Tomasz Jurdzinski
Wykład 4: kodowanie arytmetyczne
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Motywacja
Motywacje1 srednia długosc kodu Huffmana moze odbiegac o pmax +0.086
od entropii, gdzie pmax = maxi=1,...,n{pi} - moze to powodowacduze odchylenia od wartosci entropii
2 efekt ten mozna zniwelowac poprzez zastosowanie kodówHuffmana, w którym alfabet stanowia ciagi symboli okreslonejdługosci - ale wtedy rosnie gwałtownie rozmiar alfabetu.
Kodowanie arytmetyczne:
zastosowanie podejscia z punktu 2. bez koniecznosci tworzenia słówkodowych dla wszystkich ciagów symboli.Uogólnienie kodowania Shannona.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Ogólnie
Pierwsze spojrzenie
tekst zostaje odwzorowany na liczbe z przedziału [0,1)nazywana ZNACZNIKiem.zakodowana postac tekstu tworzy ZNACZNIK, reprezentowany zodpowiednio dobrana dokładnoscia oraz n - długosckodowanego tekstu.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Jedna litera
Znacznik dla jednej litery alfabetu:
elementy alfabetu numerujemy a1,a2, . . . ,an; oznaczmy ichprawdopodobienstwa przez p1,p2, . . . ,pn;literze ai przyporzadkowujemy dowolna liczbe z przedziału[F (i),F (i +1)), gdzie F (i) = ∑
i−1j=1 pi
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Znacznik dla ciagu
Kodowanie ciagu x1 . . .xn nad alfabetem a1, . . . ,am:1 z = [0,1); l = 0; p = 1;2 Dla i = 1,2, . . . ,n:
1 niech xi = aj2 l = l +F (j)(p− l)3 p = l +F (j +1)(p− l)
3 znacznik = (l +p)/2 (lub dowolna liczba z przedziału [l ,p))
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Przykład
P(a) = 0.7, P(b) = 0.1, P(c) = 0.2. Kodujemy tekst abc.
Tekst Lewy Prawy Znacznik0 1 0.5
a 0 0.7 0.35b 0.49 0.56 0.53c 0.546 0.560 0.553
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Jednoznacznosc
Lemat
Dla ustalonej długosci tekstu n, kazdy ciag jest odwzorowany naprzedział rozłaczny z przedziałami odpowiadajacymi innym ciagom.Gwarantuje to jednoznacznosc kodowania.
Dowód
Indukcja ze wzgledu na długosc kodowanego tekstu.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Dekodowanie
Dekodowanie ciagu o długosci n ze znacznika z:1 l = 0; p = 1;2 Dla i = 1,2, . . . ,n:
1 wybierz j takie, ze l +F (j)(p− l)≤ z < l +F (j +1)(p− l)2 przyjmij, ze xi = aj3 l = l +F (j)(p− l);4 p = l +F (j +1)(p− l).
3 Ciag oryginalny to x1 . . .xn.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Przykład
Niech z = 0.55 dla P(a) = 0.7, P(b) = 0.1, P(c) = 0.2 i n = 3.
Tekst Lewy Prawy Znacznik0 1
a 0 0.7b 0.49 0.56c 0.546 0.560
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Własnosci kodowania arytmetycznego
1 Wygenerowanie znacznika dla konkretnego ciagu nie wymagawyznaczania badz pamietania znaczników innych ciagów
2 Problem! Komputerowa reprezentacja znacznika moze wymagacduzej pamieci - jak dobrac wartosc znacznika abyzminimalizowac potrzebna pamiec?
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Długosc znacznika
Twierdzenie
Niech x = x1 . . .xn bedzie ciagiem danych o prawdopodobienstwiewystapienia P(x) = ∏
ni=1 P(xi). Zaokraglenie z ′ znacznika z dla ciagu
x do m(x) = dlog1/P(x)e+1 bitów (polegajace na usunieciudalszych bitów) gwarantuje jednoznacznosc kodowania.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Dowód
Oznaczenia:z = (l +p)/2 - znacznik;z ′- zaokraglenie do m = m(x) bitów.
Wystarczy pokazac, zel ≤ z ′ < p
dla l i p wyznaczonych przy omawianiu algorytmu.Jest to równowazne warunkowi:
|z−z ′|< (p− l)/2.
Zauwazmy, ze z ′ ≤ z < p oraz 0 <= z−z ′ < 2m. Pozostaje lewykoniec przedziału...
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Dowód c.d.
Zauwazmy:z ′ ≤ z < p;p− l = P(x) (dla ciagów jednoliterowych z definicji, dla dłuzszychdowód indukcyjny)z(x)− l = P(x)/2,
z ′(x) > z(x)−1/2m(x) ≥ z(x)−1/2log(1/P(x))+1
> z(x)−1/(2∗1/P(x)) = z(x)−P(x)/2= (p + l)/2− (p− l)/2 = l .
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Jednoznacznosc kodowania z zaokragleniem
Ostatecznie, jednoznacznosc wynika z:rozłacznosci przedziałów.faktu, ze z ′ nalezy do przedziału odpowiadajacego danemutekstowi.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Kod prefiksowy
Twierdzenie
Kod arytmetyczny jest (dla ustalonej długosci kodowanego tekstu)przy zaokraglaniu do dlog1/P(x)e+1 bitów jest kodem prefiksowym.
DowódWynika z nastepujacych faktów:
przyblizenie z ′ znacznika z do dlog1/P(x)e+1 bitów znajdujesie w przedziale przypisanym ciagowi x ,przedziały róznych ciagów sa rozłaczne.kazde słowo (liczba) o prefiksie z ′ tez miesci sie w przedzialeprzypisanym ciagowi x .
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Przykład
Znacznik dla P(a)=0.7, P(b)=0.1, P(c)=0.2 i tekstu abc to 0.553,binarnie 0.100011011. Liczba “potrzebnych” bitów tod(log1/0.014)e+1 = 8. Czyli zakodowana postac tekstu to 10001101.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Liczby rzeczywiste
Kod arytmetyczny a entropia
Kod a entropia
Srednia liczba bitów na jeden symbol kodu arytmetycznego (zzaokragleniem) dla ciagów o długosci n jest ≤ H(P)+2/n, gdzie P torozkład prawdopodobienstwa dla alfabetu wejsciowego.
Dowód
∑{x | |x |=n}P(x)m(x) = ∑{x | |x |=n}P(x)(dlog1/P(x)e+1)≤ ∑{x | |x |=n}P(x)(log(1/P(x))+1+1)= −∑{x | |x |=n}P(x) logP(x)+2∑{x | |x |=n}P(x)= H(Pn)+2
A zatem, liczba bitów na symbol jest nie wieksza niz
H(P)+2/n.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Problemy z implementacja
wraz ze wzrostem długosci ciagu potrzebna coraz wiekszaprecyzja reprezentacji liczb; a czas operacji arytmetycznych jestproporcjonalny do długosci liczb...dla efektywnosci transmisji danych - potrzebny przyrostowyalgorytm kodowania (znacznik powstaje wraz z wydłuzaniem sieciagu, nie dopiero po przeczytaniu całego ciagu).
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Przeskalowanie
E1(x) = 2x :[l ,p)⊆ [0,0.5)⇒ l = 0.0l ′,p = 0.0p′ ⇒ 2 ·p = 0.p′,2 ·p = 0.p′
E2(x) = 2(x −0.5):[l ,p)⊆ [0.5,1)⇒ l = 0.1l ′,p = 0.1p′ ⇒ 2(l −1/2) =0.l ′,2(p−1/2) = 0.p′
E3(x) = 2(x −0.25):l ∈ [0.25,0.5), p ∈ [0.5,0.75) ⇒ l = 0.01l ′, p = 0.10p′
⇒ 2(l −1/4) = 0.0l ′, 2(p−1/4) = 0.1p′
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Kodowanie z przeskalowaniem
Na poczatku: licznik := 0, l = 0, p = 1, kod jest słowem pustym.Po zakodowaniu kazdej litery:Dopóki [l ,p)⊆ [0,0.5) lub [l ,p)⊆ [0.5,1) lub [l ,p)⊆ [0.25,0.75):
1 Jesli [l ,p)⊆ [0,0.5):1 zamien [l ,p) na [E1(l),E1(p)), gdzie E1(x) = 2x .2 dołacz do kodu słowo 01licznik
3 licznik := 02 Jesli [l ,p)⊆ [0.5,1):
1 zamien [l ,p) na [E2(l),E2(p)), gdzie E2(x) = 2(x −0.5).2 dołacz do kodu słowo 10licznik
3 licznik := 03 l < 0.5 < p oraz [l ,p)⊆ [0.25,0.75):
1 zamien [l ,p) na [E3(l),E3(p)), gdzie E3(x) = 2(x −0.25)2 licznik := licznik +1;
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Przeskalowanie: poprawnosc
Lemat1 (E1) 2 ·num(0.0x) = num(0.x)
2 (E2) num(0.1x)−1/2 = num(0.0x);3 (E3) Ciag przeskalowan E1E i
2 jest równowazny E i3E1.
4 (E3) ciag przeskalowan E2E i1 jest równowazny E i
3E2
gdzie num(y) oznacza wartosc liczby zapisanej binarnie jako słowo y .
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Dekodowanie z przeskalowaniem
Wejscie: znacznik, czyli ciag binarny bedacy zakodowana postaciatekstu; n – długosc tekstu.Inicjalizacja:
1 Niech m = maxai dlog(1/P(ai))e+3. Odczytujemy pierwsze mbitów znacznika i ustalamy pierwsze przyblizenie znacznika z ′ ipierwszy symbol w tekscie, aj .
2 l := F (j); p := F (j +1);3 licznik := 0;
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Dekodowanie z przeskalowaniem
Kontynuacja (powtarzaj az do odkodowania n liter):1 jesli [l ,p) spełnia warunki dla przeskalowania E1 lub E2:
1 przeskaluj [l ,p) przy pomocy E1 lub E2,2 usun 1+ licznik najbardziej znaczacych bitów z ′ i dołacz kolejne
1+ licznik bitów jako najmniej znaczace bity z ′3 licznik := 0
2 jesli [l ,p) spełnia warunek dla E3: przeskalowanie E3 dla [l ,p) i z ′
i zwiekszenie licznik o 1;3 jesli przedział nie spełnia zadnego z warunków dla E1, E2, E3:
odczytujemy kolejne bity z ′ tak aby było ich co najmniej m; napodstawie z ′ wyznaczamy kolejna litere tekstu i kolejny przedział.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Co daje skalowanie
wielkosc przedziału (p− l) pozostaje nie mniejsza niz pmin/4,gdzie pmin to najmniejsze prawdopodobienstwo pojedynczegosymbolu;Uwaga: mały przedział wymaga duzej dokładnosci (aby wartoscil i p nie zrównały sie).kodowanie progresywne: kod powstaje w trakcie kodowania, niedopiero na koncu;dekodowanie: operacje na znaczniku długosci ≈ log(1/pmin), niena „pełnym” znaczniku;dekodowanie bardziej skomplikowane
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Implementacja całkowitoliczbowa
ProblemArytmetyka zmiennoprzecinkowa:
generuje błedy zaokraglen, wieckonieczna dokładna implementacja (komplikacje...);
Cel
przeskalowac przedział [0,1) na zbiór naturalnych liczb m-bitowych,czyli [0,2m −1], binarnie [0m,1m].
Pytanie
jak dobrac parametr m aby zachowac jednoznacznosc kodowania(nie mozemy uzyskac przedziału o wielkosci 0).
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Implementacja całkowitoliczbowa c.d.
Załozenia
prawdopodobienstwa wyliczone na podstawie czestosciwystepowania...niech ci to liczba wystapien symbolu ai , C = ∑
ni=1 ci
wówczas pi = ci/Cniech fi = ∑
i−1j=1 ci
Dobór parametru m
dla jednego symbolu: 2m > C (najmniejszy przedział to 1/C)dla k symboli: 2m > Ck ... :(ale przeskalowanie gwarantuje, ze po kazdym kroku mamyprzedział nie mniejszy niz pmin/4 (czyli 1/4C)zatem wystarczy, ze: 2m > 4C.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Implementacja całkowitoliczbowa c.d.
Algorytm: jak zaokraglamy
Kodowanie ciagu x1 . . .xn nad alfabetem a1, . . . ,ar :1 l = 0; p = 2m −1;2 Dla i = 1,2, . . . ,n:
1 niech xi = aj
2 l = l +⌊
(p−l+1)·f (j)C
⌋3 p = l +
⌊(p−l+1)·f (j+1)
C
⌋−1
3 znacznik: dowolna liczba całkowita z przedziału [l ,p]
Uwaga
Musimy tez stosowac przeskalowania (w przeciwnym razie potrzebnebardzo duze m i rosnie czas obliczen).
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Implementacja całkowitoliczbowa c.d.
Jak zaokraglamy
dlaczego −1: poniewaz [l ,p) reprezentujemy jako [l ,p−1];dlaczego (p− l+1) a nie (p− l): z powyzszego powodu;dlaczego f (j)/C i f (j +1)/C: poniewaz odpowiadajaskumulowanym prawdopodobienstwom F (j) i F (j +1).
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Kodowanie adaptacyjne
Idea
W kazdym kroku uzywamy czestosci (a tym samymprawdopodobienstw) wyliczonych z juz odkodowanej czesci tekstu.
Modyfikacja algorytmu
(de)Kodujac k -ty symbol, dzielimy aktualny przedział zgodnie zczestosciami dla pierwszych (k −1) symboli.
Problem zerowego prawdopodobienstwa
Jak kodowac symbol pojawiajacy sie po raz pierwszy:przydzielic czestosci 1: niepraktyczne przy duzym alfabecie;zarezerwowac symbol specjalny o czestosci (np.) 1, którypoprzedza pierwsze pojawienie sie symbolu; po zakodowaniutego symbolu kodujemy nowy symbol wg rozkładu jednostajnego.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Kodowanie z uwzglednieniem kontekstu
Załozenie
Tekst nie jest ciagiem wartosci niezaleznych. Zaleznosci dotyczasasiednich liter.
Idea
Dla kazdego symbolu ai , badamy prawdopodobienstwo pojawieniasie symboli a1, . . . ,an bezposrednio za ai .
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Kontekst c.d.
Przykład
a b ca .4 .2 .4b .1 .8 .1c .25 .25 .5
Modyfikacja algorytmu
(de)kodujac k -ty symbol, dzielimy aktualny przedział zgodnie zczestosciami dla wystapien symboli za symbolem (k −1)szym.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Kontekst i adaptacja a implementacje
Adaptacja i kontekst a implementacja
dodatkowe struktury danych i ich modyfikacje: niekonieczne!algorytm z przeskalowaniem: wystarczy znac najmniejszeprawdopodobienstwo;implementacja całkowitoliczbowa: wystarczy znac długosckodowanego tekstu.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Kodowanie arytmetyczne a kodowanie Huffmana
Co lepsze?
gdy grupujemy m symboli:Huffman koduje ze srednia H(P)+1/m, kodowanie arytmetyczneH(P)+2/male grupowanie dla duzych m w Huffmanie nierealistyczne
kod arytmetyczny bardziej elastyczny:wersja adaptacyjna: duzo łatwiej przy kodowaniu arytmetycznym;uwzglednienie kontekstu: kodowanie arytmetyczne ma mniejszewymagania pamieciowe.
Jurdzinski Kodowanie arytmetyczne
Podstawy i własnosciImplementacja
Kodowanie arytmetyczne: zastosowania
bezstratna kompresja obrazów (JBIG): wariant predykcyjny;progresywna transmisja obrazów;algorytm PPM (kodowanie arytmetyczne z kontekstem): jedna znajlepszych metod kompresji tekstów w jezyku naturalnym.problem: patenty!
Jurdzinski Kodowanie arytmetyczne